Quando um novo dispositivo aparece, o udev é notificado. Normalmente, ele cria um arquivo de dispositivo com /dev
base nas regras internas¹. Você pode substituir essas regras para alterar o local do arquivo do dispositivo ou executar um programa arbitrário. Aqui está uma amostra dessa regra do udev:
KERNEL=="sd*", ATTRS{vendor}=="Yoyodine", ATTRS{serial}=="123456789", NAME="keepass/s%n", RUN+="/usr/local/sbin/keepass-drive-inserted /dev/%k%n"
A NAME=
diretiva altera o local do arquivo do dispositivo, eu o incluí para fins ilustrativos, mas provavelmente não é útil para o seu caso de uso. As ATTRS
regras identificam o dispositivo; execute udevinfo -a -n /dev/sdz
quando a unidade estiver disponível /dev/sdz
para ver quais atributos ela possui. Lembre-se de que você só pode usar ATTRS
regras de uma única seção da udevinfo
entrada (além disso, você pode usar ATTR
regras da seção inicial). Consulte Compreender a saída de `udevadm info -a -n / dev / sdb` para obter mais informações. Esta regra entra em um arquivo chamado algo como /etc/udev/rules.d/local-storage-keypass.rules
.
Coloque os comandos que você deseja executar no script fornecido na RUN
diretiva. Algo como:
#!/bin/sh
set -e
if [ -d /media/keypass-drive ]; then
[ "$(df -P /media/keypass-drive | awk 'NR==2 {print $1}')" = "$(df -P /media | awk 'NR==2 {print $1}')" ]
else
mkdir /media/keypass-drive
fi
mount "$1" /media/keypass-drive
su ereon -c 'keypass2' &
Se estiver com problemas para executar um programa da GUI a partir de um script acionado no udev, consulte Posso iniciar um programa gráfico na área de trabalho de outro usuário como root?
¹ Não em sistemas modernos, onde /dev
está o udevtmpfs.
udevadm info -a -n /dev/sdX
, você não pode corresponder com base em vários ancestrais. Você só pode corresponder com base nos dados do próprio dispositivo e em um único ancestral. Isso é abordadoman 7 udev
, mas é um pequeno comentário facilmente esquecido.