#!/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"