Import initial Hyprland HDMI recovery implementation
This commit is contained in:
commit
73e727ef4c
19 files changed
+1041
No files matched your search
Executable
+77
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env bash
|
||||
set -u
|
||||
|
||||
LOGTAG="revive-monitor-fix"
|
||||
CONFIG_FILE="${XDG_CONFIG_HOME:-$HOME/.config}/revive-monitor/config.env"
|
||||
|
||||
# Defaults. Override in ~/.config/revive-monitor/config.env
|
||||
MONITOR="HDMI-A-2"
|
||||
HDMI_SETTLE_SECONDS="5"
|
||||
VT_SWITCH_DELAY_SECONDS="1"
|
||||
VT_RETURN_SETTLE_SECONDS="2"
|
||||
|
||||
if [[ -r "$CONFIG_FILE" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "$CONFIG_FILE"
|
||||
fi
|
||||
|
||||
GRAPHICAL_VT="${1:-}"
|
||||
STATE_DIR="${XDG_RUNTIME_DIR:-/tmp}/revive-monitor"
|
||||
LOCK_FILE="$STATE_DIR/fix.lock"
|
||||
|
||||
mkdir -p "$STATE_DIR"
|
||||
|
||||
log() {
|
||||
logger -t "$LOGTAG" -- "$*"
|
||||
}
|
||||
|
||||
run_quiet() {
|
||||
"$@" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
if ! [[ "$GRAPHICAL_VT" =~ ^[1-9][0-9]*$ ]]; then
|
||||
log "No valid graphical VT supplied - recovery aborted"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ "$GRAPHICAL_VT" -eq 1 ]]; then
|
||||
TEMP_VT=2
|
||||
else
|
||||
TEMP_VT=1
|
||||
fi
|
||||
|
||||
exec 9>"$LOCK_FILE"
|
||||
if ! flock -n 9; then
|
||||
log "Recovery already running - skipping"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
log "Recovery started for $MONITOR on VT $GRAPHICAL_VT"
|
||||
|
||||
sleep "$HDMI_SETTLE_SECONDS"
|
||||
|
||||
run_quiet hyprctl dispatch dpms on "$MONITOR"
|
||||
run_quiet hyprctl dispatch focusmonitor "$MONITOR"
|
||||
|
||||
sleep 1
|
||||
|
||||
log "VT refresh: $TEMP_VT -> $GRAPHICAL_VT"
|
||||
|
||||
if ! sudo -n /usr/bin/chvt "$TEMP_VT"; then
|
||||
log "Failed to switch to temporary VT $TEMP_VT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sleep "$VT_SWITCH_DELAY_SECONDS"
|
||||
|
||||
if ! sudo -n /usr/bin/chvt "$GRAPHICAL_VT"; then
|
||||
log "Failed to return to graphical VT $GRAPHICAL_VT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sleep "$VT_RETURN_SETTLE_SECONDS"
|
||||
|
||||
run_quiet hyprctl dispatch dpms on "$MONITOR"
|
||||
run_quiet hyprctl dispatch focusmonitor "$MONITOR"
|
||||
|
||||
log "Recovery completed for $MONITOR"
|
||||
Reference in new issue
Block a user