fix(kiosk): track /etc/asound.conf in image-recipe and sync it on deploy

Routes ALSA's "default" device through PulseAudio/PipeWire. Was a manual,
untracked fix living only on archy-x250-exp — a reprovision or fresh image
would silently lose it, same failure mode that already bit the GPU-flags
and CPUQuota fixes. Wired into deploy-to-target.sh (both the primary --live
path and the .198/.253 secondary-copy path) and deploy-tailscale.sh, mirroring
the existing 99-mesh-radio.rules udev sync pattern (diff-check, copy if changed).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
ssmithx 2026-07-01 20:25:34 +00:00
parent e559ccb767
commit 9b6ec0be97
3 changed files with 56 additions and 0 deletions

View File

@ -0,0 +1,7 @@
pcm.!default {
type pulse
hint.description "Default ALSA Device (via PulseAudio)"
}
ctl.!default {
type pulse
}

View File

@ -425,6 +425,22 @@ deploy_node() {
' 2>/dev/null || true ' 2>/dev/null || true
fi fi
# ── Deploy ALSA default-device config ────────────────────────────
ASOUND_CONF="$PROJECT_DIR/image-recipe/configs/asound.conf"
if [ -f "$ASOUND_CONF" ]; then
step "Deploying ALSA default-device config"
scp $SSH_OPTS "$ASOUND_CONF" "$TARGET:/tmp/asound.conf" 2>/dev/null || true
ssh $SSH_OPTS "$TARGET" '
if ! diff -q /tmp/asound.conf /etc/asound.conf >/dev/null 2>&1; then
sudo cp /tmp/asound.conf /etc/asound.conf
echo " Installed"
else
echo " Unchanged"
fi
rm -f /tmp/asound.conf
' 2>/dev/null || true
fi
# ── Step 18: NTP + swap ────────────────────────────────────────── # ── Step 18: NTP + swap ──────────────────────────────────────────
step "Ensuring NTP + swap" step "Ensuring NTP + swap"
ssh $SSH_OPTS "$TARGET" ' ssh $SSH_OPTS "$TARGET" '

View File

@ -456,6 +456,22 @@ deploy_secondary() {
' 2>/dev/null || true ' 2>/dev/null || true
fi fi
# Deploy ALSA default-device config (routes ALSA "default" through PulseAudio/PipeWire)
ASOUND_CONF="$PROJECT_DIR/image-recipe/configs/asound.conf"
if [ -f "$ASOUND_CONF" ]; then
echo " Syncing ALSA default-device config to .$SEC_LABEL..."
scp $SSH_OPTS "$ASOUND_CONF" "$SEC_TARGET:/tmp/asound.conf" 2>/dev/null || true
ssh $SSH_OPTS "$SEC_TARGET" '
if ! diff -q /tmp/asound.conf /etc/asound.conf >/dev/null 2>&1; then
sudo cp /tmp/asound.conf /etc/asound.conf
echo " ALSA default-device config installed"
else
echo " ALSA default-device config unchanged"
fi
rm -f /tmp/asound.conf
' 2>/dev/null || true
fi
# Dev mode + FileBrowser # Dev mode + FileBrowser
ssh $SSH_OPTS "$SEC_TARGET" ' ssh $SSH_OPTS "$SEC_TARGET" '
# Dev mode # Dev mode
@ -762,6 +778,23 @@ if [ "$LIVE" = true ]; then
' 2>/dev/null || true ' 2>/dev/null || true
fi fi
# Deploy ALSA default-device config (routes ALSA "default" through
# PulseAudio/PipeWire — without it Chromium's raw ALSA fallback can't
# reach the HDMI sink and kiosk HDMI audio is silent).
ASOUND_CONF="$PROJECT_DIR/image-recipe/configs/asound.conf"
if [ -f "$ASOUND_CONF" ]; then
scp $SSH_OPTS "$ASOUND_CONF" "$TARGET_HOST:/tmp/asound.conf" 2>/dev/null || true
ssh $SSH_OPTS "$TARGET_HOST" '
if ! diff -q /tmp/asound.conf /etc/asound.conf >/dev/null 2>&1; then
sudo cp /tmp/asound.conf /etc/asound.conf
echo " ALSA default-device config installed"
else
echo " ALSA default-device config unchanged"
fi
rm -f /tmp/asound.conf
' 2>/dev/null || true
fi
# Deploy Claude API proxy (auto-install if missing) # Deploy Claude API proxy (auto-install if missing)
progress "Setting up Claude API proxy" progress "Setting up Claude API proxy"
ssh $SSH_OPTS "$TARGET_HOST" ' ssh $SSH_OPTS "$TARGET_HOST" '