Impedir o nautilus mostrando partição montada no script bash

8

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 udeve 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 triggernã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

bcbc
fonte
Para outras pessoas respondendo, você poderia adicionar sua versão do Ubuntu? por exemplo, 9.04, 10.10, 12.04. Houve um pouco de evolução de um para outro.
Paul
Bom ponto. Vou editar minha pergunta para adicionar isso.
BCBC
se você montar -i, ele impede que o nautilus apareça? Isso funciona para mim para impedir que o gnome-shell apareça com a pequena caixa de diálogo na parte inferior da tela. Isso foi testado no Ubuntu 12.04 usando o gnome-shell.
22412 Gary
Isso não faz diferença para mim.
BCBC
<p> _Se eu executar exatamente o mesmo comando no terminal, o Nautilus não mostra_ - Como você inicia seu script? </ p> <p> e eu sei que há outras montagens em meu script que não mostram - o que diferenças entre estas montagens </ p>
Zuba

Respostas:

3

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

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

papashou
fonte
3
Você pode postar o conteúdo do link de forma concisa aqui? Uma resposta com apenas um link não é muito bem-vinda na comunidade da UA.
Mahesh
Isso funciona. No momento, há muito poucos detalhes para aceitar a resposta. Confirmei manualmente que funciona para criar o arquivo e a chamada udevadm trigger. Só quero confirmar que funciona no script. Vou postar os detalhes na pergunta, se você não adicionou mais aqui.
BCBC
Não queria resumir novamente o que o link já estabeleceu claramente. Basicamente, é necessário adicionar uma regra no /etc/udev/rules.d/ que diga ao udev para não processar dispositivos específicos - cada dispositivo terá sua própria linha especificando: KERNEL == ”sda1 ″, ENV {UDISKS_PRESENTATION_HIDE} =” 1 ″. Fazer isso não modifica nenhum comportamento do sistema ou do kernel. Apenas diz ao UDEV para ocultar a apresentação do disco. O Nautilus depende do processamento de regras do udev para exatamente esse comportamento.
Papashou 28/04/12
1

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
zuba
fonte
Obrigado pela sugestão ... Não quero modificar as configurações porque não tenho certeza de que entrará em vigor imediatamente, exige código diferente para cada versão, é deselegante e, se o script for abortado, deixa o usuário em um estado indesejado - também não acredito que seja necessário. O que eu estou procurando é o mecanismo pelo qual o nautilus é notificado sobre a montagem e como contorná-la. por exemplo, udev? dbus? esse tipo de coisas.
BCBC
+ Não quero modificar as configurações porque não tenho certeza de que entrará em vigor imediatamente . Essa é a pergunta a ser feita (fácil o suficiente). + requer código diferente para cada versão - pode exigir ou não 50 | 50 como se eu pudesse encontrar um dinamômetro na rua)) + é deselegante - comparando com qual alternativa?
Zub #
+ se o script é abortado, ele deixa o usuário em um estado indesejado - muitos pacotes (por exemplo, aptitude) quando abortados o fazem. Existem abordagens para evitar esse efeito colateral. Por exemplo, você pode cobrar ao cron para verificar a cada 1min se o script está em execução e, se não, para alterar a configuração novamente. Ou você pode executar seu script de outro que controla a configuração.
Zuba
Meu argumento é que não deve ser necessário alterar uma configuração específica da área de trabalho. Eu também deveria ter acrescentado que este script pode ser executado no ubuntu / xubuntu / kubuntu / lubuntu etc., portanto, adiciona um alto nível de complexidade e risco.
BCBC
A alternativa de colocar na lista negra a partição com o udisk (consulte o link papashous) exige o sudo e não é portátil entre máquinas, portanto, seria ainda mais complexo e arriscado.
21412 Egil
1

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 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 você deve colocar 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:

zuba
fonte
Parece que deve ser uma solução alternativa em potencial - preciso de tempo para revisar isso e experimentar, e não vou ter chance até mais tarde hoje (fornecerá feedback). Idealmente, a resposta explicará por que isso está acontecendo (em comparação com a execução mountno terminal), mas se eu tiver uma boa solução, também aceitarei isso.
BCBC
Este é o único
RobotHumans
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 em um subdiretório / tmp pertencente e protegido por outra pessoa

Lembre-se de que pode ser uma má ideia 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 para "não fazer nada" e isso pode evitar o pop-up.

A documentação em https://help.ubuntu.com/community/Mount/USB pode ser útil para a 9.10, mas não funcionou com a 12.04. As chaves do gconf-editor que eles mencionam não são mais usadas.

Paulo
fonte
Ele é montado em um diretório em / tmp (e em nenhum outro lugar).
BCBC
Mas o usuário conectado ainda pode acessar / tmp. A sugestão foi usar um diretório que o usuário conectado não pode acessar.
Paul
Eu usei chmod 700no diretório ... parecia promissor e, em seguida, apareceu uma janela de mensagem (sem o título da janela): "Não foi possível abrir uma pasta para o sistema de arquivos de 10 GB", "Nenhum aplicativo está registrado como manipulando este arquivo"
bcbc
Fascinante. Com certeza se esforça. Talvez eu tenha tempo para brincar com isso mais tarde.
Paul
0

Tente mountcom as bandeiras -ne -i.

zuba
fonte
Eu tentei isso - praticamente passei por todas as opções de montagem que posso. O gatilho está acontecendo em outro lugar.
BCBC