fix(server): stabilize HDMI connector detection

This commit is contained in:
Brad Stein 2026-04-22 14:42:22 -03:00
parent 1525d3f888
commit f2d3a13f23

View File

@ -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"