17. Mai 2008

Desktop Volume Icon Position

Mit dem Erscheinen von Mac OS X Leopard (10.5) hat Apple dem Finder eine Funktion spendiert, daß er sich die Icon Positionen der eingelegten (physichen und virtuellen) Medien merkt. Das bedeutet, wenn beispielsweise eine bestimmte DVD zum zweiten mal eingelegt wird, egal ob Tage oder Monate dazwischen liegen, wird das Icon auf dem Desktop an der Stelle platziert, an der es das letzte mal positioniert war.
Diese empfinde ich als störend und änderte es teilweise auf das alte Verhalten zurück. Warum?

english

Apple added with OS X Leopard (10.5) the functionality to the Finder that the positions of mounted devices on the desktop are remembered. That means the second time you mount a particular volume[1] the icon should appear on the exact same position as last time.
I found it at least counter intuitive and changed it partially back. Why?

The english part continues further down below, click here to leap.

 
Lots of mounted volumes on the desktop

Jede Menge Icons von unterschiedlichen Datenträgern auf dem Schreibtisch.
Lots of mounted volumes on the desktop.

Es ist eine paradoxe Situation. Dadurch das sich der Finder die Positionen der Volume[2] Symbole auf dem Schreibtisch merkt, bin ich als Benutzer dazu gezwungen mich ebenfalls an deren Stelle zu erinnern. Wenn ich mich nicht genau erinnere muß ich den Schreibtisch absuchen bis ich fündig werde. Auch wenn Exposé’s Schreibtisch einblenden (F11) diesen Vorgang vereinfacht ist dieses Helferlein an dieser Stelle überflüssig.
Bei dem alten Verhalten des Finders wurden neue Volumes einfach an die nächste freie Stelle des Schreibtisches platziert. Der Benutzer mußte lediglich einmal lernen wie die Reihenfolge der Platzierung verläuft. Von oben rechts beginnend vertikal nach unten, dann eine Spalte nach links und wieder von oben nach unten und so weiter. Es mußte nicht aktiv darüber nachgedacht werden, wo denn nun das Symbol erscheinen wird – es war stets an der nächsten freien Stelle platziert worden.

Neben dem erschwerten Auffinden kommen noch weitere Probleme durch dieses neue Verhalten hinzu. Befindet sich bereits ein Icon (beispielsweise ein Dokument welches gerade dort abgelegt wurde) an einer gespeicherten Stelle einer DVD die erneut eingelegt wird, verhält sich der Finder nach dem alten Muster. Er platziert das Symbol an die nächste freie Stelle und zeigt damit die Überflüssigkeit der neuen Verhaltensweise.
Das neue Benehmen führt noch zu weiteren Problemen. Wird beispielsweise von einem MacBook aus mit einem zweiten Monitor gearbeitet und die gespeicherte Position des Icons eines Netzwerklaufwerks ist auf dem externen Display. Wo erscheint dann das Icon, wenn das Display beim nächsten einlegen dieses Laufwerks nicht angeschlossen ist – genau, auf der Position des nicht angeschlossenen Displays ergo nicht für den Benutzer ersichtlich.
An welcher Position wird ein Icon erscheinen, wenn der Benutzer in der Zwischenzeit die Symbolgröße oder den Gitterabstand des Schreibtisches (command+J) verändert hat?

Die Lösung ist unvollständig

Ich war nicht in der Lage diese Eigenart des Finders zu beseitigen. Apple gibt dem Benutzer keinerlei Möglichkeit darauf Einfluß auszuüben. Die Informationen damit der Finder weiß wo die letzte Position war werden in com.apple.finder.plist (zu finden in /Benutzer/BENUTZERNAME/Library/Preferences/) unter dem Eintrag FXDesktopVolumePosition festgehalten. Ein dauerhaftes Entfernen der Einträge oder ein wiederkehrendes Löschen zur Laufzeit ist nicht möglich.
Bevor der Finder startet kann seine Property List Datei[3] verändert werden.

Dazu muß vor dem Anmelden des Benutzers (da zu diesem Zeitpunkt der Finder noch nicht gestartet ist) die Plist Datei bearbeitet werden. Apple hat mit launchd eine einfache Möglichkeit dafür geschaffen. Wer sich näher damit auseinandersetzen möchte findet hier weitere Informationen: Getting Started with launchd und System Startup Programming Topics. Es lassen sich zwei Kontexte unterscheiden: per-user agents und system wide daemons. Die Anweisungen werden in XML Plist Dateien gepackt.

Um mit dem Terminal Benutzereinstellungen (preferences) zu Lesen, Schreiben oder zu Löschen bedarf es dem Befehl defaults. Der Eintrag in com.apple.finder.plist lautet FXDesktopVolumePosition und der komlpette Ausdruck demnach:
defaults delete com.apple.finder FXDesktopVolumePositions

