Wo können Benutzereinstellungen für eine App gespeichert werden?

12

Wenn meine Anwendung einige Einstellungen speichern soll, die beim Schließen einer Anwendung bestehen bleiben, wo soll ich sie dann speichern?

Ich spreche nichts Kompliziertes: zwei Boolesche Werte und eine Zeichenfolge (obwohl ich in Zukunft möglicherweise komplexere Einstellungen speichern möchte)

Ich habe gconf, dconf, gsettings usw. alle erwähnt gehört. Was ist die "bevorzugte" Methode? Am liebsten eines, das in Python nett und einfach ist.

8128
quelle
Verwandte: askubuntu.com/questions/42438/...
Tachyonen

Antworten:

9

gconfist veraltet, daher würde ich es für ein neues Projekt nicht verwenden. dconfist ein Backend zum Speichern der Einstellungen, als Anwendungsentwickler sollte man sich normalerweise nicht darum kümmern müssen.

Anscheinend benötigen Sie gsettingseine API auf hoher Ebene ( API-Dokumentation für C ), um Einstellungen zu speichern / abzurufen, ohne sich darum zu kümmern, wie / wo sie tatsächlich gespeichert werden. gsettingsist Teil von gio, welches eines der Kernpakete von gnome (like glibund gobject) ist. Dieser Blog-Beitrag enthält eine kurze Einführung in die Verwendung mit Python.

Wenn Sie keine Abhängigkeiten haben möchten gio(z. B. keine GNOME-Anwendung entwickeln) und einfache Konfigurationsdateien speichern möchten, empfehlen wir Ihnen, das $HOME/.configVerzeichnis (oder das von diesem definierte Verzeichnis $XDG_CONFIG_DIRS) anstelle $HOME/.your_appnameder freedesktop-Spezifikation zu verwenden .

Marcel Stimberg
quelle
Es scheint, dass Ihr Link zum Blog-Post tot ist. Hast du eine andere Chance?
Seth,
@Seth Leider scheint der Blog-Beitrag, auf den ich verlinkt habe, nicht mehr verfügbar zu sein. Ich habe den Link durch einen Link zu einem anderen Blog-Post ersetzt, der auch ein guter Ausgangspunkt sein sollte.
Marcel Stimberg
10

Die Anwendung läuft systemweit

Der geeignete Ort zum Speichern der Einstellungen ist:

/etc/[application]/

Wobei ein Unterverzeichnis optional ist.


Anwendung läuft in einem pro Benutzer - Modus

Einstellungen sollten im Benutzer HOME gespeichert werden, vorzugsweise in einem versteckten Verzeichnis:

/home/<user>/<.application>/

Siehe auch die Debian-FHS .


Anwendungen, die auf X-Desktop ausgeführt werden

Anwendungen für den X-Desktop (z. B. GNOME, KDE, Unity, Xfce) sollten sich auf die XDG-Basisverzeichnisspezifikation beziehen, in der die folgenden Dateispeicherorte in lokalen Variablen definiert sind:

  • $XDG_DATA_HOMEdefiniert das Basisverzeichnis, in dem benutzerspezifische Datendateien gespeichert werden sollen. Wenn $ XDG_DATA_HOME entweder nicht festgelegt oder leer ist, sollte ein Standardwert von $ HOME / .local / share verwendet werden.

  • $XDG_CONFIG_HOMEdefiniert das Basisverzeichnis, in dem benutzerspezifische Konfigurationsdateien gespeichert werden sollen. Wenn $ XDG_CONFIG_HOME entweder nicht festgelegt oder leer ist, sollte ein Standardwert von $ HOME / .config verwendet werden.

  • $XDG_DATA_DIRSDefiniert die nach Präferenzen geordneten Basisverzeichnisse, um zusätzlich zum Basisverzeichnis $ XDG_DATA_HOME nach Datendateien zu suchen. Die Verzeichnisse in $ XDG_DATA_DIRS sollten mit einem Doppelpunkt ':' getrennt werden.

  • If $XDG_DATA_DIRS ist entweder nicht gesetzt oder leer, sollte ein Wert gleich / usr / local / share /: / usr / share / verwendet werden.

  • $XDG_CONFIG_DIRSDefiniert die nach Präferenzen geordneten Basisverzeichnisse, um zusätzlich zum Basisverzeichnis $ XDG_CONFIG_HOME nach Konfigurationsdateien zu suchen. Die Verzeichnisse in $ XDG_CONFIG_DIRS sollten mit einem Doppelpunkt ':' getrennt werden. Wenn $ XDG_CONFIG_DIRS entweder nicht gesetzt oder leer ist, sollte ein Wert gleich / etc / xdg verwendet werden.

Takkat
quelle
Nein, sie sollten in /home/<user>/.config/application/
Anonymous
@Anonymous: Es wäre cool, eine Referenz dafür zu haben. Gegenwärtige Debian-Richtlinien erfordern FHS 2.3, mit der Ausnahme, dass Anwendungen empfohlen werden , Benutzereinstellungen in einer Punktdatei (oder einem Verzeichnis) im HOME des Benutzers zu speichern.
Takkat