Existe uma maneira de executar um script quando um dispositivo USB específico está montado?
Eu mantenho meus vídeos em um USB separado e gostaria de executar um script que monte a pasta de vídeo no dispositivo USB na pasta inicial.
Há uma solução muito melhor com o systemd agora. Você cria um serviço que depende e é desejado pela mídia, por exemplo:/etc/systemd/system/your.service
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/home/you/bin/triggerScript.sh
[Install]
WantedBy=media-YourMediaLabel.mount
Então você precisa iniciar / ativar o serviço:
sudo systemctl start your.service
sudo systemctl enable your.service
Após a montagem, o systemd dispara seu script de gatilho. A vantagem sobre a regra do udev é que o script é realmente disparado após a montagem, não após a adição do dispositivo do sistema.
Caso de uso : Eu tenho uma partição criptografada que desejo fazer backup automaticamente. Depois de adicionar o dispositivo, tenho que digitar a senha. Se eu conectar o script de backup ao udev, o script tentará executar no momento em que estou digitando a senha, o que falhará.
Recurso: Script com udev
Nota: Você pode encontrar sua unidade de dispositivo com:systemctl list-units -t mount
systemctl enable your.service
. O arquivo de script deve ser executável.Requires=
,After=
eWantedBy=
linhas ambos commedia-bb.mount
emedia-BB.mount
porque mostra Nautilus me o volume como "BB", não "bb". Mesma mensagem de erro, exceto para letras maiúsculas. O que há de errado? De alguma forma, tenho que criar essemedia-<something>.mount
serviço?Comece localizando seu dispositivo
lsusb
. Anote o ID (por exemplo0a81:0101
)Crie um novo arquivo de regras do udev no
/etc/udev/rules.d/
viasudoedit /etc/udev/rules.d/100-mount-videos.rules
e digite uma nova regra como esta:Observe como eu usei o ID de
lsusb
.Então você só precisa escrever o script para fazer o trabalho. Um simples comando de montagem deve funcionar. Você pode precisar de um
sleep 5
comando para aguardar a inicialização do sistema de arquivos (se você deixar o gnome para fazer a montagem principal - mas você pode montá-lo primeiro e depois não precisar dormir).Adição de Allan: scripts de execução longa podem bloquear "todos os outros eventos deste ou de um dispositivo dependente". A página de manual do My Mint declara ainda que "tarefas de longa duração precisam ser desanexadas imediatamente do próprio processo do evento". Nenhuma dica é dada sobre onde obter a habilidade para fazer isso.
Resposta de Oli: Envolva-o assim: https://askubuntu.com/a/106359/449
fonte
/root/
algum lugar onde apenas o root possa editá-lo.Outra maneira de obter os valores para ATTRS {idVendor} e ATTRS {idProduct} (testado no Ubuntu 12.04) é:
Encontre onde o seu usb está montado:
isso mostra algo como o seguinte:
Use o udevadm para obter as informações desse dispositivo:
a saída deve ser algo como:
Agora use o ID do modelo para ATTRS {idProduct} e o ID do fornecedor para ATTRS {idVendor}
fonte
No Nautilus, em Editar> Preferências> Mídia, você pode escolher "outra ação" e "comando costum". para que diferentes tipos de mídia sejam executados. Nesse momento, a unidade USB já está montada, mas suponho que você ainda possa vinculá-la (com um comando costum) à pasta em que deseja que a unidade apareça. Não sabia dizer se isso é mais fácil ou melhor do que usar o udev.
fonte
Se você não quiser interferir no controle do seu gerenciador de arquivos (nautilus, konquerer, gnome, etc) sobre a montagem e desmontagem do seu dispositivo, sugiro não seguir a rota do udev.
Em vez disso, use udisks-cola se o seu sistema usa udisks (quase todos usam).
Após a instalação, basta criar um arquivo de configuração
~/.udisks-glue.conf
em seu diretório pessoal como este.Meu exemplo a seguir atualiza os dados do GPS-Assist na minha câmera toda vez que eu conecto o cartão SD.
Depois, verifique se o udisks-cola começa quando você inicializa ou faz login. Ou seja, através dos aplicativos de inicialização do gnome
fonte
use udev
http://archive.atomicmpc.com.au/forums.asp?s=2&c=16&t=4775
fonte
A resposta do @ sumid tem um problema. Você não deve iniciar o serviço. Você só precisa habilitá-lo.
Arquivo:
/etc/systemd/system/your.service
Ative o serviço:
Isso é tudo.
Nota: Você pode encontrar seu rótulo medial com:
sudo systemctl list-units -t mount
Nota2: Se o serviço falhar de alguma forma (por exemplo, o script não é executável), seu ponto de montagem será alterado para a
<old_mount_point_name>1
próxima vez que você montar o dispositivo usb. Para corrigir esse problema, você só precisa executarsudo systemctl reset-failed
fonte