Die Preferences Files (auch Property List1) → plist) sind bei Mac OS Konfigurationsdateien. Sie liegen im binär-Format oder als Textdateien (XML) vor. Sie sind in etwa mit der Microsoft Registry vergleichbar, wobei die Preferences Files bei Weitem nicht die Komplexität einer Windows Registry erreichen. Im Prinzip lassen sich die Preferences grundsätzlich mal in User Preferences und System bzw Application Preferences einteilen. Die meisten Anwendungen lassen benutzerdefinierte Einstellungen zu; in Mac OS wird dies in Anwendungen idR über das Menü Preferences bzw. Einstellungen erledigt bzw bei Systemkonfigurationen, wie zB die Netzwerkkonfiguration oder die Ländereinstellungen, über die Systemeinstellungen bzw. das Preferences Pane. Diese Einstellungen sind, bis auf wenige Ausnahmen (zB Netzwerk Einstellungen → Dynamic Store2)), permanent und werden beim Start der Anwendung bzw. beim Systemstart ausgewertet. Durch die Trennung der User-Preferences und System-Preferences ist es möglich, jedem Anwender seine eigenen Einstellungen zu ermöglichen. Ähnlich wie bei Microsoft die Registry Rootkeys HKEY_CURRENT_USER und HKEY_LOCAL_MACHINE.
Die Preferences Files werden im Filesystem idR für den Benutzer in seinem Homedirectory ~/Library/Preferences bzw. für das System in /Library/Preferences abgelegt und (sollten) haben ein Prefix, welcher den Hersteller der Anwendung identifiziert wie zB bei Apple com.apple, sowie den Namen der Anwendung oder möglicherweise auch nur eine Systemfunktion im Namen. Als Suffix wird .plist verwendet → VendorPrefix.AppFunction.plist (zB com.apple.TextEdit.plist). Es finden sich aber auch noch Dateien in den Preferences Verzeichnissen, welche sich nicht nach dieser Nameskonvention richten. Oft sind das irgendwelche älteren Formate aus veralteten Anwendungen oder Third-Party Anwendungen haben ihre eigene Philosophie, was ihre Konfigurationsdateien betrifft.
Eine besondere Rolle spielt die .GlobalPreferences.plist. Man findet sie sowohl im ~/Library/Preferences/ Verzeichnis wie auch im /Library/Preferences Verzeichnis. Sie representiert die Domain NSGlobalDomain. In ihr werden alle Einstellungen abgespeichert, die nicht einer bestimmten Anwendung zugeordnet werden. Da kommt zB das Aussehen des »Öffnen« oder »Speichern Unter« Dialogs in Frage oder auch diverse Farbeinstellungen wie zB die Highlight Color. Kurz gesagt, wenn eine plist einer Anwendung eine bestimmte Eigenschaft nicht beinhaltet, diese aber in der .GlobalPreferences.plist definiert ist, wird diese verwendet.
Es ist auch möglich, dass Anwendungen ihre Preferences weder in ~/Library/Preferences noch in /Library/Preferences ablegen sondern zB im Programmverzeichnis selbst. Quark Express bietet zB diese Möglichkeit an, was in Verbindung mit einem Lizenserver (QLA) uns in die Lage versetzt ein Image einer kompletten Installation inklusive benutzerdefinierter Einstellungen zu erstellen und am nächsten Mac wieder zu installieren. Dieser Wanderzirkus der Konfigurationsdateien hat aber auch den Nachteil, dass man sich nicht auf einen Ablageort verlassen kann. Auch vermisse ich ein Tool oder Shell-Kommando, welches mir zu einer Applikation die zugehörige Konfigurationsdatei ausgibt.
Die Preferences Files spielen beim Troubleshooting eine wesentliche Rolle. Bei fehlerhaften Anwendungen hat man zB die Möglichkeit, die dazugehörige(n) Preferences zu löschen (oder erstmal nur umzubenennen in zB *.plist.old), dadurch werden diese beim Start der Anwendung bzw. beim Systemstart neu, mit Standardeinstellungen, erzeugt. Neben diesem pragmatischen Lösungsansatz kann man auch hergehen und die Preferences der Anwendung zu analysieren aber im Prinzip ist man mit diesem Lösungsansatz eigentlich gut bedient und reicht in den meisten Fällen auch aus.
Für die Analyse und Bearbeitung stehen einige Boardmittel, sowohl in der GUI (→ Finder) wie auch im CLI (→ Terminal) zur Verfügung. Für die GUI kommt der Property List Editor in Frage, welcher sich in den Developer Tools auf der Mac OS Installations CD befindet. Diese werden bei einer Standardinstallation nicht mit installiert. Des Weiteren kommen zB die CLI Tools plutil3) und defaults4), auf welches der folgende Abschnitt näher eingeht, in Frage. Eine besondere Rolle spielen die Preferences Files in /Library/Preferences/SystemConfiguration. Sie repräsentieren den Dynamic- bzw. Persistant Store, in welchem die Netzwerkeinstellungen gespeichert werden.
Das Mac OSX User Defaults System ist eine Schnittstelle zur Verwaltung von Voreinstellungen. Die Voreinstellungen sind in Domains organisiert, die nach dem umgekehrten DNS Namens Schema bezeichnet werden. So sind die Domains der Apple Programme und Systemdienste durchweg nach dem Muster com.apple.xyz benannt, wobei xyz normalerweise für den Programm- oder Dienstnamen wie com.apple.mail oder com.apple.finder steht. In manchen Fällen ist dieser Bereich noch in Unterdomains wie zB com.apple.menuextra.clock oder com.apple.menuextra.textinput gegliedert. Wichtig ist hierbei nur, dass der Name systemweit eindeutig ist. Einige Einstellungen werden von mehreren Programmen oder Diensten gelesen; die Auswahlfarbe, die Spracheinstellungen oder die zuletzt benutzten Ordner in Öffnen- und Sichern Dialogen sind ein Beispiel dafür. Diese Voreinstellungen werden in einer eigenen Domain mit dem Namen NSGlobalDomain gespeichert.
IdR werden die Voreinstellungen der einzelnen Programme in deren Menüpunkt Einstellungen vorgenommen und dadurch in die plist-Datei geschrieben. Es gibt aber etliche Ausnahmen, wie zB Systemdienste, die gar keine Benutzerschnittstelle besitzen, oder schlicht und ergreifend fehlende Einstellmöglichkeiten im betreffenden Einstelldialog von diversen Anwendungen. Mit dem Programm defaults können auch diese Voreinstellungen gelesen, geändert oder gelöscht werden. Es ist ratsam, das betreffende Programm (wenn möglich) zu schliessen, wenn man mit defaults in deren Preferences Dateien etwas ändert.
Die Syntax lautet folgendermaßen: defaults Modus Domain [Schlüssel | .plist]
Die Modis:
$ defaults read org.mozilla.Firefox NSNavLastRootDirectory ~/Desktop
$ defaults read-type org.mozilla.Firefox NSNavLastRootDirectory Type is string $ defaults read-type com.apple.finder _FXShowPosixPathInTitle Type is boolean
$ defaults domains | tr ',' '\n' | nl 1 DVD Ripper for Mac 2 Icns2Rsrc 3 MacSOUP 4 Wondershare DVD Ripper 5 Wondershare Video Converter 6 ca.mactracker.mactracker 7 ca.mactracker.mactracker3 8 ch.sudo.cyberduck 9 com.Geezerbuttz.mtr 10 com.adobe.ARM 11 com.adobe.Acrobat.Pro ~~~ snip ~~~ 174 org.mozilla.crashreporter 175 org.mozilla.firefox 176 org.mozilla.thunderbird 177 org.sil.Ukelele 178 org.smfr.mtnw 179 org.videolan.vlc 180 org.videolan.vlc.LSSharedFileList 181 org.x.X11 182 pbs 183 widget-com.apple.widget.calendar 184 widget-com.apple.widget.weather 185 widget-com.apple.widget.worldclock
$ defaults read > vor ~~~ Änderung der Systemeinstellunge ~~~ $ defaults read > nach $ diff vor nach 12124c12124 < "com.apple.sound.beep.sound" = "/System/Library/Sounds/Funk.aiff"; --- > "com.apple.sound.beep.sound" = "/System/Library/Sounds/Frog.aiff";Wir sehen jetzt, das der Schlüssel com.apple.sound.beep.sound heißt und der Wert vor der Änderung /System/Library/Sounds/Funk.aiff war und nach der Änderung /System/Library/Sounds/Frog.aiff ist. Aber wir wissen noch nicht in welcher Domain sich dieser Schlüssel befindet. Dafür nutzen wir jetzt den find-Befehl:
$ defaults find com.apple.sound.beep.sound Found 1 keys in domain 'com.apple.systemsound': { "com.apple.sound.beep.sound" = "/System/Library/Sounds/Frog.aiff"; }Wir sehen jetzt also, dass sich unser Schlüssel in der Domain com.apple.systemsound befindet. Jetzt können wir den write-Modus verwenden um unseren Test wieder auf die ursprüngliche Einstellung zurückzustellen:
$ defaults write com.apple.systemsound com.apple.sound.beep.sound /System/Library/Sounds/Funk.aiff
Und die Gegenprobe:$ defaults read com.apple.systemsound com.apple.sound.beep.sound /System/Library/Sounds/Funk.aiff
— pronto 2010/05/25 20:12
Eine weitere Möglichkeit das (oder die) Preferences File(s) zu ermittel, welche für einen bestimmten Zweck verwendet werden, ist das Tool fseventer7), es eignet sich hervorragend um Dateisystem Aktivitäten zu visualisieren. Mit den passenden Filtern versehen, entsteht recht schnell ein Überblick was da wo gerade passiert. Im Falle der Preferences Files liegt es nahe den Filter auf .plist zu setzen:
Wenn man die Aufzeichnung startet und im PrefPane Ton die Änderung vornimmt, wird sehr schnell ersichtlich, welche plist-Datei in die Sache verwickelt ist.
— pronto 2010/07/22 12:18