Udev는 USB 이더넷 장치의 이름을 바꾸지 않습니다.

Udev는 USB 이더넷 장치의 이름을 바꾸지 않습니다.

저는 Arch Linux, Udev v234, SystemD v234.11-8을 사용하고 있습니다.

나는 Arch Linux를 실행하는 노트북과 내 노트북보다 더 나은 WiFi 신호를 수신하는 Nexus 5 Android 휴대폰을 가지고 있습니다. USB 테더링을 통해 휴대폰을 연결할 때 노트북이 자동으로 인터넷에 연결되기를 원합니다. 이를 위해 나는 몇 가지를 시도했습니다.

  1. 나는 다음에서 이 (유일한) udev 규칙을 만들었습니다 /etc/udev/rules.d/99-nexus-plugged.rules.

    #!/bin/sh
    ACTION=="add", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee2", IMPORT="/lib/udev/rename_netiface %k hello", RUN+="/home/babken/test/adb-enable-tethering"
    

    udev에서 내 장치의 이름을 다음으로 변경하고 싶지만 hello여전히 임의의 이름이 생성됩니다. 내가 뭘 잘못했나요?

    내 스크립트가 실행되었기 때문에 이 규칙이 일치한다는 것을 알고 있습니다.

  2. 2개의 udev 규칙을 만들었습니다. 첫 번째는 원격으로 휴대폰에 연결하고 테더링을 활성화하여 USB 테더링을 활성화하는 것입니다.

    #!/bin/sh
    SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee*",  RUN+="/home/babken/test/adb-enable-tethering"
    

    두 번째 규칙은 이더넷 이름을 임의의 이름에서 enp0setc다음으로 바꿔야 합니다 hello.

    #!/bin/sh
    SUBSYSTEM=="net", ACTION=="add", KERNEL=="enp0s29u1u2", ATTR{address}=="6a:e7:28:13:45:f7", NAME="hello", RUN+="/bin/touch /tmp/hello"
    

    두 번째 규칙은 트리거되지도 않고 /tmp/hello파일을 생성하지도 않습니다.

    흥미롭게도 두 번째 규칙을 실행하면 udevadm test /sys/class/net/enp0s29u1u2해당 규칙이 실행되고 내 장치의 이름이 hello.로 바뀌지만 전화기를 분리했다가 다시 연결할 때는 그렇지 않습니다. 그러면 이 규칙이 실행되지 않는 이유는 무엇입니까?

나는 항상 sudo udevadm control --reloadudev 규칙을 변경한 후 다시 로드하기 위해 실행합니다.

장치를 연결할 때 Journalctl 로그는 다음과 같습니다.

Aug 25 15:41:44 lenovo-laptop kernel: usb 2-1.2: new high-speed USB device number 38 using ehci-pci
Aug 25 15:41:49 lenovo-laptop kernel: usb 2-1.2: USB disconnect, device number 38
Aug 25 15:41:49 lenovo-laptop kernel: usb 2-1.2: new high-speed USB device number 39 using ehci-pci
Aug 25 15:41:49 lenovo-laptop kernel: rndis_host 2-1.2:1.0 usb0: register 'rndis_host' at usb-0000:00:1d.0-1.2, RNDIS device, c6:d5:df:ba:ba:4d
Aug 25 15:41:50 lenovo-laptop systemd-udevd[20464]: Process '/home/babken/test/adb-enable-tethering' failed with exit code 1.
Aug 25 15:41:50 lenovo-laptop systemd-udevd[20710]: Process '/home/babken/test/adb-enable-tethering' failed with exit code 1.
Aug 25 15:41:50 lenovo-laptop mtp-probe[20778]: checking bus 2, device 39: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2"
Aug 25 15:41:50 lenovo-laptop mtp-probe[20778]: bus: 2, device: 39 was not an MTP device
Aug 25 15:41:50 lenovo-laptop systemd-udevd[20464]: link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.
Aug 25 15:41:50 lenovo-laptop kernel: rndis_host 2-1.2:1.0 enp0s29u1u2: renamed from usb0
Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: waiting for carrier
Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: waiting for carrier
Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: carrier acquired
Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: IAID 28:13:45:f7
Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: adding address fe80::5f59:ada0:7eae:987b
Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: soliciting an IPv6 router
Aug 25 15:41:50 lenovo-laptop ifplugd(enp0s29u1u2)[12486]: Link beat detected.
Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: rebinding lease of 192.168.42.150
Aug 25 15:41:50 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: probing address 192.168.42.150/24
Aug 25 15:41:51 lenovo-laptop ifplugd(enp0s29u1u2)[12486]: Executing '/etc/ifplugd/ifplugd.action enp0s29u1u2 up'.
Aug 25 15:41:51 lenovo-laptop ifplugd(enp0s29u1u2)[12486]: Program executed successfully.
Aug 25 15:41:56 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: leased 192.168.42.150 for 3600 seconds
Aug 25 15:41:56 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: adding route to 192.168.42.0/24
Aug 25 15:41:56 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: adding default route via 192.168.42.129
Aug 25 15:42:03 lenovo-laptop dhcpcd[3516]: enp0s29u1u2: no IPv6 Routers available

출력 udevadm info -a /sys/class/net/enp0s29u1u2:

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/net/enp0s29u1u2':
    KERNEL=="enp0s29u1u2"
    SUBSYSTEM=="net"
    DRIVER==""
    ATTR{addr_assign_type}=="3"
    ATTR{addr_len}=="6"
    ATTR{address}=="6a:e7:28:13:45:f7"
    ATTR{broadcast}=="ff:ff:ff:ff:ff:ff"
    ATTR{carrier}=="1"
    ATTR{carrier_changes}=="0"
    ATTR{dev_id}=="0x0"
    ATTR{dev_port}=="0"
    ATTR{dormant}=="0"
    ATTR{flags}=="0x1003"
    ATTR{gro_flush_timeout}=="0"
    ATTR{ifalias}==""
    ATTR{ifindex}=="36"
    ATTR{iflink}=="36"
    ATTR{link_mode}=="0"
    ATTR{mtu}=="1500"
    ATTR{name_assign_type}=="4"
    ATTR{netdev_group}=="0"
    ATTR{operstate}=="unknown"
    ATTR{proto_down}=="0"
    ATTR{tx_queue_len}=="1000"
    ATTR{type}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0':
    KERNELS=="2-1.2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="rndis_host"
    ATTRS{authorized}=="1"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceClass}=="e0"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bInterfaceProtocol}=="03"
    ATTRS{bInterfaceSubClass}=="01"
    ATTRS{bNumEndpoints}=="01"
    ATTRS{iad_bFirstInterface}=="00"
    ATTRS{iad_bFunctionClass}=="e0"
    ATTRS{iad_bFunctionProtocol}=="03"
    ATTRS{iad_bFunctionSubClass}=="01"
    ATTRS{iad_bInterfaceCount}=="02"
    ATTRS{interface}=="RNDIS Communications Control"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2':
    KERNELS=="2-1.2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="ef"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bDeviceSubClass}=="02"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="500mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 3"
    ATTRS{bcdDevice}=="0232"
    ATTRS{bmAttributes}=="80"
    ATTRS{busnum}=="2"
    ATTRS{configuration}==""
    ATTRS{devnum}=="68"
    ATTRS{devpath}=="1.2"
    ATTRS{idProduct}=="4ee4"
    ATTRS{idVendor}=="18d1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="LGE"
    ATTRS{maxchild}=="0"
    ATTRS{product}=="Nexus 5"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="removable"
    ATTRS{serial}=="0831bd3b21320609"
    ATTRS{speed}=="480"
    ATTRS{urbnum}=="685"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1':
    KERNELS=="2-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0000"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="2"
    ATTRS{configuration}==""
    ATTRS{devnum}=="2"
    ATTRS{devpath}=="1"
    ATTRS{idProduct}=="0024"
    ATTRS{idVendor}=="8087"
    ATTRS{ltm_capable}=="no"
    ATTRS{maxchild}=="6"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="fixed"
    ATTRS{speed}=="480"
    ATTRS{urbnum}=="152578"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2':
    KERNELS=="usb2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{authorized_default}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0412"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="2"
    ATTRS{configuration}==""
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{idProduct}=="0002"
    ATTRS{idVendor}=="1d6b"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Linux 4.12.8-2-ARCH ehci_hcd"
    ATTRS{maxchild}=="2"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{serial}=="0000:00:1d.0"
    ATTRS{speed}=="480"
    ATTRS{urbnum}=="27919"
    ATTRS{version}==" 2.00"

  looking at parent device '/devices/pci0000:00/0000:00:1d.0':
    KERNELS=="0000:00:1d.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci-pci"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x0c0320"
    ATTRS{companion}==""
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{device}=="0x1c26"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="1"
    ATTRS{irq}=="23"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{local_cpus}=="0f"
    ATTRS{msi_bus}=="1"
    ATTRS{numa_node}=="-1"
    ATTRS{revision}=="0x05"
    ATTRS{subsystem_device}=="0x3975"
    ATTRS{subsystem_vendor}=="0x17aa"
    ATTRS{uframe_periodic_max}=="100"
    ATTRS{vendor}=="0x8086"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

