为什么我不能使用 NAME 或 PRODUCT 编写 udev 规则?

为什么我不能使用 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名称和产品时不存在:

  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"

产品仍然不存在,但至少名称存在。

答案1

要匹配规则中的设备属性,您必须使用例如:

ENV{PRODUCT}

只有这么多默认属性。其余的都是特定于设备的,ENV{PROPERTY} 是引用它们的方式。

相关内容