Nenhum usuário logado Login / Cadastro
   Seu navegador está desatualizado e não possui capacidade para visualizar todos os recursos deste Site
   Recomendamos Mozilla Firefox, Chrome e Safari.
aguarde

Linux - Executar comando quando dispositivo for plugado ou desplugado (Regras udev)
Edily Cesar Medule

04/11/2017

Introdução

Recentemente tive a necessidade de executar um comando quando minha impressora era ligada ou conectada na porta USB, obtive a solução usando um recurso do “udev“.

Esse recurso pode ser usado em muitos outros casos, vamos supor que queira fazer um rastreamento de vírus sempre que um pendrive for plugado ou fazer um registro da hora em que plugaram algum dispositivo no sistema, enfim, as possibilidades são muitas.

Meu objetivo não é construir uma documentação sobre o assunto, é só compartilhar essa experiência e talvez ajudar alguém com o mesmo problema, já que minha pesquisa trouxe material disperso e em inglês.

Diretório “rules.d”

As regras contidas no diretório “/etc/udev/rules.d/” serão executadas sempre que houver um evento de adicionar ou remover um dispositivo.

Regras

Os arquivos com as regras deverão ter a extensão “.rules”, exemplo: “teste.rules”, onde pode ter várias linhas, cada uma com uma regra.

Dentro desse arquivo existirão algumas variáveis, iremos usar apenas essas:

  • KERNEL: é o nome do dispositivo dado pelo Kernel, no caso da minha impressora esse nome é “lp1” (descobri isso fazendo testes armazenando o valor dessa variável em arquivo texto);

  • ACTION: a ação, no caso “add” ou “remove”;

  • RUN: o que será executado.



Vamos a regra:

KERNEL=="lp1", RUN+="/usr/bin/teste.sh"

Antes da vírgula está a condição, depois o processo que será executado, note que a variávem “RUN” recebe o nome do stript que deverá ser executado, veja também que antes do sinal de igual tem o sinal de maior (+=), isso significa incremento, ou seja, você está adicionando um valor a essa variável, se não usar o sinal de maior estará substituindo qualquer valor nela contido o que não aconselho.

Stript "/usr/bin/teste.sh”

O script recebe automaticamente todas as variáveis como argumento, o que facilita muito nossa vida.

O conteúdo do "/usr/bin/teste.sh” é:

#Início do conteúdo do arquivo.

#!/bin/bash
echo "========================================================"

KER=$1
ACT=${ACTION}

echo "KERNEL: "$KER >> /var/log/teste.log
echo "ACTION: "$ACT >> /var/log/teste.log


if [ "$ACT" == "add" ] && [ "$KER" == "lp1" ]; then
echo “UMA IMPRESSORA FOI CONECTADA” >> /var/log/teste.log
elif [ "$ACT" == "remove" ] && [ "$KER" == "lp1" ]; then
echo “UMA IMPRESSORA FOI DESCONECTADA” >> /var/log/teste.log
else
echo “NÃO É IMPRESSORA” >> /var/log/teste.log
fi

#Fim do conteúdo do arquivo.



Não se esqueça de dar permissão de execução para o script, ex:

#chmod +x /usr/bin/teste.sh



Para consolidar as alterações nos arquivos “.rules” você deve reiniciar o Sistema ou apenas o serviço da seguinte forma:

#systemctl restart systemd-udevd.service


É isso, espero ter ajudado.

Fontes:

https://unix.stackexchange.com/questions/65891/how-to-execute-a-shellscript-when-i-plug-in-a-usb-device

http://reactivated.net/writing_udev_rules.html#syntax

 

Comentários


Voltar
 
Desenvolvido por JeitoDigital  
Jeito Digital - - ©2013 - Todos os direitos reservados
w3c html5 acesso restrito