Auch die leichtgewichtige Desktopumgebung Xfce4 bietet einige Möglichkeiten zur persönlichen Anpassung. Neben verschiedenen Einstellungen fallen darunter beispielsweise Designs oder Iconpacks, um das standardmäßig eher rudimentäre Aussehen anzupassen. Dies für ein Zweit- oder Testgerät immer wieder aufs neue durchzuführen ist nervig und kostet Zeit. Es bietet sich daher durchaus an, hier den Infrastructure as Code Ansatz zu fahren. Das bedeutet: Alle Änderungen werden automatisiert. So kann vergleichsweise schnell ein neues System angepasst werden. Außerdem ist die Konsistent gewährleistet. Jede Instanz wird gleich konfiguriert, ohne dass einzelne Einstellungen ggf. vergessen werden. Dieser Artikel zeigt, wie Xfce-Einstellungen auf der Kommandozeile gelesen und gesetzt werden können.
Channel und Eigenschaft ermitteln
Die verschiedenen Komponenten sind in Channels (Kanäle) grupiert. Man kann sich diese wie folgt anzeigen:
$ xfconf-query -l
Kanäle:
parole
thunar-volman
xfce4-session
xfwm4
xfce4-desktop
xfce4-power-manager
xfce4-appfinder
xfce4-notifyd
thunar
xfce4-screensaver
xsettings
xfce4-keyboard-shortcuts
displays
xfce4-panel
Ist der Kanal bektannt, kann man sich seine enthaltenen Eigenschaften auflisten.
$ xfconf-query -c xfwm4 -l
/general/activate_action
/general/borderless_maximize
/general/box_move
/general/box_resize
...
Hier kann man mit grep bereits fündig werden. Alternativ kann man auch über die GUI die jeweilige Einstellung setzen und zuvor mit dem -m Schalter beobachten, was xfconf-query in den Channel schreibt. Im folgenden Beispiel überwachen wir den Channel xsettings und ändern nach dem Ausführen des Befehles das Design über die GUI. Anschließend sollten wir die Änderung auf der Konsole sehen:
$ xfconf-query -c xsettings -m -v
Überwachung von Kanal »xsettings« wird gestartet:
einstellen: /Net/ThemeName (Numix)
einstellen: /Net/ThemeName (Raleigh)
So praktisch dies mit bekanntem Channel auch ist – Leider existiert keine Möglichkeit alle Channeln zu überwachen. Ich habe mir daher ein kleines Bash-Snippet erstellt, um alle Channels nach einem bestimmten Bezeichner durchsuchen zu können. Folgendes Beispiel sucht sowohl in den Bezeichnern als auch in den Werten nach theme:
$ for channel in $(xfconf-query -l | sed 1,1d); do echo $channel; xfconf-query -c $channel -l -v | grep -i theme; echo; done
...
xsettings
/Gtk/CursorThemeName Human
/Gtk/CursorThemeSize 24
/Gtk/KeyThemeName
/Net/FallbackIconTheme gnome
/Net/IconThemeName elementary-xfce-darker
/Net/SoundThemeName default
/Net/ThemeName Raleigh
Der Name des aktiven Oberfläche-Designs ist demnach in /Net/ThemeName festgelegt. Ergänzend zu obigem Einzeiler gibt es noch ein etwas größeres Skript, dass die Channels filtert. Der Channelname wird hier nur ausgegeben, wenn in ihm mindestens ein Match im Grep-Ausdruck vorhanden ist:
#!/bin/bash
for channel in $(xfconf-query -l | sed 1,1d); do
grepResult=$(xfconf-query -c $channel -l -v | grep -i theme)
if [ $? -eq 0 ]; then
echo -e "${channel}\n${grepResult}\n"
fi
done
Wert einer Eigenschaft setzen
Möchten wir einen Wert ändern, kann dies mit dem -p Schalter umgesetzt werden. In diesem Beispiel soll das Design auf Numix geändert werden.
$ xfconf-query -c xsettings -p "/Net/ThemeName" -s Numix
Das aktive Design wird in Echtzeit geändert und ist damit sofort aktiv. Dies sieht man auch in den grafischen Einstellungen:
Eigenschaften mit Ansible setzen
Seit Version 2.8 bietet Ansible das xfconf Modul an. Somit können die o.g. Änderungen einheitlich über das Modul gesetzt werden, ohne manuelle Shell-Befehle ausführen zu müssen. Beispielhaft setzen wir das Design in folgendem Beispiel-Playbook:
- name: Xfce customizations
hosts: all
vars:
tasks:
- name: Set active xfce theme
xfconf:
channel: "xsettings"
property: "/Net/ThemeName"
value_type: "string"
value: "Numix"
$ ansible-playbook -i localhost, --user daniel dani-chromebook.yml
PLAY [Xfce customizations] ********************************************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************************************************************************************************************************************************************
ok: [localhost]
TASK [Set active xfce theme] ***************************************************************************************************************************************************************************************************************************************************
changed: [localhost]
PLAY RECAP *********************************************************************************************************************************************************************************************************************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0