Problema:

Problema:

Quando eu conecto um dispositivo bluetooth (por exemplo, um wiimote) à minha máquina e listo todas as unidades de dispositivos do systemd via systemctl list-units -t device, a unidade do dispositivo aparece como sys-subsystem-bluetooth-devices-hci0:ID.device.

Problema:

Quero vincular um serviço systemd a uma unidade de dispositivo bluetooth específica (por exemplo, wiimote). Assim, precisarei de uma ideia sobre o nome. OEU IAdifere em duas máquinas Arch Linux.

Questões:

  • Quem atribui esses dispositivosEU IAs para unidades de dispositivos bluetooth systemd?
  • É oEU IAestático ativadoumsistema e entre as atualizações do sistema e, portanto, é seguro vincular serviços a essa unidade do dispositivo, ou seja, esse serviço só será acionado ao conectar um dispositivo bluetooth do mesmo tipo?
  • Posso mudar/influenciar issoEU IA?

Tentativas:

Eu tentei mudar oEU IAcom uma regra do udev seguindo estadescrição no wiki do Arch. Através udevadm info -a -p $(udevadm info -q path -n /dev/hidraw4 )eu consegui:

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==""

Todas KERNEL(S)as entradas não são iguais em dois sistemas. Assim, tentei aplicar a regra do udev:

SUBSYSTEMS=="hid", DRIVERS=="wiimote", TAG+="systemd", SYMLINK+="wii"

Mas isso não cria nenhuma unidade de dispositivo adicional.

Responder1

Você precisa adicionar:

ENV{SYSTEMD_ALIAS}="/dev/wii"

(que é o que SYMLINK+="wii"cria) à sua regra do udev.

Após a normalização do caminho, isso resulta em dev-wii.device.

(NB: isso parece tão simples, mas levei algumas horas para chegar lá, então não estou descartando isso como uma pergunta fácil! Eu lutei com isso para meus próprios propósitos, me deparando com sua pergunta esperando por uma solução para eu mesmo.)

Tangencialmente, se sua regra do udev for dividida em várias linhas, as quebras escapam com \, você também precisa garantir que o arquivo termine com uma linha vazia. Caso contrário, parece ter sido analisado pelo udev (não é como se o EOFpersonagem tivesse escapado de alguma forma), mas não alcança o resultado desejado.

informação relacionada