{"id":6499,"date":"2019-11-18T00:22:19","date_gmt":"2019-11-17T22:22:19","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=6499"},"modified":"2019-11-18T00:22:20","modified_gmt":"2019-11-17T22:22:20","slug":"xfce4-konfiguration-automatisiert-via-cli-oder-ansible-anpassen-beispiel-design","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/xfce4-konfiguration-automatisiert-via-cli-oder-ansible-anpassen-beispiel-design\/","title":{"rendered":"Xfce4-Konfiguration automatisiert via CLI oder Ansible anpassen: Beispiel Design"},"content":{"rendered":"<p>Auch die leichtgewichtige Desktopumgebung Xfce4 bietet einige M\u00f6glichkeiten zur pers\u00f6nlichen Anpassung. Neben verschiedenen Einstellungen fallen darunter beispielsweise Designs oder Iconpacks, um das standardm\u00e4\u00dfig eher rudiment\u00e4re Aussehen anzupassen. Dies f\u00fcr ein Zweit- oder Testger\u00e4t immer wieder aufs neue durchzuf\u00fchren ist nervig und kostet Zeit. Es bietet sich daher durchaus an, hier den <em>Infrastructure as Code<\/em> Ansatz zu fahren. Das bedeutet: Alle \u00c4nderungen werden automatisiert. So kann vergleichsweise schnell ein neues System angepasst werden. Au\u00dferdem ist die Konsistent gew\u00e4hrleistet. 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\u00f6nnen.<\/p>\n<h2 class=\"wp-block-heading\">Channel und Eigenschaft ermitteln<\/h2>\n<p>Die verschiedenen Komponenten sind in Channels (Kan\u00e4le) grupiert. Man kann sich diese wie folgt anzeigen:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ xfconf-query -l\nKan\u00e4le:\n  parole\n  thunar-volman\n  xfce4-session\n  xfwm4\n  xfce4-desktop\n  xfce4-power-manager\n  xfce4-appfinder\n  xfce4-notifyd\n  thunar\n  xfce4-screensaver\n  xsettings\n  xfce4-keyboard-shortcuts\n  displays\n  xfce4-panel<\/code><\/pre>\n<p>Ist der Kanal bektannt, kann man sich seine enthaltenen Eigenschaften auflisten. <\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ xfconf-query -c xfwm4 -l\n\/general\/activate_action\n\/general\/borderless_maximize\n\/general\/box_move\n\/general\/box_resize\n...<\/code><\/pre>\n<p>Hier kann man mit <strong>grep<\/strong> bereits f\u00fcndig werden. Alternativ kann man auch \u00fcber die GUI die jeweilige Einstellung setzen und zuvor mit dem -m Schalter beobachten, was <strong>xfconf-query<\/strong> in den Channel schreibt. Im folgenden Beispiel \u00fcberwachen wir den Channel <strong>xsettings<\/strong> und \u00e4ndern nach dem Ausf\u00fchren des Befehles das Design \u00fcber die GUI. Anschlie\u00dfend sollten wir die \u00c4nderung auf der Konsole sehen:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ xfconf-query -c xsettings -m -v\n\u00dcberwachung von Kanal \u00bbxsettings\u00ab wird gestartet:\n\neinstellen: \/Net\/ThemeName (Numix)\neinstellen: \/Net\/ThemeName (Raleigh)<\/code><\/pre>\n<p>So praktisch dies mit bekanntem Channel auch ist &#8211; Leider existiert keine M\u00f6glichkeit <em>alle<\/em> Channeln zu \u00fcberwachen. Ich habe mir daher ein kleines Bash-Snippet erstellt, um alle Channels nach einem bestimmten Bezeichner durchsuchen zu k\u00f6nnen. Folgendes Beispiel sucht sowohl in den Bezeichnern als auch in den Werten nach <em>theme<\/em>:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"\" data-line=\"\">$ for channel in $(xfconf-query -l | sed 1,1d); do echo $channel; xfconf-query -c $channel -l -v | grep -i theme; echo; done\n...\nxsettings\n\/Gtk\/CursorThemeName            Human\n\/Gtk\/CursorThemeSize            24\n\/Gtk\/KeyThemeName               \n\/Net\/FallbackIconTheme          gnome\n\/Net\/IconThemeName              elementary-xfce-darker\n\/Net\/SoundThemeName             default\n\/Net\/ThemeName                  Raleigh<\/code><\/pre>\n<p>Der Name des aktiven Oberfl\u00e4che-Designs ist demnach in <strong>\/Net\/ThemeName<\/strong> festgelegt. Erg\u00e4nzend zu obigem Einzeiler gibt es noch ein etwas gr\u00f6\u00dferes Skript, dass die Channels filtert. Der Channelname wird hier nur ausgegeben, wenn in ihm mindestens ein Match im Grep-Ausdruck vorhanden ist:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">#!\/bin\/bash\nfor channel in $(xfconf-query -l | sed 1,1d); do \n\tgrepResult=$(xfconf-query -c $channel -l -v | grep -i theme)\n\t\n\tif [ $? -eq 0 ]; then\n\t\techo -e &quot;${channel}\\n${grepResult}\\n&quot;\n\tfi\ndone\n<\/code><\/pre>\n<h2 class=\"wp-block-heading\">Wert einer Eigenschaft setzen<\/h2>\n<p>M\u00f6chten wir einen Wert \u00e4ndern, kann dies mit dem -p Schalter umgesetzt werden. In diesem Beispiel soll das Design auf Numix ge\u00e4ndert werden. <\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\" data-line=\"\">$ xfconf-query -c xsettings -p &quot;\/Net\/ThemeName&quot; -s Numix<\/code><\/pre>\n<p>Das aktive Design wird in Echtzeit ge\u00e4ndert und ist damit sofort aktiv. Dies sieht man auch in den grafischen Einstellungen:<\/p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/u-img.net\/img\/2633Qb.png\" alt=\"\"\/><\/figure>\n<h2 class=\"wp-block-heading\">Eigenschaften mit Ansible setzen<\/h2>\n<p>Seit Version 2.8 bietet Ansible das <strong>xfconf<\/strong> Modul an. Somit k\u00f6nnen die o.g. \u00c4nderungen einheitlich \u00fcber das Modul gesetzt werden, ohne manuelle Shell-Befehle ausf\u00fchren zu m\u00fcssen. Beispielhaft setzen wir das Design in folgendem Beispiel-Playbook:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-yaml\" data-line=\"\">- name: Xfce customizations\n  hosts: all\n  vars:\n  tasks:\n    - name: Set active xfce theme\n      xfconf:\n        channel: &quot;xsettings&quot;\n        property: &quot;\/Net\/ThemeName&quot;\n        value_type: &quot;string&quot;\n        value: &quot;Numix&quot;<\/code><\/pre>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"\" data-line=\"\">$ ansible-playbook -i localhost, --user daniel dani-chromebook.yml \n\nPLAY [Xfce customizations] ********************************************************************************************************************************************************************************************************************************************************\n\nTASK [Gathering Facts] *********************************************************************************************************************************************************************************************************************************************************\nok: [localhost]\n\nTASK [Set active xfce theme] ***************************************************************************************************************************************************************************************************************************************************\nchanged: [localhost]\n\nPLAY RECAP *********************************************************************************************************************************************************************************************************************************************************************\nlocalhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Auch die leichtgewichtige Desktopumgebung Xfce4 bietet einige M\u00f6glichkeiten zur pers\u00f6nlichen Anpassung. Neben verschiedenen Einstellungen fallen darunter beispielsweise Designs oder Iconpacks, um das standardm\u00e4\u00dfig eher rudiment\u00e4re Aussehen anzupassen. Dies f\u00fcr ein Zweit- oder Testger\u00e4t immer wieder aufs neue durchzuf\u00fchren ist nervig und kostet Zeit. Es bietet sich daher durchaus an, hier den Infrastructure as Code Ansatz &#8230;<\/p>\n","protected":false},"author":5,"featured_media":6509,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[74],"tags":[777,776],"class_list":["post-6499","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","tag-automatisierung","tag-xfce"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/6499","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=6499"}],"version-history":[{"count":10,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/6499\/revisions"}],"predecessor-version":[{"id":6510,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/6499\/revisions\/6510"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/6509"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=6499"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=6499"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=6499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}