Empêcher Nautilus d'afficher la partition montée dans le script bash

8

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

Remarque: je sais que je peux changer le comportement de ceci dans les paramètres système, les détails, les supports amovibles Never prompt or start programs on media insertion, mais je ne veux pas changer le comportement, par exemple si une clé USB est branchée, je veux juste l'empêcher dans mon script bash . Étant donné que ce script s'exécute sur les ordinateurs d'autres utilisateurs, je ne peux pas modifier ces paramètres (dans le script) car s'il est interrompu anormalement, il laissera les paramètres modifiés en place (je ne pense pas non plus que cela devrait être nécessaire).

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 qu'il y a d'autres montures dans mon script qui ne s'affichent pas. Alors, qu'est-ce qui pourrait en être la cause? Voici un exemple de code (les deux entraînent l'apparition de fenêtres nautilus distinctes):

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 (quand ce n'est pas le cas si je monte la partition à partir du terminal). Et quelle est la meilleure façon d'empêcher que cela se produise.

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 pense pas que la solution devrait impliquer la modification des paramètres système (qui peuvent différer entre les versions). Par exemple, si vous regardez d'autres choses qui montent des partitions (comme os-prober), aucune fenêtre nautilus n'apparaît quand il monte différentes partitions.

Le script peut être trouvé ici . Et voici la partie où Nautilus apparaît. Je pense que cela apparaît également ici , mais j'ai concentré mes tests sur le premier lien. C'est là que cela n'apparaît pas, appelé avant ces autres montages - notez que j'ai réécrit les premiers en - lecture seule et dans une instruction if et cela ne fait aucune différence.

Idéalement, la réponse expliquera pourquoi cela se produit et comment l'éviter, en d'autres termes, expliquera pourquoi le script mountest traité différemment de celui émis par un terminal. Une bonne solution de contournement sera également acceptée s'il s'agit d'une solution entièrement expliquée et pratique qui peut prendre en charge tous les environnements de bureau (ubuntu, kubuntu, xubuntu, lubuntu, etc.) - Je veux également éviter une augmentation exponentielle des tests pour le vérifier.

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 atteint le résultat souhaité, mais ressemble à une approche de marteau. Je pense qu'il y a probablement un réglage fin dans udev qui permettra à la partition de toujours s'afficher dans Nautilus (et dans d'autres navigateurs de fichiers) sans apparaître lorsqu'elle est montée. Au fait, si quelqu'un veut essayer cela, le script suivant montrera l'effet 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 udevet j'ai également déposé un bug , car cela n'a aucun sens pour une partition qui n'est pas insérée d'agir comme une carte USB / multimédia insérée lors du montage. De plus, ce udevadm triggern'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 (pas encore sûr); mais je vais continuer à chercher autre chose. Merci

bcbc
la source
Pour ceux qui répondent, pourriez-vous ajouter votre version d'Ubuntu? par exemple 9.04, 10.10, 12.04. Il y a eu pas mal d'évolution de l'un à l'autre.
Paul
Bon point. Je vais modifier ma question pour l'ajouter.
bcbc
si vous montez -i cela empêche-t-il les nautiles d'apparaître? Cela fonctionne pour moi pour empêcher gnome-shell d'apparaître avec le petit dialogue en bas de l'écran. Cela a été testé sur Ubuntu 12.04 en utilisant gnome-shell.
Gary
Cela ne fait aucune différence pour moi.
bcbc
<p> _Si je fais exactement la même commande depuis le terminal, Nautilus ne s'affiche pas_ - Comment lancez-vous votre script? </p> <p> et je sais qu'il y a d'autres montures dans mon script qui ne montrent pas - Quelles différences entre ces montures? </p>
zuba

Réponses:

3

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

Je suis assez sûr que cela a à voir avec les signaux et le traitement udev.

papashou
la source
3
Pouvez-vous publier le contenu du lien de manière concise ici? Une réponse avec juste un lien n'est pas la bienvenue dans la communauté de l'UA.
Mahesh
Cela marche. Pour le moment, il y a trop peu de détails pour accepter la réponse. J'ai confirmé manuellement que cela fonctionne pour créer le fichier et appeler udevadm trigger. Je veux juste confirmer que cela fonctionne dans le script. Je posterai les détails dans la question si vous n'en avez pas ajouté plus ici.
bcbc
Je ne voulais pas résumer ce que le lien a déjà clairement établi. Fondamentalement, cela nécessite l'ajout d'une règle dans /etc/udev/rules.d/ qui dit à udev de ne pas traiter de périphériques spécifiques - chaque périphérique obtiendrait sa propre ligne spécifiant: KERNEL == ”sda1 ″, ENV {UDISKS_PRESENTATION_HIDE} =” 1 ″. Cela ne modifie aucun comportement du système ou du noyau. Il indique simplement à UDEV de masquer la présentation du disque. Nautilus s'appuie sur le traitement des règles udev pour précisément ce comportement.
papashou
1

Essayez d'encapsuler 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 le 10.04

MISE À JOUR:

#!/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
la source
Merci pour la suggestion ... Je ne veux pas modifier les paramètres car je ne suis pas sûr qu'il prendra effet immédiatement, il nécessite un code différent pour chaque version, il n'est pas élégant et si le script est abandonné, il quitte l'utilisateur dans un état indésirable - je ne pense pas non plus que cela devrait être nécessaire. Ce que je recherche, c'est le mécanisme par lequel nautilus est informé de la monture, et comment la contourner. par exemple udev? dbus? ce genre de chose.
bcbc
+ Je ne veux pas modifier les paramètres car je ne suis pas sûr que cela prendra effet immédiatement - C'est la question à vérifier (assez facile). + il nécessite un code différent pour chaque version - il peut exiger ou non 50 | 50 comme si je pouvais rencontrer un dyno dans la rue)) + il est inélégant - comparé à quelle alternative?
zuba
+ si le script est abandonné, il laisse l'utilisateur dans un état indésirable - de nombreux packages (aptitude par exemple) en cas d'interruption le font. Il existe des approches pour éviter cet effet secondaire. Par exemple, vous pouvez charger cron pour vérifier toutes les 1min si le script est en cours d'exécution, et sinon pour changer le paramètre. Ou vous pouvez exécuter votre script à partir d'un autre qui contrôle le paramètre.
zuba
Mon point est qu'il ne devrait pas être nécessaire de modifier un paramètre spécifique au bureau. J'aurais également dû ajouter que ce script peut s'exécuter sur ubuntu / xubuntu / kubuntu / lubuntu, etc., ce qui ajoute un niveau élevé de complexité et de risque.
bcbc
L'alternative de mettre la partition sur liste noire avec udisk (voir le lien papashous) nécessite sudo et n'est pas portable sur les machines, donc ce serait encore plus complexe et risqué.
Egil
1

Vous pouvez empêcher le montage automatique du lecteur flash en ajoutant une nouvelle règle udev. Dans cette règle, vous pouvez spécifier un lecteur flash par son fournisseur, son numéro de série et d'autres attributs. Voir les lignes ATTRS {} 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:

zuba
la source
Il semble que cela devrait être une solution de contournement potentielle - j'ai besoin de temps pour examiner cela et expérimenter, et je n'aurai aucune chance avant plus tard aujourd'hui (je donnerai alors des commentaires). Idéalement, la réponse expliquera pourquoi cela se produit (par rapport à l'exécution mountdepuis le terminal), mais si j'obtiens une bonne solution de contournement, je l'accepterai également.
bcbc
Ceci est celui
RobotHumans
0

Non testé .... juste un pressentiment.

Montez le système de fichiers dans une arborescence inaccessible à l'utilisateur nautilus, par exemple dans un sous-répertoire de / root ou / home / someoneelse ou un sous-répertoire / tmp détenu et sécurisé par quelqu'un d'autre

Gardez à l'esprit que ce peut être une mauvaise idée de monter le même périphérique matériel à 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 options pourraient être définies sur "ne rien faire" et cela pourrait éviter la fenêtre contextuelle.

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 de gconf-editor qu'ils mentionnent ne sont plus utilisées.

Paul
la source
Il est monté dans un répertoire sous / tmp (et nulle part ailleurs).
bcbc
Mais l'utilisateur connecté peut toujours accéder à / tmp. La suggestion était d'utiliser un répertoire auquel l'utilisateur connecté ne peut pas accéder.
Paul
J'ai utilisé chmod 700sur le dir ... semblait prometteur, puis une fenêtre de message (sans titre de fenêtre) a été affichée: "Impossible d'ouvrir un dossier pour un système de fichiers de 10 Go", "Aucune application n'est enregistrée comme gérant ce fichier"
bcbc
Fascinant. Il essaie bien sûr. Peut-être aurai-je le temps de jouer avec ça plus tard.
Paul
0

Essayez mountavec les drapeaux -net -i.

zuba
la source
J'ai essayé - à peu près toutes les options de montage que je peux. Le déclencheur se produit ailleurs.
bcbc