Diese Anweisung muß nun in eine XML Plist Datei mit weiteren Parametern geschrieben werden (Nähere Informationen dazu unter Specifying the Startup Item Properties). Es kann ein gewöhnlicher Editor wie TextEdit oder Smultron dafür verwendet werden. Die Datei sieht dann wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>de.samborsky.DeleteFXDesktopVolumePositions</string>
   <key>ProgramArguments</key>
   <array>
      <string>defaults</string>
      <string>delete</string>
      <string>com.apple.finder</string>
      <string>FXDesktopVolumePositions</string>
   </array>
   <key>RunAtLoad</key>
   <true/>
</dict>
</plist>

Ein kleiner Hinweis: Eine sehr bequeme Art lauchd Konfigurationsdateien zu erzeugen ist mit Peter Borg’s Lingon.

Die Datei mit der Endung .plist speichern und nach /Library/LauchAgents/ kopieren. Dort dann die Besitzrechte der Datei auf Benutzer = root und Gruppe = wheel ändern. Mit dem Terminal geht das wie folgt:
cd /Library/LaunchAgents/ RETURN
chown root:wheel NAMEOFTHE.plist RETURN

Wer sich nicht mit dem ganzen Erzeugen, Kopieren und dem Terminal rumschlagen möchte, dem habe ich einen Installer erstellt. Dieser kopiert die Datei nach /Library/LauchAgents/ mit den richtigen Besitzrechten.

Beim nächsten Anmelden verhalten sich die Volume Symbole auf dem Schreibtisch wie vor Leopard. Das heißt, das Macintosh HD Icon und platzierte Ordner sind an der gleichen Stelle und neue Volumes (CDs, DVDs, FW/ USB Laufwerke, …) erscheinen an der nächsten freien Stelle des Schreibtisches. Lediglich bei erneuten Erscheinen des Icons (zum Beispiel erneutes Anstecken einer bestimmten Speicherkarte) verfährt der Finder nach dem neuen Prinzip (ist die alte Position besetzt erscheint es an der nächsten freien Stelle).

Es genügt ein einfaches Löschen der Plist Datei in /Library/LauchAgents/ um wieder die normale (Leopard) Verhaltensweise des Finders zu erhalten.

Ein sehr subtiles Verhalten, wenige Zeilen XML und dieser lange Artikel

Ich unterhielt mich mit einigen Bekannten über dieses Phänomen, meinen Bedenken damit und dem Lösungsansatz. Einige hatten gar kein Problem mit dem (neuen) Verhalten des Finders, vermutlich weil sie nicht sonderlich viele Volumes gleichzeitig verwenden. Andere teilten meine Auffassung und probierten den beschriebenen Lösungsansatz aus. Ein paar ermunterten mich das auf meinen Blog zu stellen mit ein paar Zeilen Erklärung dazu. Aus ein paar Zeilen wurden recht viele. Ich hoffe trotzdem meinen Standpunkt nachvollziehbar dargelegt zu haben und falls meine Auffassung geteilt wird probiert meinen Ansatz aus.
Weitere Lösungsansätze sind jederzeit willkommen.

MacOSX Universal BinaryDownload: min. Mac OS X 10.5XML Plist Datei (0,3KB)
Reset Desktop Volumes Position.pkg.gz (Installer) (3KB)


 
english
Recurred mounting of a DVD and you don't see the Icon.

Bei erneuten Einlegen einer DVD wird das Icon nicht ersichtlich.
Recurred mounting of a DVD and you don’t see the Icon.

It’s a paradox situation: the OS remembers the position of the device (e.g. SMB share, CD, DVD, DMG image et cetera) on the desktop the last time you mounted it. Thus you have to remember where it was positioned last time on the desktop instead of expecting the icon to appear at the next free spot on the desktop. If your desktop isn’t the tidiest (only Macintosh HD is apparent) than this mannerism results in speculation about where will the icon show up and scanning the desktop for that particular device.

I found it much easier to know that the next free spot in the icon flow[4] on the desktop would be filled with the newly mounted device. With this old behaviour I don’t have to actively think about on which position the icon was placed the last time.
In cases when the position is occupied by another icon the Finder switches back to the old behaviour and places the volume to the next free location. Making the new mannerism look more superfluous.

After using Exposé's show desktop (F11) the icon is visible.

Erst nach Verwendung von Exposé’s Schreibtisch einblenden wird das Icon sichtbar.
After using Exposé’s show desktop (F11) the icon is visible.

There are more problems than just this one: If you work for example with a MacBook and a second Display. A volume icon’s last position was on the second Monitor. The next time you mount that particular device without the second display connected guess where the icon appears. Or in the meantime you changed the grid spacing or the icon size (command+J) of the desktop…

