Disparando uma ação quando um volume específico está conectado
10
Eu tenho uma chave USB que contém meu banco de dados de senha keepass2 e gostaria de executar algumas ações quando ele estiver conectado ao meu computador, a saber:
Montá-lo automaticamente em algum local específico
Quando a montagem é feita corretamente, iniciando keepass2 no arquivo de banco de dados de senhas
Tarefas simples, eu acho, mas não consigo encontrar como fazer isso.
Estou usando o Ubuntu 12.10 e ele monta automaticamente o dispositivo como uma "chave usb-media" e tenta abrir as imagens nele (mesmo que não haja nenhuma).
Qual é a melhor maneira de fazer isso e desativar a montagem automática do ubuntu (para que não entre em conflito)?
Quando um novo dispositivo aparece, o udev é notificado. Normalmente, ele cria um arquivo de dispositivo com /devbase 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:
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 ATTRSregras identificam o dispositivo; execute udevinfo -a -n /dev/sdzquando a unidade estiver disponível /dev/sdzpara ver quais atributos ela possui. Lembre-se de que você só pode usar ATTRSregras de uma única seção da udevinfoentrada (além disso, você pode usar ATTRregras 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 RUNdiretiva. 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' &
Nota importante sobre isso: Ao escrever regras usando as informações de 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 é abordado man 7 udev, mas é um pequeno comentário facilmente esquecido.
Patrick
1
A melhor maneira de fazer isso seria escrever suas próprias regras do udev para este dispositivo. Infelizmente, não posso dar dicas de como fazer isso, como nunca fiz. Portanto, a menos que alguém tenha uma resposta mais detalhada, pesquise no Google 'regras do udev' e procure exemplos em / lib / udev. Suas regras personalizadas do udev devem ser encontradas em /etc/udev/rules.d
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.A melhor maneira de fazer isso seria escrever suas próprias regras do udev para este dispositivo. Infelizmente, não posso dar dicas de como fazer isso, como nunca fiz. Portanto, a menos que alguém tenha uma resposta mais detalhada, pesquise no Google 'regras do udev' e procure exemplos em / lib / udev. Suas regras personalizadas do udev devem ser encontradas em /etc/udev/rules.d
fonte