Linux
為什麼我不能使用 NAME 或 PRODUCT 編寫 udev 規則?
我想編寫一個 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/input22
NAME 並且 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} 是引用它們的方式。