The solution is imperfect

I was not able to completely deactivate the mannerism FXDesktopVolumePosition in the Finder Preferences. The system protects the com.apple.finder.plist (stored in /Users/USERNAME/Library/Preferences/) from changes during runtime. Every time I deleted the entry to get rid of the conduct disorders of the Finder the OS rebuild the original state of the property list[5] within a minute. So I solved the problem for each Login. Every time a user logs into his account the FXDesktopVolumePosition entry in the com.apple.finder.plist gets deleted.

Apple implemented a sophisticated mechanism to execute startup items with launchd. If you want to learn more you might be interested in reading Getting Started with launchd and System Startup Programming Topics. You can distinguish launchd contexts between per-user agents and system wide daemons. The instructions are stored in XML plist files.

Reading, writing or deleting something in a preference file via Terminal is done with the command defaults. The entry in com.apple.finder.plist which causes the mannerism is FXDesktopVolumePosition, the resulting command therefore is:
defaults delete com.apple.finder FXDesktopVolumePositions

This instruction must be wrapped into a XML plist file (more details on this: Specifying the Startup Item Properties). You can use any text editor, like TextEdit or Smultron and save the file with the extension .plist. The result looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>de.samborsky.DeleteFXDesktopVolumePositions</string>
   <key>ProgramArguments</key>
   <array>
      <string>defaults</string>
      <string>delete</string>
      <string>com.apple.finder</string>
      <string>FXDesktopVolumePositions</string>
   </array>
   <key>RunAtLoad</key>
   <true/>
</dict>
</plist>

As a side note: A very convenient way to generate lauchd configuration files is Peter Borg’s Lingon.

Copy your newly created plist to /Library/LauchAgents/ and change ownership: user to root and group to wheel. Changing ownership via Terminal:
cd /Library/LaunchAgents/ RETURN
chown root:wheel NAMEOFTHE.plist RETURN

If you don’t want to bother with all that creating, copying and changing ownership of that file I made a simple installer. The installer copies the file to /Library/LauchAgents/ with the right permissions for you.

The next time you log in the volume icons first behave the old way (i.e. newly mounted devices appear at the next free spot on your desktop respecting the icon flow[4]). Don’t get me wrong, your Macintosh HD will always appear first in the upper right. Like in the pre Leopard era. The second time a particular volume is mounted (without a log out/ log in) the Finder falls back to his behavioural disorder and places the icon at the former position (Remember: only if there is free space. If another icon occupies the location the Finder places it at the next free spot.)

Deleting the plist file in /Library/LauchAgents/ gets you back to the normal (Leopard) Finder behaviour.

A very subtle manner, few lines of XML and this big post

I discussed the new behaviour of the Finder how the volume icons are placed on the desktop with a few friends of mine and told them about my concerns and the (imperfect) solution. Some didn’t had that much of a problem with it and others tried my approach. Those who tried and stayed with my solution encouraged me to put it on my blog with a few lines of explanation. As you can see the few lines of explanation became many. I hope nevertheless you were able to follow my viewpoint on this subject and if you share the same feel free to try my approach.
Any better solutions are welcome.

MacOSX Universal BinaryDownload: min. Mac OS X 10.5XML plist file (0,3KB)
Reset Desktop Volumes Position.pkg.gz (Installer) (3KB)



Fußnoten:

  1. All devices e.g. CDs, DVDs, hard disks, USB sticks, DMG images et cetera are mounted in /Volumes. []
  2. Als Volume werden alle Datenträger bezeichnet, die in ein (UNIX) Betriebssystem eingebunden, -gelegt oder angeschlossen werden. Beispielsweise: CDs, DVDs, Festplatten, Image Dateien (.iso, .dmg, .img et cetera) Netzwerkfreigaben, USB Sticks, Speicherkarten und so weiter []
  3. Property Lists werden dazu verwendet Benutzereinstellungen zu speichern. WP Link: Plist, Apple Developer Connection Property Lists []
  4. The order in which the icons are placed on the desktop. From the top right corner vertically downwards and then continuing one column to the left, vertically down and so forth [] []
  5. Property lists are often used to store a user’s settings. They are also used to store information about bundles and applications, a task served by the resource fork in the old Mac OS. WP Link: Plist, Apple Developer Connection Property Lists []
postseparator

1 Kommentar zu „Desktop Volume Icon Position”

  1. 1 Channon

    22. April 2009 um 16:00

    Great work.

Kommentar abgeben:


Alle Stichworte

 (6)  (1)  (2)  (5)  (1)  (1)  (2)  (2)  (1)  (1)  (3)  (1)  (1)