In meinem Bash-Skript mounte ich Partitionen, überprüfe sie, kopiere Dateien darauf und hebe die Bereitstellung auf. Wenn das Skript die Partition bereitstellt, wird Nautilus mit einem Fenster angezeigt, in dem die Partition angezeigt wird und der Fokus gestohlen wird. Das möchte ich vermeiden.
Hinweis: Ich weiß, dass ich das Verhalten in den Systemeinstellungen, Details, Never prompt or start programs on media insertion
Wechselmedien ändern kann , aber ich möchte das Verhalten nicht ändern, z. B. wenn ein USB-Stick angeschlossen ist, ich möchte 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 bei einer abnormalen Beendigung die geänderten Einstellungen beibehalten werden (ich glaube auch nicht, dass dies erforderlich sein sollte).
Eigentlich scheint diese automatische Anzeige nicht konsistent zu sein. Wenn ich genau den gleichen Befehl vom Terminal aus ausführe, wird Nautilus nicht angezeigt, und ich weiß, dass in meinem Skript andere Bereitstellungen nicht angezeigt werden. Was könnte das verursachen? Hier ist ein Beispiel für den Code (beide führen dazu, dass separate Nautilusfenster geöffnet werden):
mount $dev $target
mkdir -p $target/home
mount $homedev $target/home
Ich bin daran interessiert zu verstehen, wie der Mount Nautilus signalisiert und warum dies geschieht (wenn dies nicht der Fall ist, wenn ich die Partition vom Terminal aus mounte). Und was ist der beste Weg, um dies zu verhindern?
Ich habe dieses Verhalten ab Release 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 zwischen den Releases unterschiedlich sein können). Wenn Sie sich beispielsweise andere Dinge ansehen, die Partitionen bereitstellen (z. B. os-prober), werden keine Nautilus-Fenster angezeigt, wenn verschiedene Partitionen bereitgestellt werden.
Das Skript finden Sie hier . Und hier ist der Teil, in dem Nautilus auftaucht. Ich denke, dass es auch hier auftaucht , aber ich habe meine Tests auf den ersten Link konzentriert. Hier wird es nicht angezeigt, vor diesen anderen Reittieren aufgerufen. Beachten Sie, dass ich die ersten als - Nur Lesen und innerhalb einer if-Anweisung umgeschrieben habe und es keinen Unterschied macht.
Im Idealfall erklärt die Antwort, warum dies geschieht und wie dies verhindert werden kann, mit anderen Worten, warum das In-Script mount
anders behandelt wird als das von einem Terminal ausgegebene. Eine gute Problemumgehung wird auch 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. Ich möchte auch eine exponentielle Zunahme der Tests vermeiden, um dies zu überprüfen.
Danke im Voraus
============
Lösung gemäß Papashou -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 erzielt das gewünschte Ergebnis, fühlt sich jedoch wie ein Vorschlaghammer an. Ich glaube, es gibt wahrscheinlich eine Feinabstimmung in udev, die es der Partition ermöglicht, weiterhin in Nautilus (und anderen Dateibrowsern) angezeigt zu werden, ohne dass sie beim Mounten auftaucht. Übrigens, wenn jemand dies versuchen 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 weiter spielen udev
und habe auch einen Fehler gemeldet , da dies für eine Partition, die nicht eingesetzt ist, keinen Sinn macht, sich beim Mounten wie eine eingesteckte USB- / Medienkarte zu verhalten. Auch udevadm trigger
ist dies keine kostengünstige Operation, die (zumindest am 12.04.) Erscheint, um alles vorübergehend einzufrieren.
Zusammenfassend habe ich also eine praktikable Lösung (danke an alle, die mitgeholfen haben), die ich möglicherweise implementieren kann oder nicht (noch nicht sicher); aber ich werde weiter nach etwas anderem suchen. Vielen Dank