当我将蓝牙设备(例如 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
以某种方式转义),但没有达到预期的结果。