Open Source im professionellen Einsatz

Bildschirmloser Daemon

Da das Daemon-Skript mit Hilfe des CPAN-Moduls App::Daemon im Hintergrund läuft und kein Terminal oder X-Server-Display kennt, gibt das Kommando in Zeile 39 von Listing 2 den Wert der »DISPLAY«-Variablen als »:0.0« vor, also das erste Display des X-Servers. Der Daemon startet mit »dbus-mount-watcher start« und schiebt sich dank der von App::Daemon exportierten Methode »daemonize()« in den Hintergrund, sodass der User schon kurz darauf wieder den Kommandozeilenprompt sieht. In der Datei »/tmp/dbus-mount-watcher.log« loggt der Daemon seine Aktivitäten (Abbildung 4).

Abbildung 4: Die Logdatei des Daemon offenbart, dass 20 Sekunden nach dem Skriptstart der Backup-USB-Stick erkannt und der Backup-Prozess eingeleitet wurden.

Abbildung 4: Die Logdatei des Daemon offenbart, dass 20 Sekunden nach dem Skriptstart der Backup-USB-Stick erkannt und der Backup-Prozess eingeleitet wurden.

Das Kommando »dbus-mountwatcher stop« fährt den Daemon wieder herunter, mit »-X« kann der Entwickler ihn auch im Vordergrund starten (Logdaten wandern allerdings immer noch in die Logdatei) und mit »status« lässt sich der Status des Daemon abfragen.

Die Methode »connect_to_signal()« in Zeile 28 von Listing 2 weist dem Event »MountAdded« auf dem Session-Bus den ab Zeile 32 definierten Callback »mount_added()« zu. Das Net::DBus-Framework sorgt im Falle eines aufgeschnappten Events dafür, dass der Callback alle aus dem Bus stammenden und in der Ausgabe von »dbus-monitor« in Abbildung 3 aufgelisteten Parameter erhält. Als dritter Parameter liegt demnach eine Referenz auf einen Array vor, dessen fünftes Element der Mountpoint des USB-Sticks unter dem »/media«-Verzeichnis ist (Abbildung 5).

Abbildung 5: Das Perl-Modul Net::DBus ruft den Callback für das Signal »MountAdd« mit diesen Parametern auf.

Abbildung 5: Das Perl-Modul Net::DBus ruft den Callback für das Signal »MountAdd« mit diesen Parametern auf.

Diese URI der Form »file:///media/XXX« übergibt der »system()«-Aufruf in Zeile 42 von Listing 2 dem eigentlichen Backup-Skript »gtk2-backup« aus Listing 3, das unaufgefordert direkt nach dem Start einen dicken roten Progressbalken auf den Bildschirm zaubert und den Backup-Prozess beginnt (Abbildung 6).

Abbildung 6: Das automatische Backup startet auf dem Ubuntu-Desktop sofort, nachdem jemand den USB-Stick eingesteckt hat.

Abbildung 6: Das automatische Backup startet auf dem Ubuntu-Desktop sofort, nachdem jemand den USB-Stick eingesteckt hat.

Damit der Daemon nach dem Registrieren mit dem D-Bus nicht abrupt abbricht, sondern ewig weiterläuft, definiert Zeile 46 einen so genannten Reactor. Dieses Objekt verfügt über eine Methode »run()«, die den Daemon auf alle Zeit mit dem D-Bus verschweißt.

Boxen als Baumaterial

Listing 3 nimmt den Mountpoint des erkannten USB-Sticks entgegen, entfernt dessen »file://«-Vorspann in Zeile 18 und definiert mit dem Kommando in Zeile 26 das simple Backup-Verfahren: Das »tar«-Kommando sammelt alle unter dem Verzeichnis »$src_dir« (Zeile 10) liegenden Dateien ein und schreibt das daraus erzeugte Tar-Archiv auf den USB-Stick. Um Überschreiben zu verhindern, erzeugt das Skript eine nach dem aktuellen Datum benannte Datei im Format »YYYYMMDD.tgz«. Wer den Stick mehrmals am Tag einlegt, muss noch Stunden und Minuten einbeziehen.

Das Layout des GUI besteht aus einem Oberteil mit dem Progressbalken und einem Unterteil mit einem Button, der während des Backup-Laufs als »Cancel« erscheint und nach dessen Beendigung eine Erfolgsmeldung anzeigt. Da Widgets wie Progressbalken oder Buttons nicht direkt in einem Fenster der Klasse Gtk2::Window liegen können, muss ein Gtk2::VBox-Container herhalten, der die in ihm liegenden Elemente (Progressbalken und Button) mit »pack_start()« untereinander darstellt.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook