web-dev-qa-db-fra.com

Empêcher Nautilus montrant une partition montée en script bash

Dans mon script bash, je monte des partitions, les vérifie, leur copie des fichiers et les démonte. Lorsque le script monte la partition, Nautilus apparaît avec une fenêtre affichant la partition et le focus. C'est quelque chose que je veux éviter.

Remarque: Je sais que je peux modifier le comportement de cette option dans Paramètres système, Détails, Support amovible, Never Prompt or start programs on media insertion, mais je ne souhaite pas modifier le comportement, par exemple. si une clé USB est connectée, je veux juste l'éviter dans mon script bash. Étant donné que ce script est exécuté sur les ordinateurs d'autres utilisateurs, je ne peux pas modifier ces paramètres (dans le script), car s'il se termine de manière anormale, les paramètres modifiés restent en place (je ne crois pas non plus qu'il soit nécessaire de le faire).

En fait, cet affichage automatique ne semble pas cohérent. Si je fais exactement la même commande depuis le terminal, Nautilus ne s'affiche pas et je sais que d'autres scripts dans mon script ne s'affichent pas. Alors, quelle pourrait en être la cause? Voici un exemple de code (les deux font apparaître des fenêtres Nautilus séparées):

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

Je suis intéressé à comprendre le processus par lequel le montage signale Nautilus et pourquoi cela se produit (si ce n'est pas le cas si je monte la partition à partir du terminal). Et quel est le meilleur moyen d'éviter cela?.

J'ai remarqué ce comportement à partir de la version 11.10 (si je me souviens bien). J'utilise actuellement la version 12.04, mais le script doit fonctionner sur toutes les versions prises en charge. Je ne crois pas que la solution devrait impliquer de modifier les paramètres du système (qui peuvent différer selon les versions). Par exemple, si vous examinez d'autres éléments qui montent des partitions (comme os-prober), aucune fenêtre Nautilus ne s'ouvre lorsque vous montez des partitions différentes.

Le script peut être trouvé ici . Et voici la partie où Nautilus apparaît. Je pense que cela apparaît aussi ici , mais je concentre mes tests sur le premier lien. This est l'endroit où il n'apparaît pas, appelé avant ces autres montages. Notez que j'ai réécrit les premiers en tant que --read-only et dans une instruction if. Cela ne fait aucune différence.

Idéalement, la réponse expliquera pourquoi cela se produit et comment l’empêcher, c’est-à-dire pourquoi l’in-script mount est traité différemment de celui issu d’un terminal. Une solution de contournement sera également acceptée s'il s'agit d'une solution entièrement expliquée et pratique pouvant prendre en charge tous les environnements de bureau (Ubuntu, Kubuntu, Xubuntu, Lubuntu, etc.). Je souhaite également éviter une augmentation exponentielle des tests de vérification.

Merci d'avance

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

Solution selon le lien 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
}

Cela donne le résultat souhaité, mais ressemble à une approche de sledgehammer. Je pense qu’il existe probablement un réglage fin dans udev qui permettra à la partition de toujours apparaître dans Nautilus (et d’autres navigateurs de fichiers) sans apparaître lors de son montage. En passant, si quelqu'un veut essayer ceci, le script suivant montrera l'effet de pop-up 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

Je vais continuer à jouer avec udev et j'ai également déposé un bug , car cela n'a aucun sens pour une partition non insérée de se comporter comme une clé USB insérée/carte multimédia sur le montage. De plus, le udevadm trigger n'est pas une opération peu coûteuse qui semble (au moins le 12.04) geler temporairement tout.

Donc, en résumé, j'ai une solution réalisable (merci à tous ceux qui ont aidé), que je peux ou non mettre en œuvre (je ne suis pas encore sûr); mais je continuerai à chercher autre chose. Merci

8
bcbc

Essayez cette suggestion: http://www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/

Je suis à peu près sûr que cela a à voir avec udev signaux et traitement.

3
papashou

Vous pouvez empêcher le montage automatique de lecteur flash en ajoutant une nouvelle règle udev. Dans cette règle, vous pouvez spécifier un lecteur flash en fonction de son fournisseur, de son numéro de série et d'autres attributs. Voir ATTRS {} lignes dans la sortie de:

udevadm info -a --name=sdb1

Ce script que vous devez placer dans le dossier /etc/udev/rules.d avec un nom de fichier spécial, par exemple. 81-usb-wubi-move.rules

La règle pourrait ressembler à

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

Voir également:

1
zuba

Essayez d’emballer votre 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

Non testé car je suis sur 10.04

PDATE:

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

Essayez mount avec les indicateurs -n et -i.

0
zuba

Non testé .... juste une intuition.

Montez le système de fichiers dans une arborescence inaccessible à l’utilisateur Nautilus, par ex. dans un sous-répertoire de/root ou/home/personelse ou un sous-répertoire/tmp appartenant à un tiers et sécurisé par celui-ci

Gardez à l'esprit qu'il peut être une mauvaise idée de monter le même périphérique matériel sur deux points de montage et de le modifier à partir des deux.

Une configuration humaine est possible dans (12.04beta) Ubuntu-> Paramètres système-> Détails-> Support amovible. Certaines des options pourraient être définies sur "ne rien faire" et éviter ainsi le popup.

La documentation sur https://help.ubuntu.com/community/Mount/USB peut être utile pour 9.10 mais ne fonctionne pas avec 12.04. Les clés pour gconf-editor qu'elles mentionnent ne sont plus utilisées.

0
Paul