Unter dem Titel Mehr machen mit dem Mac hat Erik Keller gerade sein zweites Buch bei uns veröffentlicht – ein Howto für das tägliche Arbeiten am Mac, mit über 200 Alltagslösungen für häufige oder knifflige Fragen und Problemfälle zwischen AppleScript und Zugriffsrechten. Hier im Addison-Wesley-Blog veröffentlicht Erik Keller in loser Folge Auszüge aus Mehr machen mit dem Mac. Heute die letzte der 10 Folgen: Mit launchd Dateien kopieren für unterwegs.
Was ist launchd?
launchd ist ein Systemprogramm, welches beim Starten von OS X aktiviert wird. Das d am Ende des Namens zeigt – gemäß den UNIX-Konventionen – an, dass es sich um ein so genanntes „Daemon“-Programm handelt. Also um ein Programm, welches im Hintergrund darauf wartet, dass ein vorher konfiguriertes Ereignis eintritt oder dass es von einem anderen Programm oder dem Betriebssystem angesprochen beziehungsweise aktiviert wird.
Die Konfiguration erfolgt, wie bei allen aktuellen Programmen unter OS X, über so genannte „Property-Lists“, kurz plists. Diese XML-Dateien lassen sich, von den Programmen, die sie benutzen, sehr effizient überprüfen und verarbeiten. launchd kann mit Konfigurationsdateien in fünf verschiedenen Verzeichnissen umgehen, der Ablageort der Datei bestimmt die Art und Weise, wie sich die Konfiguration auswirkt.
Hier ein Beispiel, wie man sich launchd zu Nutze machen kann. Sie bauen auf bereits Vorhandenem auf und treiben eigentlich nur die Art der Automatisierung etwas weiter.
Dateien kopieren für unterwegs
Wer mit leichtem Gepäck unterwegs sein möchte und sicher ist, am Reiseziel einen benutzbaren Computer vorzufinden, wird nicht immer den Laptop mit einpacken, sondern manchmal auch nur die benötigten Daten auf einem USB-Stick mit sich führen.
Solange die Daten auf dem USB-Stick Platz haben, sollte man nur einen Weg finden sicherzustellen, dass man auch die aktuelle Version der zu nutzenden Daten mit sich führt. Man könnte die Daten natürlich von Hand kopieren. Aber wäre es nicht angemessener – wir arbeiten ja schließlich mit einem Computer, noch dazu mit einem Mac – wenn sich der Rechner darum kümmern würde, den derzeitigen Stand für uns auf den tragbaren Speicher zu übertragen?
Dachte ich mir doch. Solange sich die Daten in einem einzelnen Ordner befinden, mag die Kopie von Hand eventuell genauso einfach sein, aber der Mechanismus lässt sich beliebig erweitern und soll hier nur als Beispiel dienen. Nehmen wir an, wir haben zwei Ordner, welche die benötigten Daten enthalten, und diese sollen automatisch auf einen USB-Stick mit dem schönen Namen Alphonse kopiert werden, wenn dieser für das System sichtbar (also gemountet) ist.
Als Vorlage passen wir uns die Automator-Aktion “Finder-Objekte kopieren” an, indem wir als Ziel den (gemounteten) USB-Stick angeben. Damit ist der größere Teil der Arbeit eigentlich schon erledigt. Wie lässt sich nun überprüfen, ob der USB-Stick eingesteckt wurde? launchd hat die Fähigkeit, dies für uns zu erledigen.
In der plist <WatchPaths> muss nur der Key benutzt werden. Die plist mit dem Namen com.mmmdm.copy1.plist sieht dann so aus:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.mmmdm.copy1</string>
<key>ProgramArguments</key>
<array>
<string>/Users/[Benutzername]/Library/Scripts/mmmdm/usbcopy.sh</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Volumes</string>
</array>
</dict>
</plist>
Wohin diese Konfigurationsdatei abgelegt werden muss, hängt von ihrem Einsatzzweck ab.
Die Überwachungsroutine im obigen Listing ist für unsere Zwecke allerdings etwas zu eifrig, denn sie reagiert auf jede Veränderung von /Volumes, und wir wollen ja, dass der Kopiervorgang nur dann angestoßen wird, wenn Alphonse gemountet wurde. Aus diesem Grund hängen wir zwischen die Ausführung von copy2alphonse.app und der Überwachungs-plist noch folgendes Skript ein:
#!/bin/bash VOLUMENAME="Alphonse" if [ -e /Volumes/$VOLUMENAME ]; then echo "Volume mounted" open -a copy2alphonse.app fi
Der in diesem Listing durchgeführte Test sorgt also dafür, dass nur das Mounten von Alphonse die Aktion auslöst. Das Shell-Skript muss ausführbar sein, im vorliegenden Fall muss mit chmod u+x usbcopy.sh das „Execute-Bit“ gesetzt werden.
… und wenn Sie noch mehr machen wollen, lesen Sie weiter auf Erik Kellers Blog technovelty.de – dort stellt er unter der Rubrik mmmdm in loser Folge noch mehr Tipps & Rezepte zum Arbeiten mit Mac OS X 10.5 vor.
Mehr lesen zum Mac können Sie auch auf unserer Webkatalogseite zum Buch, dort finden Sie ein Inhaltsverzeichnis und eine Leseprobe im PDF-Format zum Herunterladen.