Evite que nautilus muestre la partición montada en el script bash

8

En mi script bash, monto particiones, las verifico, les copio archivos y las desmonto. Cuando el script monta la partición, Nautilus aparece con una ventana que muestra la partición y el foco de robo. Esto es algo que quiero evitar.

Nota: Sé que puedo cambiar el comportamiento de esto en Configuración del sistema, Detalles, Medios extraíbles Never prompt or start programs on media insertion, pero no quiero cambiar el comportamiento, por ejemplo, si una memoria USB está conectada, solo quiero evitarlo en mi script bash . Dado que este script se ejecuta en las computadoras de otros usuarios, no puedo modificar esta configuración (en el script) porque si se termina de manera anormal, dejará las configuraciones modificadas en su lugar (tampoco creo que sea necesario hacerlo).

En realidad, esta visualización automática no parece consistente. Si hago exactamente el mismo comando desde la terminal, Nautilus no se muestra, y sé que hay otras monturas en mi script que no se muestran. Entonces, ¿qué podría estar causando esto? Aquí hay un ejemplo del código (ambos provocan que se abran ventanas nautilus separadas):

mount $dev $target
mkdir -p $target/home
mount $homedev $target/home

Estoy interesado en comprender el proceso por el cual el montaje señala a Nautilus y por qué sucede esto (cuando no lo hace si monte la partición desde el terminal). Y cuál es la mejor manera de evitar que esto suceda.

Noté este comportamiento a partir de la versión 11.10 (si no recuerdo mal). Actualmente estoy ejecutando 12.04, pero el script tiene que funcionar en todas las versiones compatibles. No creo que la solución deba involucrar la modificación de la configuración del sistema (que puede diferir entre versiones). Por ejemplo, si observa otras cosas que montan particiones (como os-prober), no aparecen ventanas nautilus cuando se montan diferentes particiones.

El guión se puede encontrar aquí . Y aquí está la parte donde aparece Nautilus. Creo que también aparece aquí , pero he estado centrando mis pruebas en el primer enlace. Aquí es donde no aparece, llamado antes de esas otras monturas: tenga en cuenta que he reescrito las primeras como: solo lectura y dentro de una declaración if y no hace ninguna diferencia.

Idealmente, la respuesta explicará por qué está sucediendo esto y cómo prevenirlo, en otras palabras, explicará por qué el in-script mountse trata de manera diferente al emitido desde un terminal. También se aceptará una buena solución si se trata de una solución completa y práctica que sea compatible con todos los entornos de escritorio (ubuntu, kubuntu, xubuntu, lubuntu, etc.). También quiero evitar un aumento exponencial en las pruebas para verificarlo.

Gracias por adelantado

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

Solución según el enlace de 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
}

Esto logra el resultado deseado, pero se siente como un enfoque de mazo. Creo que probablemente haya un ajuste fino en udev que permitirá que la partición siga apareciendo en Nautilus (y otros exploradores de archivos) sin aparecer cuando esté montada. Por cierto, si alguien quiere probar esto, el siguiente script mostrará el efecto emergente de 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

Voy a seguir jugando udevy también he presentado un error , ya que esto no tiene ningún sentido para una partición que no está insertada para actuar como una tarjeta USB / multimedia insertada en el soporte. Además, udevadm triggerno es una operación económica que parece (al menos en 12.04) congelar temporalmente todo.

Entonces, en resumen, tengo una solución viable (gracias a todos los que me ayudaron), que puedo implementar o no (aún no estoy seguro); pero seguiré buscando otra cosa Gracias

bcbc
fuente
Para otros que responden, ¿podría agregar su versión de Ubuntu? por ejemplo, 9.04, 10.10, 12.04. Hubo una buena evolución de uno a otro.
Paul
Buen punto. Editaré mi pregunta para agregar eso.
bcbc
si montas -i, ¿evita que nautilus aparezca? Me funciona para evitar que gnome-shell aparezca con el pequeño cuadro de diálogo en la parte inferior de la pantalla. Esto se probó en Ubuntu 12.04 usando gnome-shell.
Gary
Eso no hace ninguna diferencia para mí.
bcbc
<p> _Si hago exactamente el mismo comando desde la terminal, Nautilus no muestra_ - ¿Cómo se inicia el script? </p> <p> y sé que hay otras monturas en mi script que no muestran - ¿Qué diferencias hay entre estas monturas? </p>
zuba

Respuestas:

3

Pruebe esta sugerencia: http://www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/

Estoy bastante seguro de que tiene que ver con las señales y el procesamiento de udev.

