clawdie-iso/live/operator-session/clawdie-xfce-visuals-guard.sh

87 lines
2.9 KiB
Bash
Executable file

#!/bin/sh
# Best-effort live-session visual guard for XFCE.
#
# XFCE may create monitor-specific desktop keys only after xfdesktop starts, and
# some panel plugins are stricter about themed icon names than absolute paths.
# Re-assert the operator USB visual contract after login without failing the
# session if a component is missing.
LOG="${HOME}/.clawdie-xfce-visuals-guard.log"
WALLPAPER="/usr/local/share/clawdie-iso/wallpapers/clawdie-operator-bg.png"
START_ICON="clawdie-start"
log() {
printf '%s %s\n' "$(date -u '+%Y-%m-%dT%H:%M:%SZ')" "$*" >>"$LOG" 2>/dev/null || true
}
set_xfconf() {
_channel="$1"
_property="$2"
_type="$3"
_value="$4"
command -v xfconf-query >/dev/null 2>&1 || return 0
xfconf-query -c "$_channel" -p "$_property" -s "$_value" >/dev/null 2>&1 || \
xfconf-query -c "$_channel" -p "$_property" -n -t "$_type" -s "$_value" >/dev/null 2>&1 || true
}
apply_theme() {
set_xfconf xsettings /Net/ThemeName string Greybird
set_xfconf xsettings /Net/IconThemeName string Papirus
set_xfconf xsettings /Net/CursorTheme string DMZ-White
set_xfconf xsettings /Net/CursorSize int 24
set_xfconf xsettings /Gtk/FontName string "Noto Sans 11"
set_xfconf xsettings /Gtk/MonospaceFontName string "Hack 11"
}
apply_panel() {
set_xfconf xfce4-panel /plugins/plugin-1/button-icon string "$START_ICON"
set_xfconf xfce4-panel /plugins/plugin-1/show-button-icon bool true
set_xfconf xfce4-panel /plugins/plugin-1/show-button-title bool true
set_xfconf xfce4-panel /panels/panel-1/size uint 40
set_xfconf xfce4-panel /panels/panel-1/icon-size uint 2
set_xfconf xfce4-panel /plugins/plugin-8/square-icons bool true
}
apply_wallpaper() {
[ -f "$WALLPAPER" ] || {
log "wallpaper missing: $WALLPAPER"
return 0
}
command -v xfconf-query >/dev/null 2>&1 || return 0
_bases="$(xfconf-query -c xfce4-desktop -l 2>/dev/null | awk '/\/last-image$/ { sub(/\/last-image$/, ""); print }')"
if [ -z "$_bases" ]; then
_bases='/backdrop/screen0/monitor0/workspace0
/backdrop/screen0/monitorDefault/workspace0'
fi
printf '%s\n' "$_bases" | while IFS= read -r _base; do
[ -n "$_base" ] || continue
set_xfconf xfce4-desktop "${_base}/last-image" string "$WALLPAPER"
set_xfconf xfce4-desktop "${_base}/image-path" string "$WALLPAPER"
set_xfconf xfce4-desktop "${_base}/image-style" int 5
set_xfconf xfce4-desktop "${_base}/image-show" bool true
set_xfconf xfce4-desktop "${_base}/color-style" int 0
done
if command -v xfdesktop >/dev/null 2>&1; then
xfdesktop --reload >/dev/null 2>&1 || true
fi
}
run_once() {
log "applying XFCE visual guard"
apply_theme
apply_panel
apply_wallpaper
}
# Run more than once because xfdesktop/panel may create monitor/plugin state
# after XDG autostart begins.
sleep 3
run_once
sleep 7
run_once
sleep 15
run_once