diff --git a/scripts/install/server.sh b/scripts/install/server.sh index b3ac2ab..cd23bd7 100755 --- a/scripts/install/server.sh +++ b/scripts/install/server.sh @@ -31,15 +31,35 @@ is_attached_state() { } detect_connected_hdmi_connector() { - local dev status best="" - for dev in /sys/class/drm/card*-HDMI-A-*; do - [[ -e $dev/status ]] || continue - status=$(cat "$dev/status" 2>/dev/null || true) - if [[ $status == connected ]]; then - best=$(basename "$dev") - break + local dev name status score suffix + local best="" best_score=0 best_suffix=0 + declare -A scores=() + + # HDMI status can briefly flap during gadget/display bring-up. Sample a few + # times and prefer the connector that stays connected; ties prefer HDMI-A-2, + # which is the dedicated downstream capture leg on the current Pi layout. + for _ in 1 2 3 4 5; do + for dev in /sys/class/drm/card*-HDMI-A-*; do + [[ -e $dev/status ]] || continue + name=$(basename "$dev") + status=$(cat "$dev/status" 2>/dev/null || true) + if [[ $status == connected ]]; then + scores[$name]=$(( ${scores[$name]:-0} + 1 )) + fi + done + sleep 0.2 + done + + for name in "${!scores[@]}"; do + score=${scores[$name]} + suffix=${name##*-} + if (( score > best_score || (score == best_score && suffix > best_suffix) )); then + best=$name + best_score=$score + best_suffix=$suffix fi done + printf '%s\n' "$best" } @@ -216,11 +236,11 @@ fi echo "# generated by lesavka/scripts/install/server.sh" echo "# Edit only for local hardware overrides; rerunning the installer refreshes defaults." if [[ -n $HDMI_CONNECTOR ]]; then - printf 'LESAVKA_HDMI_CONNECTOR=%q\n' "$HDMI_CONNECTOR" + printf 'LESAVKA_HDMI_CONNECTOR=%s\n' "$HDMI_CONNECTOR" fi - printf 'LESAVKA_HDMI_DRIVER=%q\n' "${LESAVKA_HDMI_DRIVER:-vc4}" - printf 'LESAVKA_UAC_DEV=%q\n' "${LESAVKA_UAC_DEV:-hw:UAC2Gadget,0}" - printf 'LESAVKA_ALSA_DEV=%q\n' "${LESAVKA_ALSA_DEV:-hw:UAC2Gadget,0}" + printf 'LESAVKA_HDMI_DRIVER=%s\n' "${LESAVKA_HDMI_DRIVER:-vc4}" + printf 'LESAVKA_UAC_DEV=%s\n' "${LESAVKA_UAC_DEV:-hw:UAC2Gadget,0}" + printf 'LESAVKA_ALSA_DEV=%s\n' "${LESAVKA_ALSA_DEV:-hw:UAC2Gadget,0}" } | sudo tee /etc/lesavka/server.env >/dev/null echo "==> 6a. Systemd units - lesavka-core"