問題:

問題:

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

相關內容