Проблема:

Проблема:

Когда я подключаю устройство Bluetooth (например, Wiimote) к своему компьютеру и вывожу список всех устройств systemd через systemctl list-units -t device, устройство отображается как sys-subsystem-bluetooth-devices-hci0:ID.device.

Проблема:

Я хочу привязать службу systemd к определенному устройству Bluetooth (например, wiimote). Таким образом, мне понадобится идея о названии.ИДЕНТИФИКАТОРотличается на двух машинах Arch Linux.

Вопросы:

  • Кто назначает эти устройства?ИДЕНТИФИКАТОРs к устройствам bluetooth systemd?
  • ЭтоИДЕНТИФИКАТОРстатический наодинсистемы и среди обновлений системы, и, таким образом, безопасно ли привязывать службы к этому устройству, т. е. будет ли эта служба запускаться только при подключении устройства Bluetooth того же типа?
  • Могу ли я изменить/повлиять на это?ИДЕНТИФИКАТОР?

Попытки:

Я пытался изменитьИДЕНТИФИКАТОРс правилом 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каким-то образом экранируется), но не достигает желаемого результата.

Связанный контент