From: Boris Kraut Date: Sat, 11 May 2013 02:15:17 +0200 Category: Message-ID: <20130511021517.D8f5RO@silberbruch> Organization: Keywords: Comments: To: undisclosed-recipients: ; Subject: [.plan] Portables /home/, XDG und Android API Reply-To: Boris Kraut Ich bin bekanntlich kein grosser Fan von den XDG, den von freedesktop.org aufgestellten X Desktop Guidelines. Sicher, sie vereinheitlichen, aber manchmal steht diese Vereinheit- lichung eben meiner speziellen Nutzungsart entgegen, z.B. beim Aufbau und der Organisation des Home-Verzeichnises. Bisher wurden Benutzerkonfigurationsdateien einfach im Home- Verzeichnis des jeweiligen Nutzers abgelegt und trugen den Namen der Anwendung Dem Namen war ein "." vorangestellt, um die Datei zu verstecken und von Nutzerdaten unterscheiden zu koennen. Reichte eine einzelne Datei nicht aus bzw. wurden zusaetzlich zu den Nutzerdaten auch Anwendungsdaten angelegt, nutzten die meisten Programme ein komplettes Verzeichnis nach dem selben Namensmuster -- die Konfigurationsdatei war dann mit den Anwendungsdaten innerhalb dieses Ordners zu finden, der den Namen des jeweiligen Programms verwendete. XDG legt nahe, dass man Anwendungsdaten und -konfigurationen an sich oertlich trennen sollte und erst in zweiter Ebene nach Programmnamen. Dazu gibt es die beiden Umgebungsvariablen XDG_DATA_HOME und XDG_CONFIG_HOME -- falls nicht gesetzt sollen die Ordner $HOME/.local/share und $HOME/.config ver- wendet werden, anstatt auf das alte, oben erlaeuterte Schema zurueck zu fallen: Diese sollen nur noch lesend genutzt werden. In der XDG-Denke, haben auch andere -- besser: keine -- Daten etwas im Home-Verzeichnis verloren und so werden weitere Unterordner bestimmt. Diese werden jedoch nicht per Umgebungs- variable festgelegt, sondern in $XDG_CONFIG_HOME/user-dirs.dirs -- einer Datei die diese zusaetzlichen Variablen und Werte festlegt: XDG_DESKTOP_DIR="$HOME/Desktop" XDG_DOWNLOAD_DIR="$HOME/Downloads" XDG_TEMPLATES_DIR="$HOME/Templates" XDG_PUBLICSHARE_DIR="$HOME/Public" XDG_DOCUMENTS_DIR="$HOME/Documents" XDG_MUSIC_DIR="$HOME/Music" XDG_PICTURES_DIR="$HOME/Pictures" XDG_VIDEOS_DIR="$HOME/Videos" Es gibt noch weitere XDG-Variablen, aber dazu spaeter mehr. Im Moment geht es mir um etwas anderes. Ich halte das Vorhandensein solcher Variablen fuer eine gute Idee. Sie beschreiben Ordner, die man in sehr vielen Faellen auf einem Desktop-System haben und nutzen koennte. Was mich jedoch stoert ist, dass XDG sehr viral ist: Zum einen muss ich XDG nutzen, um XDG-Anwendungen mitzuteilen, dass sie nicht XDG nutzen sollen. Zum anderen wird aktiv auf Entwickler Einfluss genommen, damit diese auch ohne dass XDG-Variablen gesetzt sind, die XDG-Sturktur einhalten, anlegen und dem "alten Weg" vorziehen. Auch schade: Man kann den Inhalt von "user-dirs.dirs" nicht einfach per ENV-Variable ueberschreiben. So sehr ich mich auch gegen XDG ausspreche, desto mehr Programme nutzen XDG und folgen dessen Empfehlung, es proaktiv zu erzwingen, indem sie "den alten Weg" nicht mehr oder nur lesend anbieten. Es wird klar, dass ich fuer ein portableres Home-Verzeichnis zumindest optional XDG beachten muss, deshalb habe ich mir Gedanken ueber meine Verzeichnisstruktur gemacht. Im Vergleich zur letzten Be- sprechung meines Homeverzeichnis bei ioexception.de, hat sich doch einiges geaendert. Statt mit "Desktop" und "Downloads" Ordnern zu leben, die diverse Anwendungen immer und immer wieder erstellen, habe ich diesen -- in meinem Schema -- sinnvolle Namen gegeben. Ausserdem wurde mein Ordner fuer Vortraege und Praesentationen zum generellen Speicherort fuer Dokumente.. oder besser fuer "dokumentierte Ereignisse". XDG_DATA_HOME=$HOME XDG_CONFIG_HOME=$HOME XDG_RUNTIME_DIR=/run/krt ... XDG_DESKTOP_DIR="$HOME" XDG_DOWNLOAD_DIR="$HOME/tmp" XDG_TEMPLATES_DIR="$HOME" XDG_PUBLICSHARE_DIR="$HOME/pub" XDG_DOCUMENTS_DIR="$HOME/doc" XDG_MUSIC_DIR="$HOME/pls" XDG_PICTURES_DIR="$HOME/pic" XDG_VIDEOS_DIR="$HOME/mov" Daneben gibt es noch die Ordner src, bin, man und mail, deren Sinn wohl offensichtlich ist. Zudem gibt es weiterhin misc, der in vielerlei Hinsicht die selben Aufgaben erfuellt hat, wie doc jetzt, aber derzeit noch einem anderen Ordnungsparadigma folgt. Frueher oder spaeter wird misc nicht mehr benoetigt werden. Damit sollte dann ja alles gut sein, oder? Nicht ganz, denn wer hier einige Zeit mitliest, weiss, dass ich mich auch mit dem Nicht-so-ganz-Linux namens Android beschaeftige. Android kennt prinzipiell eine aehnliche Verzeichnisstruktur, legt diese aber nicht im Home-Verzeichnis -- das waere /data bzw. die jeweilige Multi-User-Version davon -- ab, sondern nutzt dafuer /sdcard -- auch hier: oder die jeweilige MultiUser-Version --, was wenig mit der SD-Karte zu tun hat, sondern generell als Name fuer nutzerspezifischen Speicher verwendet wird. Ebenfalls nutzt Android hier keine veraenderbaren Umgebungs- variablen, sondern festkodierte Werte, die ueber die API [1] via getExternalFilesDir(NAME) abrufbar sind. NAME folgt dabei einem relativ simplen Schema, z.B. DIRECTORY_MUSIC oder DIRECTORY_RINGTONES. Die Standardverzeichnisse sind: > Music/ > Media scanner classifies all media found here as user music. > > Podcasts/ > Media scanner classifies all media found here as a podcast. > > Ringtones/ > Media scanner classifies all media found here as a ringtone. > > Alarms/ > Media scanner classifies all media found here as an alarm > sound. > > Notifications/ > Media scanner classifies all media found here as a notification > sound. > > Pictures/ > All photos (excluding those taken with the camera). > > Movies/ > All movies (excluding those taken with the camcorder). > > Download/ > Miscellaneous downloads. Die einzige Option, dieses Verhalten zu beeinflussen, wird wohl eine massiver Einsatz von Symlinks sein; nicht unbedingt die ideale Loesung. Es wird immer ersichtlicher, dass -- so sehr mir Android an der Oberflaeche gefaellt -- es nicht das ist, womit ich gluecklich werde. Ich kann nur hoffen, dass es bald gut nutzbare unixartigere Systeme fuer die ansonsten ganz gefaellige Hardware gibt. [0] http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html [1] https://developer.android.com/guide/topics/data/data-storage.html#AccessingExtFiles [2] https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard [3] https://en.wikipedia.org/wiki/Unix_directory_structure