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