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 mount
anders 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 udev
und 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 trigger
ist 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 mount
mit den Flaggen -n
und -i
.