fix(server): stabilize HDMI connector detection
This commit is contained in:
parent
1525d3f888
commit
f2d3a13f23
@ -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"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user