Xfce4-Konfiguration automatisiert via CLI oder Ansible anpassen: Beispiel Design

Xfce4-Konfiguration automatisiert via CLI oder Ansible anpassen: Beispiel Design

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

Leave a Reply