Skip to content
Henryk Paluch edited this page Sep 14, 2024 · 1 revision

XFCE

XFCE is my favorite GUI for Unix. I use it where possible.

Homepage: https://docs.xfce.org/start

Using CLI

There is CLI tool xfconf-query (see https://docs.xfce.org/xfce/xfconf/xfconf-query).

Listing examples are for customized XFCE on openSUSE LEAP 15.6

Top level world is made from channels they can be listed with:

$ xfconf-query -l

Channels:
  displays
  keyboard-layout
  keyboards
  parole
  ristretto
  thunar
  thunar-volman
  xfce4-appfinder
  xfce4-desktop
  xfce4-keyboard-shortcuts
  xfce4-mime-settings
  xfce4-notifyd
  xfce4-panel
  xfce4-power-manager
  xfce4-screensaver
  xfce4-session
  xfce4-settings-editor
  xfce4-settings-manager
  xfce4-terminal
  xfwm4
  xsettings

What we see is basically stored under ~/.config/xfce4/xfconf/xfce-perchannel-xml/ as CHANNEL.xml.

We can specify channel with -c and then list its properties with -l. Both taskbar and Dash is called "xfce4-panel":

$ xfconf-query -c xfce4-panel -l

/configver
/panels
/panels/panel-1/length
/panels/panel-1/length-adjust
/panels/panel-1/plugin-ids
/panels/panel-1/position
/panels/panel-1/position-locked
/panels/panel-1/size
/plugins/plugin-1
/plugins/plugin-10
/plugins/plugin-10/digital-format
/plugins/plugin-10/digital-layout
/plugins/plugin-10/digital-time-format
/plugins/plugin-10/show-frame
/plugins/plugin-11
/plugins/plugin-11/style
/plugins/plugin-12
/plugins/plugin-12/items
/plugins/plugin-13
/plugins/plugin-13/items
/plugins/plugin-14
/plugins/plugin-15
/plugins/plugin-15/icon-size
/plugins/plugin-15/items
/plugins/plugin-15/menu-is-primary
/plugins/plugin-15/square-icons
/plugins/plugin-15/symbolic-icons
/plugins/plugin-16
/plugins/plugin-16/items
/plugins/plugin-17
/plugins/plugin-17/items
/plugins/plugin-18
/plugins/plugin-18/items
/plugins/plugin-19
/plugins/plugin-19/background
/plugins/plugin-19/bars
/plugins/plugin-19/border
/plugins/plugin-19/color-mode
/plugins/plugin-19/command
/plugins/plugin-19/foreground-1
/plugins/plugin-19/foreground-2
/plugins/plugin-19/foreground-3
/plugins/plugin-19/foreground-iowait
/plugins/plugin-19/foreground-nice
/plugins/plugin-19/foreground-system
/plugins/plugin-19/foreground-user
/plugins/plugin-19/frame
/plugins/plugin-19/in-terminal
/plugins/plugin-19/load-threshold
/plugins/plugin-19/mode
/plugins/plugin-19/per-core
/plugins/plugin-19/per-core-spacing
/plugins/plugin-19/size
/plugins/plugin-19/smt-issues
/plugins/plugin-19/smt-issues-color
/plugins/plugin-19/smt-stats
/plugins/plugin-19/startup-notification
/plugins/plugin-19/time-scale
/plugins/plugin-19/tracked-core
/plugins/plugin-19/update-interval
/plugins/plugin-1/command-switchuser
/plugins/plugin-1/favorites
/plugins/plugin-1/hover-switch-category
/plugins/plugin-1/launcher-show-description
/plugins/plugin-1/menu-height
/plugins/plugin-1/menu-width
/plugins/plugin-1/recent
/plugins/plugin-2
/plugins/plugin-20
/plugins/plugin-20/items
/plugins/plugin-21
/plugins/plugin-22
/plugins/plugin-22/items
/plugins/plugin-23
/plugins/plugin-23/items
/plugins/plugin-24
/plugins/plugin-24/items
/plugins/plugin-25
/plugins/plugin-25/items
/plugins/plugin-26
/plugins/plugin-27
/plugins/plugin-28
/plugins/plugin-28/items
/plugins/plugin-2/style
/plugins/plugin-3
/plugins/plugin-31
/plugins/plugin-31/items
/plugins/plugin-32
/plugins/plugin-32/items
/plugins/plugin-4
/plugins/plugin-4/flat-buttons
/plugins/plugin-4/grouping
/plugins/plugin-4/show-handle
/plugins/plugin-5
/plugins/plugin-5/expand
/plugins/plugin-5/style
/plugins/plugin-6
/plugins/plugin-6/enable-keyboard-shortcuts
/plugins/plugin-6/known-players
/plugins/plugin-6/mpris-players
/plugins/plugin-7
/plugins/plugin-7/icon-size
/plugins/plugin-7/known-items
/plugins/plugin-7/known-legacy-items
/plugins/plugin-7/names-ordered
/plugins/plugin-7/show-frame
/plugins/plugin-7/square-icons
/plugins/plugin-7/symbolic-icons
/plugins/plugin-8
/plugins/plugin-9
/plugins/plugin-9/style

In default setup there is:

  • panel-1 - Windows like taskbar (on many systems at the top of screen)
  • panel-2 - Dash (or Dock) with big icons - often on bottom of screen (on FreeBSD and Linux distributions other than SUSE)

To see position of taskbar we can try:

$ xfconf-query -c xfce4-panel -p /panels/panel-1/position

p=10;x=0;y=0

If p=6 taskbar is on top. If p=10, then taskbar is on bottom. Example how to set taskbar position to bottom:

$ xfconf-query -c xfce4-panel -p /panels/panel-1/position -s 'p=10;x=0;y=0'

It will have immediate effect - taskbar will jump to bottom.

Listing panel items

I wrote this clumsy script called list_panel_plugins.sh:

#!/bin/bash
set -euo pipefail

panel=panel-1

n=1
for id in `xfconf-query -c xfce4-panel -p /panels/$panel/plugin-ids | sed -n '2,$p'`
do
	[[ $id =~ ^[0-9]+$ ]] || continue
	printf "#%2d: %2d: " $n $id
	xfconf-query -c xfce4-panel -p /plugins/plugin-$id
	(( n = n + 1 ))
done
exit 0

Example output (1st number is just sequence, 2nd number is plugin-ID):

$ ./list_panel_plugins.sh 

# 1:  1: whiskermenu
# 2:  2: separator
# 3:  3: showdesktop
# 4: 32: launcher
# 5: 12: launcher
# 6: 17: launcher
# 7: 25: launcher
# 8: 16: launcher
# 9: 31: launcher
#10: 18: launcher
#11: 20: launcher
#12: 22: launcher
#13: 23: launcher
#14: 24: launcher
#15: 15: launcher
#16: 28: launcher
#17: 13: launcher
#18:  4: tasklist
#19:  5: separator
#20:  8: pager
#21:  6: pulseaudio
#22: 19: cpugraph
#23: 21: netload
#24: 27: diskperf
#25:  7: systray
#26:  9: separator
#27: 14: notification-plugin
#28: 26: cpufreq
#29: 10: clock
#30: 11: separator

Automation

Found this Application (included with SUSE as package xfce4-panel-profiles):

Should be able to Save or Load Layout.

However on fresh installation there is different mechanism:

// /usr/src/packages/BUILD/xfce4-panel-4.18.5/migrate/main.c
#define DEFAULT_CONFIG_FILENAME "xfce4" G_DIR_SEPARATOR_S "panel" G_DIR_SEPARATOR_S "default.xml"
#define DEFAULT_CONFIG_PATH     XDGCONFIGDIR G_DIR_SEPARATOR_S DEFAULT_CONFIG_FILENAME

In Makefile.am we can see:

AM_CPPFLAGS = \
        -I$(top_srcdir) \
        -DG_LOG_DOMAIN=\"xfce4-panel-migrate\" \
        -DPACKAGE_LOCALE_DIR=\"$(localedir)\" \
        -DXDGCONFIGDIR=\"$(sysconfdir)/xdg\" \
        $(PLATFORM_CPPFLAGS)
confdir = $(sysconfdir)/xdg/xfce4/panel
conf_DATA = \
        default.xml

Hmm, more and more confusing....

Save panel profile on FreeBSD

Installed this package:

doas pkg install xfce4-panel-profiles

But problem:

$ xfce4-panel-profiles --help

...

Traceback (most recent call last):
  File "/usr/local/share/xfce4-panel-profiles/xfce4-panel-profiles/xfce4-panel-profiles.py", line 44, in <module>
    from panelconfig import PanelConfig
  File "/usr/local/share/xfce4-panel-profiles/xfce4-panel-profiles/panelconfig.py", line 19, in <module>
    import psutil
ModuleNotFoundError: No module named 'psutil'

Resolved with:

doas pkg install py311-psutil

Official deps:

$ freebsd-version 

14.1-RELEASE-p4

$ pkg info -E xfce4-panel-profiles

xfce4-panel-profiles-1.0.14_2

$ pkg info -d xfce4-panel-profiles

xfce4-panel-profiles-1.0.14_2:
	libxfce4util-4.18.2
	libxfce4menu-4.18.6
	xfce4-panel-4.18.6
	pango-1.52.2_1
	gtk3-3.24.43
	harfbuzz-9.0.0
	python311-3.11.9
	gdk-pixbuf2-2.42.10_3
	cairo-1.17.4_2,3
	glib-2.80.5,2
	gettext-runtime-0.22.5
	at-spi2-core-2.52.0

Reported here: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=281484

Clone this wiki locally