Estou tentando me familiarizar com o udev, no Ubuntu 13.10.
Aqui está minha primeira regra simples 95.usbbackup.rules:
ACTION=="add", SUBSYSTEMS="usb", RUN+="/usr/local/bin/my_backup.sh"
e aqui está o script (que foi chmodded + x) my_backup.sh:
#!/bin/bash
touch /tmp/test
Nada acontece quando eu conecto unidades externas. Como posso verificar (um log, um comando, qualquer coisa) se a regra foi acionada?
Muito obrigado
SUBSYSTEMS=="usb"
. Ou seja, o dobro dos==
testes de igualdade, em vez dos únicos,=
que atribui um valor a uma chave.Respostas:
Tenho certeza que isso deve funcionar. Você recarregou suas regras do udev depois de editá-las?
udevadm control --reload-rules && udevadm trigger
como raiz.fonte
KERNEL!="sdz*"
e você deve obter tudo (exceto sdz [1-9])udevadm monitor
Você pode dar um comando como root assim:
Ele será exibido quando uma regra for acionada.
fonte
udevadm monitor
mostra apenas os eventos do udev, mas não se uma regra correspondente foi acionada. No entanto, você pode procurar o evento que deve acionar a regra, mas não sabe se sua regra funciona.Estou executando o kernel 3.0.35, mas o seguinte funciona para mim.
Para obter o caminho para o dispositivo, você pode fazer algo assim:
Você obterá mais informações do que precisa, mas está interessado no DEVPATH. Então, para ver quais regras do udev são executadas, execute o seguinte:
Eu não acho que isso realmente execute as regras, a documentação diz que isso 'simula' os eventos para o dispositivo especificado. Para obter mais informações, consulte esta página de manual: https://www.freedesktop.org/software/systemd/man/udevadm.html
fonte
Com o udev / systemd versão 241 e semelhante, como root:
Ou para torná-lo permanente, novamente como raiz:
PS: a resposta errada mais frequente ainda que IMHO se parece com:
udevadm -d test / devices / where / is / my / device | & menos... mas isso tem vários problemas. Os principais:
where/is/my/device
? Tedioso, complicado e propenso a erros.Comparar respostas antigas com a saída recente da versão 241 do udev,
udevadm test
parece mostrar menos informações do que costumava.udevadm -d test
é apenas uma simulação ! Sempre que avisa:Este programa é apenas para depuração, não executa nenhum programa especificado por uma chave RUN. Pode mostrar resultados incorretos, porque alguns valores podem ser diferentes ou não estar disponíveis em uma execução de simulação.
udevadm test
é para desenvolver uma nova regra, não para solucionar problemas de regras quebradas, ausentes ou substituídas.fonte
Eu estava tendo o mesmo problema com o Raspberry Pi 3 B +. Eu estava tentando invocar um script para inserir um dispositivo de armazenamento USB. As regras não são registradas no syslog; portanto, fica muito difícil entender qual regra funcionou ou qual falhou.
Então eu fiz o seguinte:
sudo /etc/init.d/udev restart
e quando chequei, funcionou.
Uma informação que pode ou não ser útil é que os sistemas de arquivos são somente leitura para o udev até que o comando na etapa 2 seja executado.
fonte
udevadm test $(udevadm info --query=path --name=device_name)
deve informar quais comandos seriam executados em um plug-in de dispositivo, citando asudev
regras envolvidas. Por exemplo:fonte