No meu script bash, monto partições, as verifico, copio arquivos para elas e desmonto. Quando o script monta a partição, o Nautilus aparece com uma janela mostrando a partição e roubando o foco. Isso é algo que eu quero evitar.
Nota: Eu sei que posso alterar o comportamento disso em Configurações do sistema, Detalhes, Mídia removível Never prompt or start programs on media insertion
, mas não quero alterar o comportamento, por exemplo, se um pendrive USB estiver conectado, eu só quero evitá-lo no meu script bash . Como esse script é executado nos computadores de outros usuários, não posso modificar essas configurações (no script) porque, se terminar de forma anormal, deixará as configurações modificadas no lugar (também não acredito que seja necessário fazer isso).
Na verdade, essa exibição automática não parece consistente. Se eu executar exatamente o mesmo comando no terminal, o Nautilus não será exibido e sei que existem outras montagens no meu script que não são exibidas. Então, o que poderia estar causando isso? Aqui está um exemplo do código (ambos causam janelas separadas do nautilus):
mount $dev $target
mkdir -p $target/home
mount $homedev $target/home
Estou interessado em entender o processo pelo qual a montagem sinaliza o Nautilus e por que isso está acontecendo (quando não acontece se eu montar a partição a partir do terminal). E qual é a melhor maneira de impedir que isso aconteça.
Percebi esse comportamento a partir do lançamento 11.10 (se bem me lembro). Atualmente, estou executando o 12.04, mas o script deve funcionar em todas as versões suportadas. Não acredito que a solução envolva a modificação das configurações do sistema (que podem diferir entre os lançamentos). Por exemplo, se você observar outras coisas que montam partições (como os-prober), não há janelas do nautilus aparecendo quando ele monta partições diferentes.
O script pode ser encontrado aqui . E aqui está a parte em que o Nautilus aparece. Eu acho que também aparece aqui , mas tenho focado meus testes no primeiro link. Este é o lugar onde ele não aparecer, chamado antes de os outros suportes - nota eu reescrito os primeiros como --read-only e dentro de uma instrução if e não faz diferença.
Idealmente, a resposta explicará por que isso está acontecendo e como evitá-lo, em outras palavras, explicará por que o script mount
é tratado de maneira diferente daquela emitida por um terminal. Uma boa solução alternativa também será aceita se for uma solução totalmente explicada e prática que possa suportar todos os ambientes de área de trabalho (ubuntu, kubuntu, xubuntu, lubuntu etc.) - Eu também quero evitar um aumento exponencial nos testes para verificá-la.
desde já, obrigado
============
Solução conforme link do papashou :
add_udev_rules ()
{
for i in "$dev" "$homedev" "$bootdev" "$usrdev"; do
if [ -n "$i" ]; then
block=${i#/dev/}
echo "KERNEL==\"""$block""\",ENV{UDISKS_PRESENTATION_HIDE}=\"1\"" >> "$wubi_move_dir"/wubi_move.rules
fi
done
cp "$wubi_move_dir"/wubi_move.rules /etc/udev/rules.d/wubi_move.rules
udevadm trigger > /dev/null 2>&1
}
remove_udev_rules ()
{
rm /etc/udev/rules.d/wubi_move.rules
rm "$wubi_move_dir"/wubi_move.rules
udevadm trigger > /dev/null 2>&1
}
Isso atinge o resultado desejado, mas parece uma abordagem de marreta. Acredito que provavelmente haja um ajuste fino no udev que permitirá que a partição ainda seja exibida no Nautilus (e em outros navegadores de arquivos) sem aparecer quando estiver montada. A propósito, se alguém quiser tentar isso, o script a seguir mostrará o efeito pop-up do nautilus:
mkdir -p /tmp/testmount
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1
mount /dev/sda1 /tmp/testmount
sleep 3
umount /dev/sda1
rmdir /tmp/testmount
Vou continuar brincando udev
e também registrei um bug , já que isso não faz sentido para uma partição que não está inserida para agir como um cartão de mídia / USB inserido na montagem. Também udevadm trigger
não é uma operação barata que aparece (pelo menos em 12.04) para congelar temporariamente tudo.
Então, em resumo, eu tenho uma solução viável (obrigado a todos que ajudaram), que eu posso ou não implementar (ainda não tenho certeza); mas vou continuar procurando por outra coisa. obrigado