Respostas:
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=
e WantedBy=
linhas ambos com media-bb.mount
e media-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 esse media-<something>.mount
serviço?
Comece localizando seu dispositivo lsusb
. Anote o ID (por exemplo 0a81:0101
)
Crie um novo arquivo de regras do udev no /etc/udev/rules.d/
via sudoedit /etc/udev/rules.d/100-mount-videos.rules
e digite uma nova regra como esta:
ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh"
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
/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:
$ mount | grep /dev/sd*
isso mostra algo como o seguinte:
/dev/sdb on /media/SOMEDIR type vfat ...
Use o udevadm para obter as informações desse dispositivo:
udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'
a saída deve ser algo como:
E: ID_MODEL_ID=001a
E: ID_VENDOR_ID=002b
Agora use o ID do modelo para ATTRS {idProduct} e o ID do fornecedor para ATTRS {idVendor}
ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ...
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.
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.
filter BT16EXTREME {
optical = false
partition_table = false
usage = filesystem
label = BT16EXTREME
}
match BT16EXTREME {
post_mount_command = "/home/bernhard/update-gps-assist-data.pl %mount_point"
}
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
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
[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount
[Service]
ExecStart=/any_path_even_inside_the_mount_point/script.sh
[Install]
WantedBy=media-YourMediaLabel.mount
Ative o serviço:
sudo systemctl enable your.service
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