問題:

問題:

Bluetooth デバイス (例: Wii リモコン) をマシンに接続し、 経由で systemd のすべてのデバイス ユニットを一覧表示するとsystemctl list-units -t device、デバイス ユニットは として表示されますsys-subsystem-bluetooth-devices-hci0:ID.device

問題:

私は特定のBluetoothデバイスユニット(例えばWiimote)にsystemdサービスをバインドしたい。そのため、名前についてのアイデアが必要になる。ID2 台の Arch Linux マシンで異なります。

質問:

  • これらのデバイスを割り当てるのは誰かIDs を Bluetooth systemd デバイス ユニットに接続しますか?
  • それはID静的オン1つシステムとシステム アップデートの間で、そのデバイス ユニットにサービスをバインドすることは安全ですか? つまり、このサービスは、同じタイプの Bluetooth デバイスを接続した場合にのみトリガーされますか?
  • これを変更/影響を与えることはできますか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==""

2 つのシステム間ですべての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が何らかの方法でエスケープされているわけではありません)、目的の結果は得られません。

関連情報