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.
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.
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.
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
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





