Linux

對 udevadm 的使用感到困惑

  • February 22, 2020

這裡的最終目標是打開/關閉滑鼠插頭上的觸摸板,所以我試圖從 udev 數據庫中獲取滑鼠和触摸板的一些屬性,使用 udevadm 但我不知道它是如何工作的,不幸的是手冊頁是對我來說不夠清楚……

$ lsb_release -irc
分銷商 ID:Debian
發布:8.4
代號:傑西

這是我正在尋找的資訊類型:

KERNEL=="input16"
   SUBSYSTEM=="input"
   DRIVER==""
   ATTR{name}=="Bluetooth Laser Travel Mouse"
   ATTR{phys}=="5c:e0:c5:9d:63:fd"
   ATTR{uniq}=="00:07:61:ec:be:5c"
   ATTR{properties}=="0"

從這裡我試過這個:

$ udevadm info -a /sys/devices/pci0000\:00/0000\:00\:1c.3/0000\:03\:00.0/usb2/2-1/2-1\:1.0/0003\:1EA7\:0064.0002/input/input25/mouse1/`

我得到了這個

未知設備,需要 /dev/ 或 /sys 中的絕對路徑。

如果我監控,我會得到這個結果:

$ udevadm monitor -k -s input
monitor will print the received events for:
KERNEL - the kernel uevent

KERNEL[4375.486738] remove   /devices/pci0000:00/0000:00:1c.3/0000:03:00.0/usb2/2-1/2-1:1.0/0003:1EA7:0064.0002/input/input25/mouse1 (input)
KERNEL[4375.496500] remove   /devices/pci0000:00/0000:00:1c.3/0000:03:00.0/usb2/2-1/2-1:1.0/0003:1EA7:0064.0002/input/input25/event11 (input)
KERNEL[4375.532441] remove   /devices/pci0000:00/0000:00:1c.3/0000:03:00.0/usb2/2-1/2-1:1.0/0003:1EA7:0064.0002/input/input25 (input)
KERNEL[4377.840574] add      /devices/pci0000:00/0000:00:1c.3/0000:03:00.0/usb2/2-1/2-1:1.0/0003:1EA7:0064.0003/input/input26 (input)
KERNEL[4377.840667] add      /devices/pci0000:00/0000:00:1c.3/0000:03:00.0/usb2/2-1/2-1:1.0/0003:1EA7:0064.0003/input/input26/mouse1 (input)
KERNEL[4377.840759] add      /devices/pci0000:00/0000:00:1c.3/0000:03:00.0/usb2/2-1/2-1:1.0/0003:1EA7:0064.0003/input/input26/event11 (input)

所以我也試過這個:

$ udevadm info -a -p /sys/devices/pci0000\:00/0000\:00\:1c.3/0000\:03\:00.0/usb2/2-1/2-1\:1.0/0003\:1EA7\:0064.0002/input/input25/

還有這個

$ udevadm info -a -p /devices/pci0000\:00/0000\:00\:1c.3/0000\:03\:00.0/usb2/2-1/2-1\:1.0/0003\:1EA7\:0064.0002/input/input25/

並得到這個結果

未找到系統路徑

我設法獲得一些屬性的唯一方法是使用以下命令:

$ udevadm info --query=all --name=/dev/input/mouse1

我明白了,但是,我沒有我正在尋找的屬性……(即ATTR{name}

P:/devices/pci0000:00/0000:00:1c.3/0000:03:00.0/usb2/2-1/2-1:1.0/0003:1EA7:0064.0003/input/input26/mouse1
N: 輸入/滑鼠1 S: 輸入/by-id/usb-1ea7_2.4G_Wireless_Mouse-mouse
S:輸入/按路徑/pci-0000:03:00.0-usb-0:1:1.0-滑鼠
E: DEVLINKS=/dev/input/by-id/usb-1ea7_2.4G_Wireless_Mouse-mouse /dev/input/by-path/pci-0000:03:00.0-usb-0:1:1.0-mouse
E: DEVNAME=/dev/input/mouse1
E: DEVPATH=/devices/pci0000:00/0000:00:1c.3/0000:03:00.0/usb2/2-1/2-1:1.0/0003:1EA7:0064.0003/input/input26/mouse1
E: ID_BUS=usb
E: ID_INPUT=1
E: ID_INPUT_MOUSE=1
E: ID_MODEL=2.4G_Wireless_Mouse
E: ID_MODEL_ENC=2.4G\x20無線\x20滑鼠
E: ID_MODEL_ID=0064
E: ID_PATH=pci-0000:03:00.0-usb-0:1:1.0
E: ID_PATH_TAG=pci-0000_03_00_0-usb-0_1_1_0
E: ID_REVISION=0200
E: ID_SERIAL=1ea7_2.4G_Wireless_Mouse
E: ID_TYPE=隱藏
E: ID_USB_DRIVER=usbhid
E: ID_USB_INTERFACES=:030102:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=1ea7
E: ID_VENDOR_ENC=1ea7
E: ID_VENDOR_ID=1ea7
E:專業=13
E:次要=33
E: 子系統=輸入
E:USEC_INITIALIZED=77840674

很明顯,我對如何查詢 udev 來獲取設備的屬性有一個誤解。

希望我足夠清楚,如果有人知道我在哪裡弄錯了歡迎任何意見!

謝謝 !

馬特。

請注意,輸入數字已更改(從25,您嘗試過的內容,變為26,內容 ),因為這些數字不能保證在引導期間保持不變。嘗試

udevadm info -q path -n /dev/input/by-id/usb-1ea7_2.4G_Wireless_Mouse-mouse

使用常量by-idsymlinkg 以獲取所需格式的路徑udev,然後類似於

udevadm info -a -p /path/you/just/got

走路徑並輸出沿途的所有屬性(您可能需要使用父屬性來辨識它)。

您還可以將其結合起來:

udevadm info -a -p $(udevadm info -q path -n /dev/whatever)

我用了

udevadm info -a /dev/hidraw0   

引用自:https://unix.stackexchange.com/questions/359595