Verhindern, dass Nautilus die im Bash-Skript gemountete Partition anzeigt

Verhindern, dass Nautilus die im Bash-Skript gemountete Partition anzeigt

In meinem Bash-Skript mounte ich Partitionen, überprüfe sie, kopiere Dateien darauf und hänge sie wieder ab. Wenn das Skript die Partition mountet, öffnet Nautilus ein Fenster, das die Partition anzeigt und den Fokus stiehlt. Das möchte ich vermeiden.

Hinweis: Ich weiß, dass ich das Verhalten in den Systemeinstellungen, Details, Wechseldatenträger usw. ändern kann Never prompt or start programs on media insertion, aber ich möchte das Verhalten nicht ändern, wenn z. B. ein USB-Stick eingesteckt ist, sondern es nur in meinem Bash-Skript verhindern. Da dieses Skript auf den Computern anderer Benutzer ausgeführt wird, kann ich diese Einstellungen (im Skript) nicht ändern, da die geänderten Einstellungen bei einer unnormalen Beendigung bestehen bleiben (ich glaube auch nicht, dass dies notwendig sein sollte).

Tatsächlich scheint diese automatische Anzeige nicht konsistent zu sein. Wenn ich genau denselben Befehl vom Terminal aus ausführe, wird Nautilus nicht angezeigt, und ich weiß, dass es in meinem Skript andere Mounts gibt, die nicht angezeigt werden. Was könnte also die Ursache dafür sein? Hier ist ein Beispiel des Codes (beide führen dazu, dass separate Nautilus-Fenster geöffnet werden):

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

Ich möchte den Vorgang verstehen, mit dem das Mount Nautilus signalisiert und warum dies geschieht (wenn es nicht geschieht, wenn ich die Partition vom Terminal aus mounte). Und wie kann ich dies am besten verhindern?

Ich habe dieses Verhalten ab Version 11.10 bemerkt (wenn ich mich richtig erinnere). Ich verwende derzeit 12.04, aber das Skript muss auf allen unterstützten Versionen funktionieren. Ich glaube nicht, dass die Lösung das Ändern von Systemeinstellungen beinhalten sollte (die sich zwischen den Versionen unterscheiden können). Wenn Sie sich beispielsweise andere Dinge ansehen, die Partitionen mounten (wie os-prober), werden keine Nautilus-Fenster angezeigt, wenn es verschiedene Partitionen mountet.

Das Skript finden SieHier. Undhier ist der Teilwo Nautilus auftaucht. Ich denke, es taucht auch aufHier, aber ich habe meine Tests auf den ersten Link konzentriert.Dasist dort, wo es nicht auftaucht, wird vor diesen anderen Mounts aufgerufen - beachten Sie, dass ich die ersten als --read-only und innerhalb einer if-Anweisung umgeschrieben habe und es macht keinen Unterschied.

Im Idealfall erklärt die Antwort, warum dies geschieht und wie man es verhindern kann. Mit anderen Worten, sie erklärt, warum das In-Script mountanders behandelt wird als das von einem Terminal ausgegebene. Ein guter Workaround wird ebenfalls akzeptiert, wenn es sich um eine vollständig erläuterte und praktische Lösung handelt, die alle Desktop-Umgebungen (Ubuntu, Kubuntu, Xubuntu, Lubuntu usw.) unterstützt. Außerdem möchte ich eine exponentielle Zunahme der Tests zur Überprüfung vermeiden.

Dank im Voraus

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

Lösung gemäßpapashou's Link:

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
}

Dies führt zwar zum gewünschten Ergebnis, fühlt sich aber wie ein Vorschlaghammeransatz an. Ich glaube, es gibt wahrscheinlich eine Feinabstimmung in udev, die es ermöglicht, dass die Partition weiterhin in Nautilus (und anderen Dateibrowsern) angezeigt wird, ohne dass sie beim Mounten aufpoppt. Falls das übrigens jemand ausprobieren möchte, zeigt das folgende Skript den Popup-Effekt von 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

Ich werde weiterspielen udevund habe auch eineInsekt, da es keinen Sinn ergibt, wenn eine nicht eingelegte Partition sich beim Mounten wie eine eingelegte USB-/Medienkarte verhält. Außerdem udevadm triggerist dies kein kostengünstiger Vorgang, der (zumindest unter 12.04) alles vorübergehend einfriert.

Zusammenfassend habe ich also eine praktikable Lösung (danke an alle, die mitgeholfen haben), die ich vielleicht umsetze oder auch nicht (bin noch nicht sicher); aber ich werde weiter nach etwas anderem suchen. Danke

Antwort1

Versuchen Sie diesen Vorschlag:http://www.worldofnubcraft.com/969/hide-your-disks-or-partitions-from-nautilus/

Ich bin ziemlich sicher, dass es mit Udev-Signalen und -Verarbeitung zu tun hat.

Antwort2

Versuchen Sie, Ihr Skript zu umschließen:

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

Nicht getestet, da ich 10.04 verwende

AKTUALISIEREN:

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

Antwort3

Sie können das automatische Einbinden von Flash-Laufwerken verhindern, indem Sie eine neue udev-Regel hinzufügen. In dieser Regel können Sie ein Flash-Laufwerk nach Hersteller, Seriennummer und anderen Attributen spezifizieren. SieheATTRS{}Zeilen in der Ausgabe von:

udevadm info -a --name=sdb1

Dieses Skript sollten Sie in/etc/udev/rules.dOrdner mit speziellem Dateinamen, zB 81-usb-wubi-move.Regeln

Die Regel könnte so aussehen

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

Siehe auch:

Antwort4

Versuchen Sie es mountmit den Flaggen -nund -i.

verwandte Informationen