GLib, GIO und gnome-shell-extensions

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

GLib, GIO und gnome-shell-extensions

Beitrag von scientific » 28.11.2016 22:24:50

Hi Leute!

Ich versuche mich gerade in einer Gnome-Shell-Extension für meine Backupsuite für btrfs.

Bisher funktioniert das Ganze auch schon ganz fein, jedoch fehlen mir noch ein paar essentielle Teile, dich ich mit GLib und Gio nicht hinbekomme, weil mich deren Funktion über Volumes und Mounts verwirren...

Der Mountpunkt, wo ich meine externe Platte einhänge ist /var/cache/backup, und jener wo das btrfs-Volume eingehängt wird ist /var/cache/btrfs_pool_SYSTEM.

Diese beiden Mountpunkte besitzen eigene systemd.mounts.

Ich hab einen Volume-Monitor angelegt:

Code: Alles auswählen

this._monitor = Gio.VolumeMonitor.get();
und experimentiere mit den Ausgaben des Monitors jetzt herum. Und werde nicht ganz schlau...

Wenn die externe Platte NICHT gemountet ist, so krieg ich das Volume mit allen Attributen. Sobald aber die Platte über die systemd-unit gemountet wird, meldet der VolumeMonitor, dass das Volume removed wurde.
Wird die Partition wieder ausgehängt, meldet der Monitor, dass das Volume wieder geadded wurde...

Ich habe bisher herausfinden können, dass dieses Verhalten für User-Space-Programme normal und gewünscht ist, da System-Partitionen ohnehin nicht vom User gemountet werden können sollen...
In Nautilus ist die externe Platte (bzw. deren Partitionen) solange zu sehen und zu mounten, bis sie von systemd gemountet wird. Dann verschwindet die entsprechende Partition und erscheint erst wieder, wenn sie geunmountet wurde.

Für mein Anliegen ist das aber kein sehr brauchbares Verhalten. Denn ich möchte in meiner Extension beim Einhängen alle Volumes dieser externen Platte abfragen um sie dann einer regelmäßigen Abfrage zu füttern, die mir im Panel anzeigt, ob die Platte momentan gemountet ist (eben irgend eine Partition oder ein btrfs-Subvolume davon) oder nicht. Spricht, ich möchte auf einen Blick erkennen, ob ich die externe Platte gefahrlos abziehen kann oder nicht.

Eine weitere Funktion wird sein, dass die Extension beim Einstecken einer externen Platte überprüft, ob diese schon als Backup-Medium registriert ist, und wenn nicht, soll sie mich fragen, ob ich diese Platte oder eine Partition daraus (die Volumes) fürs Backup verwenden möchte - um entsprechende Skripte über die Extension zu starten.

Gibt es also mit Gio ein Werkzeug, welches mir auch Volumes zeigt, wenn diese nicht unter /media/ gemountet sind?
Oder ist es vernünftiger das Unix-Device über den Volume-Monitor für das Drive auszulesen (das hab ich hinbekommen), und dann über systemd-calls in /proc/mounts zu stöbern?

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Antworten