问题:

问题:

当我将蓝牙设备(例如 Wiimote)连接到我的机器并通过 列出 systemd 的所有设备单元时systemctl list-units -t device,设备单元显示为sys-subsystem-bluetooth-devices-hci0:ID.device

问题:

我想将 systemd 服务绑定到特定的蓝牙设备单元(例如 Wiimote)。因此,我需要对这个名字有一个想法。这ID在两台 Arch Linux 机器上有所不同。

问题:

  • 谁分配这些设备IDs 到蓝牙系统设备单元?
  • 是个ID静态开启系统和系统更新之间,因此将服务绑定到该设备单元是否安全,即,只有在连接相同类型的蓝牙设备时才会触发该服务吗?
  • 我可以改变/影响这个吗ID

尝试:

我试图改变ID遵循以下 udev 规则Arch wiki 上的描述。通过udevadm info -a -p $(udevadm info -q path -n /dev/hidraw4 )我得到:

looking at device '/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/bluetooth/hci0/hci0:256/0005:057E:0330.000C/hidraw/hidraw4':
KERNEL=="hidraw4"
SUBSYSTEM=="hidraw"
DRIVER==""

looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/bluetooth/hci0/hci0:256/0005:057E:0330.000C':
KERNELS=="0005:057E:0330.000C"
SUBSYSTEMS=="hid"
DRIVERS=="wiimote"
ATTRS{country}=="00"
ATTRS{devtype}=="gen20"
ATTRS{extension}=="none"

looking at parent device '/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/bluetooth/hci0/hci0:256':
KERNELS=="hci0:256"
SUBSYSTEMS=="bluetooth"
DRIVERS==""

两个系统中的所有KERNEL(S)条目都不相同。因此我尝试应用 udev 规则:

SUBSYSTEMS=="hid", DRIVERS=="wiimote", TAG+="systemd", SYMLINK+="wii"

但这不会创建任何额外的设备单元。

答案1

您需要添加:

ENV{SYSTEMD_ALIAS}="/dev/wii"

(这就是SYMLINK+="wii"创建的)你的 udev 规则。

路径标准化后,结果是dev-wii.device.

(注意:这听起来很简单,但我花了几个小时才明白,所以我绝不认为这是一个简单的问题!我为了自己的目的而努力解决这个问题,遇到你的问题,希望能找到解决方案我。)

切线而言,如果您的 udev 规则分为多行,则中断用 转义\,您还需要确保文件以空行结尾。否则,它似乎是由 udev 解析的(这不像字符EOF以某种方式转义),但没有达到预期的结果。

相关内容