papashou
fuente
3
¿Puedes publicar el contenido del enlace de forma concisa aquí? Una respuesta con solo un enlace no es muy bienvenida en la comunidad de la UA.
Mahesh
Esto funciona. Por el momento hay muy pocos detalles para aceptar la respuesta. He confirmado manualmente que funciona para crear el archivo y llamar udevadm trigger. Solo quiero confirmar que funciona en el script. Publicaré los detalles en la pregunta si no ha agregado más aquí.
bcbc
No quería volver a resumir lo que el enlace ya ha establecido claramente. Básicamente, requiere agregar una regla en /etc/udev/rules.d/ que le dice a udev que no procese dispositivos específicos: cada dispositivo obtendría su propia línea que especifica: KERNEL == ”sda1 ″, ENV {UDISKS_PRESENTATION_HIDE} =” 1 ″. Hacerlo no modifica ningún comportamiento del sistema o del núcleo. Simplemente le dice a UDEV que oculte la presentación del disco. Nautilus se basa en el procesamiento de reglas de udev para precisamente este comportamiento.
papashou
1

Intenta envolver tu 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

No probado porque estoy en 10.04

ACTUALIZAR:

#!/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
fuente
Gracias por la sugerencia ... No quiero modificar la configuración porque no estoy seguro de que surta efecto de inmediato, requiere un código diferente para cada versión, no es elegante, y si el script se cancela, deja al usuario en un estado no deseado, tampoco creo que deba ser necesario. Lo que busco es el mecanismo por el cual se notifica a nautilus del montaje y cómo evitarlo. por ejemplo, udev? dbus? esa clase de cosas.
bcbc
+ No quiero modificar la configuración porque no estoy seguro de que entrará en vigencia de inmediato . Esa es la pregunta que se debe verificar (lo suficientemente fácil). + requiere un código diferente para cada versión : puede requerir o no 50 | 50 como si pudiera encontrarme con un dinamómetro en la calle)) + es poco elegante - en comparación con qué alternativa.
zuba
+ si la secuencia de comandos se aborta, deja al usuario en un estado no deseado ; muchos paquetes (por ejemplo, aptitud) cuando se cancela, lo hacen. Hay enfoques para evitar ese efecto secundario. Por ejemplo, puede cobrar a cron para verificar cada 1 minuto si el script se está ejecutando y, si no, para volver a cambiar la configuración. O puede ejecutar su script desde otro que controla la configuración.
zuba
Mi punto es que no debería ser necesario cambiar una configuración específica del escritorio. También debería haber agregado que este script puede ejecutarse en ubuntu / xubuntu / kubuntu / lubuntu, etc., por lo que agrega un alto nivel de complejidad y riesgo.
bcbc
La alternativa de incluir en la lista negra la partición con udisk (ver enlace papashous) requiere sudo y no es portátil en todas las máquinas, por lo que sería aún más complejo y arriesgado.
Egil
1

Puede evitar el montaje automático de la unidad flash agregando una nueva regla udev. En esa regla, puede especificar una unidad flash por su proveedor, número de serie y otros atributos. Ver líneas ATTRS {} en la salida de:

udevadm info -a --name=sdb1

Ese script debe colocarlo en la carpeta /etc/udev/rules.d con un nombre de archivo especial, por ejemplo, 81-usb-wubi-move.rules

La regla podría verse así

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

Ver también:

zuba
fuente
Parece que debería ser una solución potencial: necesito tiempo para revisar esto y experimentar, y no tendré oportunidad hasta más tarde hoy (daré retroalimentación entonces). Idealmente, la respuesta explicará por qué sucede esto (en comparación con la ejecución mountdesde el terminal), pero si obtengo una buena solución, también lo aceptaré.
bcbc
Este es el uno
RobotHumans
0

No probado ... solo una corazonada.

Monte el sistema de archivos en un árbol inaccesible para el usuario nautilus, por ejemplo, en un subdirectorio de / root o / home / someoneelse o un subdirectorio / tmp propiedad y asegurado por otra persona

Tenga en cuenta que puede ser una mala idea montar el mismo dispositivo de hardware en dos puntos de montaje y modificarlo desde ambos.

Es posible alguna configuración humana en (12.04beta) Ubuntu-> Configuración del sistema-> Detalles-> Medios extraíbles. Algunas de las opciones podrían configurarse para "no hacer nada" y eso podría evitar la ventana emergente.

La documentación en https://help.ubuntu.com/community/Mount/USB podría ser útil para 9.10 pero no funcionó con 12.04. Las claves para gconf-editor que mencionan ya no se usan.

Pablo
fuente
Está montado en un directorio bajo / tmp (y en ningún otro lugar).
bcbc
Pero el usuario conectado aún puede acceder / tmp. La sugerencia fue utilizar un directorio al que el usuario conectado no pueda acceder.
Paul
Utilicé chmod 700en el directorio ... parecía prometedor y luego apareció una ventana de mensaje (sin título de ventana): "No se puede abrir una carpeta para el sistema de archivos de 10 GB", "No hay ninguna aplicación registrada que maneje este archivo"
bcbc
Fascinante. Seguro se esfuerza mucho. Quizás tenga tiempo para jugar con esto más tarde.
Paul
0

Prueba mountcon las banderas -ny -i.

zuba
fuente
Lo he intentado, he pasado por todas las opciones de montaje que puedo. El desencadenante está sucediendo en otro lugar.
bcbc