fix: rewrite cmd_diagnose to use script upload instead of nested SSH quoting

This commit is contained in:
NeilClack
2026-07-10 16:02:02 -05:00
parent b88caa291d
commit 313db8ccd1
+56 -27
View File
@@ -301,42 +301,71 @@ cmd_diagnose() {
log "Connecting to VM..." log "Connecting to VM..."
# System services # Build and run a diagnostic script on the server (avoids nested quoting issues)
echo -e "\n${BOLD}── System Services ──${NC}" local diag_script
vm_ssh "systemctl list-units --type=service --state=running --no-pager | grep -E 'NetworkManager|sshd|seatd|getty|cage|systemd-logind' || true" 2>/dev/null || warn "Could not query system services" diag_script="$(mktemp)"
cat > "$diag_script" << 'DIAGEOF'
#!/usr/bin/env bash
set -uo pipefail
# User services (PipeWire stack) run_in_vm() {
echo -e "\n${BOLD}── User Services (PipeWire) ──${NC}" sshpass -p kiosk ssh \
vm_ssh "systemctl --user list-units --type=service --state=running --no-pager 2>/dev/null | grep -E 'pipewire|wireplumber|pulse' || echo 'No user services running'" 2>/dev/null || warn "Could not query user services" -o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
-o ConnectTimeout=5 \
-p 2222 kiosk@localhost "$@"
}
# Audio devices via wpctl echo "── System Services ──"
echo -e "\n${BOLD}── PipeWire Devices (wpctl status) ──${NC}" run_in_vm systemctl list-units --type=service --state=running --no-pager | \
vm_ssh "wpctl status 2>/dev/null || echo 'wpctl not available'" 2>/dev/null || warn "Could not query wpctl" grep -E 'NetworkManager|sshd|seatd|getty|cage|systemd-logind' || true
# ALSA devices echo ""
echo -e "\n${BOLD}── ALSA Devices (aplay -l) ──${NC}" echo "── User Services (PipeWire) ──"
vm_ssh "aplay -l 2>/dev/null || echo 'No ALSA devices'" 2>/dev/null || warn "Could not query ALSA" run_in_vm systemctl --user list-units --type=service --state=running --no-pager | \
grep -E 'pipewire|wireplumber|pulse' || echo "No user services running"
# PulseAudio sinks echo ""
echo -e "\n${BOLD}── PulseAudio Sinks (pactl) ──${NC}" echo "── PipeWire Devices (wpctl status) ──"
vm_ssh "pactl list sinks short 2>/dev/null || echo 'pactl not available'" 2>/dev/null || warn "Could not query PulseAudio" run_in_vm wpctl status 2>/dev/null || echo "wpctl not available"
# Network devices echo ""
echo -e "\n${BOLD}── Network Devices ──${NC}" echo "── ALSA Devices (aplay -l) ──"
vm_ssh "nmcli device status 2>/dev/null || echo 'nmcli not available'" 2>/dev/null || warn "Could not query network" run_in_vm aplay -l 2>/dev/null || echo "No ALSA devices"
# Running processes echo ""
echo -e "\n${BOLD}── Key Processes ──${NC}" echo "── PulseAudio Sinks (pactl) ──"
vm_ssh "ps aux | grep -E 'rhemawave|cage|pipewire|wireplumber|NetworkManager' | grep -v grep || echo 'No matching processes'" 2>/dev/null || warn "Could not query processes" run_in_vm pactl list sinks short 2>/dev/null || echo "pactl not available"
# Kiosk session echo ""
echo -e "\n${BOLD}── Login Sessions ──${NC}" echo "── Network Devices ──"
vm_ssh "loginctl list-sessions --no-pager 2>/dev/null || echo 'loginctl not available'" 2>/dev/null || warn "Could not query sessions" run_in_vm nmcli device status 2>/dev/null || echo "nmcli not available"
# App log (last 30 lines) echo ""
echo -e "\n${BOLD}── App Log (/tmp/kiosk.log, last 30 lines) ──${NC}" echo "── Key Processes ──"
vm_ssh "tail -30 /tmp/kiosk.log 2>/dev/null || echo 'No log file yet'" 2>/dev/null || warn "Could not read app log" run_in_vm ps aux | \
grep -E 'rhemawave|cage|pipewire|wireplumber|NetworkManager' | \
grep -v grep || echo "No matching processes"
echo ""
echo "── Login Sessions ──"
run_in_vm loginctl list-sessions --no-pager 2>/dev/null || echo "loginctl not available"
echo ""
echo "── App Log (last 30 lines) ──"
run_in_vm tail -30 /tmp/kiosk.log 2>/dev/null || echo "No log file yet"
DIAGEOF
if [[ "$PLATFORM" == "linux" ]]; then
bash "$diag_script"
else
# Upload and run on remote server
local remote_diag="/tmp/radiantwave-diagnose-$$.sh"
scp -q "$diag_script" "$REMOTE:$remote_diag"
ssh "$REMOTE" "nix-shell -p sshpass --run 'bash $remote_diag'; rm -f $remote_diag"
fi
rm -f "$diag_script"
hr hr
} }