Add direct live xfconf follow-up evidence, keep the themed Start icon fix path documented, and omit the default xfce4-mixer panel plugin because it auto-pinned HDMI on AMD despite the internal speaker being the FreeBSD default.\n\nChecks: sh -n build.sh live/operator-session/clawdie-xfce-visuals-guard.sh live/operator-session/hw-report; ./scripts/check-format.sh; git diff --check.
87 lines
2.9 KiB
Bash
Executable file
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
|