當我將藍牙裝置(例如 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
以某種方式轉義),但沒有達到預期的結果。