답변1

이름 바꾸기 부분을 완료하려면 다음 규칙을 시도해 보세요. 스크립트를 실행하려면 몇 가지 사항을 자유롭게 수정하세요.

SUBSYSTEM=="net", ACTION=="add", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee2", NAME="hallo"

이 규칙은 다음에서 유래합니다.저것하나.

이것이 작동하지 않으면 시스템에서 자동으로 생성되는 udev 규칙을 알고 있어야 합니다. 예를 들어, 내 Debian 시스템은 다음 규칙을 사용하여 Wi-Fi 인터페이스를 관리합니다(여기에 인용된 규칙에는 일부 조정이 있습니다. 아래 참조).

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="c0:f8:da:03:c1:a8", NAME="wlan2"

c0:f8:da:03:c1:a8삽입된 MAC 주소를 기록해 두십시오. 비슷한 내용이 장치 이름을 적절하게 바꾸는 사용자 지정 규칙을 만드는 데 도움이 될 수 있습니다.

편집하다:위에 제공된 두 번째 규칙은 이제 본질적으로 언급된 규칙으로 축소되었습니다.여기(Tom Yan도 댓글에서 이 점을 지적했습니다.)

답변2

이 답변은 Udev 규칙이 실행되지 않는 문제를 해결하지 못합니다. 그러나 원래 목표는 이더넷 장치를 다른 포트에 연결할 때 일관된 이더넷 장치 이름을 얻는 것이었으므로 이 솔루션이 제 역할을 합니다.

Udev가 내 구성을 덮어쓰고 있어서 네트워크 규칙을 비활성화했습니다.

 # ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules

usb0이제 내 장치에는 항상 이름이 지정됩니다. 바라보다기존 장치 이름으로 되돌리기.

답변3

FairPhone에 대한 자동 구성을 구성하려고 할 때 이 문제가 발생했습니다. 나는 내 장치만 신뢰하므로 이는 내 Fairphone으로 제한되어야 합니다. 그래서 Fairphone에서 제공하는 네트워크 장치의 이름을 ifup/ifdown이 인식할 수 있는 이름으로 바꾸고 싶습니다.

위의 제안이 실행에 도움이 되었습니다.

명심해야 할 두 가지 사항이 있습니다.

  1. 내 페어폰은 네트워크 장치에 대해 끊임없이 변화하는 여러 개의 MAC 주소를 생성합니다. 따라서 이더넷 주소 일치가 전혀 작동하지 않습니다.
  2. SUBSYSTEM=="net"Android에서 USB 테더링이 활성화되고 네트워크 인터페이스가 생성되는 경우에만 트리거됩니다.

다음 규칙이 나에게 적합한 것 같습니다.

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{manufacturer}=="Hersteller", ATTRS{idProduct}=="dead", ATTRS{idVendor}=="beef", ATTRS{serial}=="deadbeef", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="usb*", NAME="mydevname0"

설정에 따라 필드를 변경해야 합니다.

관련 정보