Linux

為什麼我不能使用 NAME 或 PRODUCT 編寫 udev 規則?

  • June 13, 2020

我想編寫一個 udev 規則,當我通過藍牙連接 Bose 耳機時會觸發該規則。

執行udevadm monitor --kernel --property並連接耳機後,我得到了這個:

KERNEL[2226.084251] add      /devices/virtual/input/input22 (input)
ACTION=add
DEVPATH=/devices/virtual/input/input22
SUBSYSTEM=input
PRODUCT=5/9e/4020/452
NAME="Słuchawencje (AVRCP)"
PHYS="00:0d:f0:bf:f7:df"
PROP=0
EV=100007
KEY=2fc800 145200000000 0 10300 49e800000c00 e16800000000f f810000010000ffc
REL=0
MODALIAS=input:b0005v009Ep4020e0452-e0,1,2,14,k71,72,73,8A,8B,A3,A5,A6,A7,A8,AB,AE,C8,C9,D0,161,164,166,16A,16C,18B,18E,18F,190,191,192,193,195,ramlsfw
SEQNUM=3814

但是當我執行udevadm info --attribute-walk --path=/devices/virtual/input/input22NAME 並且 PRODUCT 不存在時:

 looking at device '/devices/virtual/input/input22':
   KERNEL=="input22"
   SUBSYSTEM=="input"
   DRIVER==""
   ATTR{uniq}==""
   ATTR{phys}=="00:0d:f0:bf:f7:df"
   ATTR{properties}=="0"

為什麼?為什麼我不能在 udev 規則中使用 NAME/PRODUCT?

對於其他藍牙設備,例如我的無線揚聲器,udev 的表現稍好一些。這是udevadm monitor --kernel --property我的無線揚聲器的輸出:

KERNEL[2635.676303] add      /devices/virtual/input/input23 (input)
ACTION=add
DEVPATH=/devices/virtual/input/input23
SUBSYSTEM=input
PRODUCT=5/0/0/0
NAME="JBL GO 2 (AVRCP)"
PHYS="00:0d:f0:bf:f7:df"
PROP=0
EV=100007
KEY=2fc800 145200000000 0 10300 49e800000c00 e16800000000f f810000010000ffc
REL=0
MODALIAS=input:b0005v0000p0000e0000-e0,1,2,14,k71,72,73,8A,8B,A3,A5,A6,A7,A8,AB,AE,C8,C9,D0,161,164,166,16A,16C,18B,18E,18F,190,191,192,193,195,ramlsfw
SEQNUM=3834

udevadm info --attribute-walk --path=/devices/virtual/input/input23列印:

 looking at device '/devices/virtual/input/input23':
   KERNEL=="input23"
   SUBSYSTEM=="input"
   DRIVER==""
   ATTR{name}=="JBL GO 2 (AVRCP)"
   ATTR{properties}=="0"
   ATTR{uniq}==""
   ATTR{phys}=="00:0d:f0:bf:f7:df"

PRODUCT 仍然不存在,但至少 NAME 存在。

要匹配規則中的設備屬性,您必須使案例如:

ENV{PRODUCT}

預設屬性只有這麼多。其餘的是特定於設備的,ENV{PROPERTY} 是引用它們的方式。

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