Impedir que o nautilus mostre a partição montada no script bash

Impedir que o nautilus mostre a partição montada no script bash

No meu script bash eu monto partições, verifico-as, 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 quero evitar.

Observação: sei que posso alterar o comportamento disso em Configurações do sistema, Detalhes, Mídia removível, Never prompt or start programs on media insertionmas não quero alterar o comportamento, por exemplo, se um pendrive estiver conectado, 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 for encerrado de forma anormal, as configurações modificadas permanecerão no lugar (também não acredito que seja necessário fazer isso).

Na verdade, esta exibição automática não parece consistente. Se eu fizer exatamente o mesmo comando no terminal, o Nautilus não será exibido e sei que há outras montagens em meu script que não são exibidas. Então, o que poderia estar causando isso? Aqui está um exemplo do código (ambos fazem com que janelas separadas do Nautilus apareçam):

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 forma de evitar que isso aconteça.

Percebi esse comportamento a partir da versão 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 deva envolver a modificação das configurações do sistema (que podem diferir entre as versões). Por exemplo, se você observar outras coisas que montam partições (como os-prober), não haverá janelas do nautilus aparecendo quando ele monta partições diferentes.

O roteiro pode ser encontradoaqui. Eaqui está a parteonde o Nautilus aparece. acho que também apareceaqui, mas tenho focado meus testes no primeiro link.Esseé onde ele não aparece, chamado antes das outras montagens - observe que reescrevi as primeiras como --read-only e dentro de uma instrução if e isso não faz diferença.

Idealmente, a resposta explicará por que isso está acontecendo e como evitá-lo, ou seja, explicar por que o script mounté tratado de forma 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) - também quero evitar um aumento exponencial nos testes para verificá-la.

desde já, obrigado

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

Solução conformepapashoulink de:

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 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 for 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 udeve também registrei umerro, já que isso não faz sentido para uma partição que não está inserida para agir como um cartão USB/mídia inserido na montagem. Além disso, udevadm triggernão é uma operação barata que parece (pelo menos em 12.04) congelar tudo temporariamente.

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

Responder1

Experimente esta sugestão:http://www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/

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

Responder2

Tente agrupar 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 testado porque estou no 10.04

ATUALIZAR:

#!/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

Responder3

Você pode impedir a montagem automática da unidade flash adicionando uma nova regra do udev. Nessa regra, você pode especificar uma unidade flash por fornecedor, número de série e outros atributos. VerAtributos{}linhas na saída de:

udevadm info -a --name=sdb1

Esse script você deve colocar/etc/udev/rules.dpasta com nome de arquivo especial, por exemplo 81-usb-wubi-move.rules

A regra poderia parecer

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

Veja também:

Responder4

Experimente mountcom os sinalizadores -ne -i.

informação relacionada