From 5a0a00ff66f177907bdb6e4621a1908c69a9fbe8 Mon Sep 17 00:00:00 2001 From: Sam & Claude Date: Sat, 20 Jun 2026 12:26:20 +0200 Subject: [PATCH] fix(iso-visuals): wallpaper-on-join honors tmp policy + applies on real hardware MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow-up to #74. Two concrete fixes to the "identity wallpaper on join" step: 1. tmp policy: the join script hardcoded WP=/tmp/clawdie-wallpaper.png, passing it to clawdie-wallpaper-gen and overriding the safe SCRATCH_DIR default that 9ae8d25 had just introduced (project-local tmp/ or app-owned cache). The generator now prints its chosen path on stdout (human note → stderr) and the join script captures it: WP=$(clawdie-wallpaper-gen). No host-global /tmp. 2. wallpaper actually applies: replaced the hardcoded /backdrop/screen0/monitor0/workspace0/last-image with an enumeration over every existing */last-image property (XFCE keys backdrops by connector name, e.g. monitorHDMI-1, not monitor0), falling back to creating the default property on first boot/headless, then xfdesktop --reload. SKILL.md updated to document the stdout contract and multi-monitor wiring. Validation: sh -n on both scripts; prettier@3 --check SKILL.md; python3 scripts/layered_soul.py validate . — all pass. Co-Authored-By: Claude Opus 4.8 --- skills/iso-visuals/SKILL.md | 21 +++++++++------- .../iso-visuals/scripts/clawdie-join-hive.sh | 24 +++++++++++++++---- .../scripts/clawdie-wallpaper-gen.sh | 5 +++- 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/skills/iso-visuals/SKILL.md b/skills/iso-visuals/SKILL.md index d79bf37..685de51 100644 --- a/skills/iso-visuals/SKILL.md +++ b/skills/iso-visuals/SKILL.md @@ -76,15 +76,16 @@ where there is usually no project root, it uses an app-owned cache directory suc `$XDG_CACHE_HOME/clawdie` or `$HOME/.cache/clawdie`. It should not try to create files under `/usr/local/share` at runtime unless explicitly requested by the operator. -**Optional runtime/session wiring:** +**Optional runtime/session wiring:** the helper prints the output path it chose on +stdout (human note goes to stderr), so callers capture it rather than guessing a +path. XFCE keys backdrops by connector name (`monitorHDMI-1`, `monitoreDP-1`, …), +not a fixed `monitor0`, so set every `*/last-image` property: ```bash -PROJECT_ROOT=$(git rev-parse --show-toplevel) -PROJECT_TMP="$PROJECT_ROOT/tmp" -mkdir -p "$PROJECT_TMP" -/usr/local/bin/clawdie-wallpaper-gen "$PROJECT_TMP/clawdie-wallpaper.png" -xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/last-image \ - -s "$PROJECT_TMP/clawdie-wallpaper.png" +WP=$(/usr/local/bin/clawdie-wallpaper-gen) +for p in $(xfconf-query -c xfce4-desktop -l | grep '/last-image$'); do + xfconf-query -c xfce4-desktop -p "$p" -s "$WP" +done ``` Requires ImageMagick (`ImageMagick7` in the ISO package list; `magick` or @@ -143,7 +144,8 @@ The launcher runs in `xfce4-terminal` with geometry 80x24 and pauses on idempotent success; - does not fail just because `/usr/local/etc/colibri/provider.env` is mode `0600`; - uses `mdo -u root` for privileged checks/start where available; -- on success, generates and applies the identity wallpaper as visual confirmation; +- on success, generates the identity wallpaper at the generator's chosen path (no + host-global `/tmp`) and applies it across all monitors as visual confirmation; - never prints Vaultwarden credentials or provider keys. ## Build integration (`clawdie-iso` `build.sh`) @@ -174,7 +176,8 @@ After booting the ISO: already registered, then waits for Enter. 4. **Wallpaper helper:** running `/usr/local/bin/clawdie-wallpaper-gen` writes an image under project-local `tmp/` when run from a checkout, or an app-owned live - cache directory when no project root exists, using the Clawdie wallpaper as base. + cache directory when no project root exists, using the Clawdie wallpaper as base, + and prints that path on stdout (the human `Wallpaper: …` note goes to stderr). 5. **Panel indicator helper:** running `/usr/local/bin/colibri-panel-indicator` prints genmon XML. Only claim panel visibility after genmon is packaged and wired into the seeded panel or configured manually. diff --git a/skills/iso-visuals/scripts/clawdie-join-hive.sh b/skills/iso-visuals/scripts/clawdie-join-hive.sh index 1d0984d..e5cf347 100755 --- a/skills/iso-visuals/scripts/clawdie-join-hive.sh +++ b/skills/iso-visuals/scripts/clawdie-join-hive.sh @@ -127,12 +127,26 @@ fi echo "[4/4] Agent ${AGENT_NAME} is live on the Colibri board." echo "" -if have clawdie-wallpaper-gen; then +if have clawdie-wallpaper-gen && have xfconf-query; then echo " Setting identity wallpaper..." - if have xfconf-query; then - WP="/tmp/clawdie-wallpaper.png" - clawdie-wallpaper-gen "$WP" 2>/dev/null && \ - xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/last-image -s "$WP" 2>/dev/null + # Let the generator pick a policy-compliant path (project-local tmp/ or an + # app-owned cache dir) and report it on stdout — no host-global /tmp here. + WP=$(clawdie-wallpaper-gen 2>/dev/null) + if [ -n "$WP" ] && [ -f "$WP" ]; then + # XFCE keys backdrops by connector name (monitorHDMI-1, monitoreDP-1, ...), + # not a fixed "monitor0". Set every existing last-image property so the + # change actually applies on real hardware. + _applied=0 + for _prop in $(xfconf-query -c xfce4-desktop -l 2>/dev/null | grep '/last-image$'); do + xfconf-query -c xfce4-desktop -p "$_prop" -s "$WP" 2>/dev/null && _applied=1 + done + # First boot / headless: no backdrop props exist yet — create the default. + if [ "$_applied" -eq 0 ]; then + xfconf-query -c xfce4-desktop \ + -p /backdrop/screen0/monitor0/workspace0/last-image \ + -n -t string -s "$WP" 2>/dev/null + fi + xfdesktop --reload >/dev/null 2>&1 || true fi fi diff --git a/skills/iso-visuals/scripts/clawdie-wallpaper-gen.sh b/skills/iso-visuals/scripts/clawdie-wallpaper-gen.sh index 9069d71..eb45c8e 100755 --- a/skills/iso-visuals/scripts/clawdie-wallpaper-gen.sh +++ b/skills/iso-visuals/scripts/clawdie-wallpaper-gen.sh @@ -85,4 +85,7 @@ if ! im "$BG" \ cp "$BG" "$OUT" fi -echo "Wallpaper: ${OUT}" +# stdout is the bare output path (machine-readable for callers that capture it, +# e.g. `WP=$(clawdie-wallpaper-gen)`); human-facing note goes to stderr. +echo "Wallpaper: ${OUT}" >&2 +printf '%s\n' "$OUT"