Executa uma ação quando um teclado sem fio está conectado

3

Eu preciso executar um comando quando conecto um teclado bluetooth. Como posso 'ouvir' esse evento?

    
por vemv 30.03.2013 / 00:04

2 respostas

6

Quando uma peça de hardware é conectada, a estrutura udev decide o que fazer com ela. Uma ação típica é criar um nó de dispositivo em /dev , mas você pode executar qualquer comando de shell.

Primeiro, você precisa descobrir como identificar seu dispositivo. Conecte o teclado e execute udevadm info -a -n /dev/input/event9 , onde o último argumento é o caminho para o arquivo do dispositivo em /dev/ correspondente ao seu dispositivo. Você pode omitir o prefixo /dev/ . Você pode usar um syspath (um caminho em /sys ) em vez de um nome de nó de dispositivo substituindo -n … por -p class/input/event9 . Em todos os casos, substitua input/event9 pelo caminho apropriado para o seu dispositivo. Isso imprime várias características do seu dispositivo. Colete uma ou mais linhas do formulário SETTING=="VALUE" , o suficiente para identificar seu dispositivo de maneira exclusiva.

Crie um arquivo em /etc/udev/rules.d chamado vemv-keyboard.rules ou algo assim. Coloque uma linha neste arquivo com as configurações a serem correspondidas e uma ação para executar. Tome cuidado para usar os operadores apropriados: é == para as propriedades serem correspondidas, = para as propriedades a serem definidas e += para especificar ações adicionais. Algo como:

# Run a program when my wireless keyboard is connected
SUBSYSTEMS=="input", ATTRS{vendor}=="Yoyodene", ATTRS{model}=="Bluetooth keyboard 9000", RUN+="/path/to/script $root/$name"

O programa será executado na próxima vez que você conectar o dispositivo (adicionar o arquivo não terá efeito em dispositivos já conectados). Você verifica que sua regra teria o efeito desejado executando udevadm test class/input/event9 (onde o argumento é o syspath como acima). Se você quiser aplicar a regra manualmente, execute udevadm trigger --sysname=class/input/event9 .

    
por 30.03.2013 / 02:05
3

Parece que executar udevadm monitor é uma boa base para resolver meu problema. Pode-se ter um daemon analisando sua saída, filtrando as entradas desejadas e reagindo a esses eventos.

    
por 30.03.2013 / 00:17