Você pode usar uma udev
-rule para isso. No meu exemplo eu estou usando um dongle USB para o meu mouse sem fio, você terá que ajustar de acordo:
1. Obtendo os identificadores
Para criar uma regra exclusiva para o dispositivo, precisamos identificá-lo corretamente. Use a saída de udevadm
para isso (seu teclado USB deve aparecer em /dev/usb/<device>
. Conecte e desconecte para ver se este dispositivo (dis) aparece). Os IDs do fornecedor e do dispositivo devem ser únicos o suficiente, mas quanto mais correspondências, melhor.
udeadm info -a -n /dev/usb/hiddev0 | grep 'idVendor\|idProduct'
ATTRS{idVendor}=="0e8f"
ATTRS{idProduct}=="00a4"
ATTRS{idVendor}=="1d6b"
ATTRS{idProduct}=="0001"
Observe os dois valores que correspondem à saída de lsusb
na ID (para saber qual dispositivo é esse, testar a diferença de lsubs
com e sem o teclado ou ver se você pode corresponder os nomes na saída )
lsusb
Bus 005 Device 004: ID 0e8f:00a4 GreenAsia Inc.
Portanto, usaremos 0e8f
e 00a4
para o fornecedor e o ID do produto, respectivamente.
2. Criando uma regra
A regra em si é apenas uma listagem do que fazer. Salve em /etc/udev/rules.d/
como, e. keyboard.rules
(observe que o sufixo .rules
é obrigatório). O arquivo corresponderá a ( ==
) alguns atributos, a ação e executará nosso script:
ACTION=="add", ATTRS{idVendor}=="0e8f", ATTRS{idProduct}=="00a4", RUN+="/full/path/to/script.sh"
Você pode ter problemas com a parte ACTION=="remove"
, ler esta . O problema é que alguns dos atributos são excluídos após a remoção e, portanto, udev
não pode mais correspondê-los à sua regra de remoção.
No meu caso eu usei udeadm monitor --environemnt
e desconectei o devive. Eu selecionei
ID_MODEL_ID=00a4
e usou isso como o único requisito (talvez seja necessário fazer um pouco de tentativa e erro para boas correspondências aqui, no entanto, uma única correspondência é mais fácil de salvar apenas para o caso de alterar os keymaps). Observe que a regra de remoção precisa de ENV
em vez de ATTRS
(AFAIK ENV
também funciona para a regra de plug-in, mas ATTRS
falha na remoção)
ACTION=="remove", ENV{ID_MODEL_ID}=="00a4", RUN+="/path/to/removal_script.sh"
As regras para adicionar e remover podem ser um arquivo com uma linha para cada ação.
3. O script
O script SEMPRE será executado por root
, portanto, certifique-se de que a) seja gravável apenas por root
(por motivos de segurança) b) se seu comando precisar ser executado por um usuário, use sudo -u user1 command
no script. Deve ser executável, claro.
Se você estiver tentando executar diretamente um comando (ou seja, sem usar um script), use o caminho absoluto do comando.
Boa sorte.