Evitar nautilus mostrando partição montada no script bash

8

No meu script bash eu montei partições, verifiquei, copiei arquivos para eles e desmonte. 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.

Observação: sei que posso alterar o comportamento disso nas configurações do sistema, Detalhes, Mídia removível, Never prompt or start programs on media insertion , mas não desejo alterar o comportamento. Se um pendrive estiver conectado, eu só quero impedi-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 ele for finalizado de forma anormal, ele deixará as configurações modificadas no lugar (também não acredito que seja necessário fazer isso). / p>

Na verdade, essa exibição automática não parece consistente. Se eu fizer exatamente o mesmo comando do terminal, o Nautilus não aparece, e sei que existem outras montagens no meu script que não aparecem. Então, o que poderia estar causando isso? Aqui está um exemplo do código (ambos causam janelas nautilus separadas para pop):

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 isso não acontece, se eu montar a partição do terminal). E qual é a melhor maneira de impedir que isso aconteça?

Eu notei esse comportamento a partir da versão 11.10 (se bem me lembro). No momento, estou executando o 12.04, mas o script precisa funcionar em todos os releases suportados. Não acredito que a solução deva envolver modificações nas configurações do sistema (que podem ser diferentes entre as versões). Por exemplo, se você olhar para outras coisas que montam partições (como os-prober), não há janelas nautilus aparecendo quando monta partições diferentes.

O script pode ser encontrado aqui . E aqui está a parte onde o Nautilus aparece. Eu acho que também aparece aqui , mas eu tenho focado meu teste no primeiro link. Este é onde ele não aparece, chamado antes desses outros montagens - note que eu reescrevi os primeiros como --read-only e dentro de uma declaração if e não faz diferença.

O ideal é que a resposta explique por que isso está acontecendo e como evitá-lo, em outras palavras, explique por que o script mount no script é tratado de maneira diferente daquele emitido 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 desktop (Ubuntu, Kubuntu, xubuntu, lubuntu etc) - Eu também quero evitar um aumento exponencial nos testes para verificá-lo.

Obrigado antecipadamente

============

Solução de acordo com o link 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 alcança o resultado desejado, mas parece uma abordagem de marreta. Acredito que provavelmente há um ajuste fino no udev que permitirá que a partição ainda seja mostrada 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

Eu continuarei jogando com udev e também enviei um bug , já que isso não Não faz sentido que uma partição que não está inserida funcione como um cartão USB / media inserido após a montagem. Além disso, a udevadm trigger não é uma operação barata que aparece (no mínimo em 12.04) para congelar temporariamente tudo.

Então, em resumo, eu tenho uma solução viável (graças a todos que ajudaram), que eu posso ou não implementar (ainda não tenho certeza); mas vou continuar procurando por outra coisa. Obrigado

    
por bcbc 13.04.2012 / 04:33

5 respostas

3

Tente esta sugestão: link

Tenho quase certeza de que isso tem a ver com sinais e processamento do udev.

    
por papashou 16.04.2012 / 19:18
1

Tente envolver seu script:

#!/bin/bash
#

# disable nautilus automount
#
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  false

# put your script here  
#
...

# enable back nautilus automount
# 
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  true

Não foi testado porque estou em 10.04

ATUALIZAÇÃO:

#!/bin/bash
#

# disable nautilus automount
#
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  false

# put CALLING your script here to survive its crashes
#
/bin/bash -c "/whenever/it/is/placed/script.sh"

# enable back nautilus automount
# 
gconftool --type Boolean --set /apps/nautilus/preferences/media_automount  true
    
por zuba 16.04.2012 / 14:57
1

Você pode impedir a automontagem da unidade flash adicionando uma nova regra do udev. Nessa regra, você pode especificar uma unidade flash por seu fornecedor, número de série e outros atributos. Veja as linhas ATTRS {} na saída de:

udevadm info -a --name=sdb1

Esse script deve ser colocado na pasta /etc/udev/rules.d com nome de arquivo especial, por exemplo, 81-usb-wubi-move.rules

A regra pode parecer

ACTION=="add", KERNEL=="sdb?", SUBSYSTEMS=="usb", ATTRS{serial}=="001CC07CEE5EFB91C91B235C", ENV{UDISKS_PRESENTATION_HIDE}="1", ENV{UDISKS_PRESENTATION_NOPOLICY}="1"

Veja também:

por zuba 17.04.2012 / 18:02
0

Não testado ... apenas um palpite.

Monte o sistema de arquivos em uma árvore inacessível ao usuário do Nautilus, por exemplo, em um subdiretório de / root ou / home / someoneelse ou um subdiretório / tmp possuído e protegido por outra pessoa

Lembre-se de que pode ser uma má idéia montar o mesmo dispositivo de hardware em dois pontos de montagem e modificá-lo de ambos.

Alguma configuração humana é possível em (12.04beta) Ubuntu-> Configurações do Sistema- > Detalhes- > Mídia Removível. Algumas das opções podem ser definidas como "não fazer nada" e isso pode evitar o popup.

A documentação no link pode ser útil para 9,10 mas não funcionou com 12,04. As chaves para o gconf-editor que eles mencionam não são mais usadas.

    
por Paul 15.04.2012 / 05:30
0

Teste mount com os sinalizadores -n e -i .

    
por zuba 17.04.2012 / 18:30

Tags