Harden HDMI recovery and add tested user installer release tooling
This commit is contained in:
1 parent
73e727ef4c
commit
d963224cb7
17 files changed
+903
-646
No files matched your search
+53
-103
@@ -1,139 +1,89 @@
|
||||
# Troubleshooting
|
||||
|
||||
## Check the Hyprland output name
|
||||
|
||||
```bash
|
||||
hyprctl monitors
|
||||
```
|
||||
|
||||
Update:
|
||||
|
||||
```text
|
||||
~/.config/revive-monitor/config.env
|
||||
```
|
||||
|
||||
if the output is not `HDMI-A-2`.
|
||||
|
||||
## Check the user service
|
||||
## Status and logs
|
||||
|
||||
```bash
|
||||
systemctl --user status revive-monitor-drm-watch.service
|
||||
journalctl --user -u revive-monitor-drm-watch.service -b -f
|
||||
```
|
||||
|
||||
## Follow logs
|
||||
Both scripts write to stderr; systemd captures their messages in the unit journal.
|
||||
Direct manual runs write to the terminal. There is no separate logger/syslog tag.
|
||||
|
||||
```bash
|
||||
journalctl --user -u revive-monitor-drm-watch.service -f
|
||||
```
|
||||
## Missing Hyprland instance / IPC failure
|
||||
|
||||
For the recovery script tag:
|
||||
From a Hyprland terminal, run `./scripts/install.sh --start` and add the startup
|
||||
hook from README so each new login updates `HYPRLAND_INSTANCE_SIGNATURE`.
|
||||
`hyprctl monitors` must list the output configured in `config.env`. A stale
|
||||
signature, failed IPC call or absent output aborts recovery without switching VTs.
|
||||
|
||||
```bash
|
||||
journalctl --user -t revive-monitor-fix -f
|
||||
```
|
||||
## No recovery after switching inputs
|
||||
|
||||
## Verify DRM hotplug events manually
|
||||
Observe events without starting another watcher:
|
||||
|
||||
```bash
|
||||
udevadm monitor --kernel --property --subsystem-match=drm
|
||||
```
|
||||
|
||||
Switch the physical monitor input away and back. Look for:
|
||||
|
||||
```text
|
||||
HOTPLUG=1
|
||||
```
|
||||
|
||||
If no DRM hotplug event is emitted, this project has no reliable event to trigger from.
|
||||
|
||||
## Verify the active Wayland session
|
||||
Look for `HOTPLUG=1`. Then inspect the session:
|
||||
|
||||
```bash
|
||||
loginctl list-sessions
|
||||
loginctl show-session SESSION_ID -p User -p Type -p Active -p Seat -p VTNr -p Desktop
|
||||
```
|
||||
|
||||
Then:
|
||||
Expected: your numeric UID, `Type=wayland`, `Active=yes`, `Seat=seat0`, a VT from
|
||||
1 to 63, and either a Hyprland desktop or an empty Desktop property. The helper
|
||||
also checks these properties when invoked manually.
|
||||
|
||||
## Invalid runtime directory
|
||||
|
||||
`XDG_RUNTIME_DIR` must be your login-managed, user-owned directory with mode 0700
|
||||
(normally `/run/user/UID`). Do not set it to `/tmp` or run the service with sudo.
|
||||
The systemd unit sets it from `%t`.
|
||||
|
||||
## sudo / VT return failures
|
||||
|
||||
Use `visudo` to verify the explicit VT permissions. Check authorization without
|
||||
switching the display (replace the VTs to match your session):
|
||||
|
||||
```bash
|
||||
for s in $(loginctl list-sessions --no-legend | awk '{print $1}'); do
|
||||
echo "=== Session $s ==="
|
||||
loginctl show-session "$s" -p Name -p Type -p Active -p VTNr
|
||||
done
|
||||
sudo -n -l /usr/bin/chvt 2
|
||||
sudo -n -l /usr/bin/chvt 1
|
||||
```
|
||||
|
||||
A normal Hyprland session should look similar to:
|
||||
A denied return permission aborts before the outward switch. Actual chvt errors
|
||||
are still possible; a return failure is retried once and logged. A failed emergency
|
||||
return requires manually returning to the graphical VT, e.g. Ctrl+Alt+F1 for VT1.
|
||||
|
||||
```text
|
||||
Name=your-user
|
||||
VTNr=1
|
||||
Type=wayland
|
||||
Active=yes
|
||||
```
|
||||
## Debounce hides a rapid return / repeated recoveries
|
||||
|
||||
## Display manager appears only after manually switching TTY
|
||||
`DEBOUNCE_SECONDS` is a cooldown after each attempt, not an event queue. A genuine
|
||||
rapid return can be ignored along with duplicate and self-generated events.
|
||||
Reduce the interval if needed; increasing it can help noisy hardware. Setting it
|
||||
to zero disables cooldown and can cause a recovery loop on some GPUs.
|
||||
|
||||
Check the boot journal:
|
||||
## Manual recovery
|
||||
|
||||
From a terminal inside the active Hyprland session, pass its actual VT number:
|
||||
|
||||
```bash
|
||||
journalctl -b --no-pager | grep -E 'revive-monitor|COMMAND=/usr/bin/chvt|chvt'
|
||||
~/.local/bin/revive-monitor-fix 1
|
||||
```
|
||||
|
||||
If `chvt` runs before login, verify that you installed the current watcher script. It must ignore hotplug events when there is no active Wayland session.
|
||||
This will visibly switch VTs. If the monitor needs more handshake time, increase
|
||||
`HDMI_SETTLE_SECONDS` (default 5). Manual recovery still needs valid IPC, the
|
||||
configured output, a private runtime directory and sudo permission.
|
||||
|
||||
Expected pre-login behavior:
|
||||
## Updating / uninstalling
|
||||
|
||||
```text
|
||||
No active Wayland session - DRM hotplug ignored
|
||||
```
|
||||
Updates preserve `config.env`. Run `./scripts/install.sh --start` inside Hyprland
|
||||
to restart with the new scripts. Plain `install.sh` leaves the service stopped.
|
||||
For uninstall, the systemd user manager must be reachable. Remove the startup
|
||||
hook manually as documented in README.
|
||||
|
||||
## sudo / chvt fails
|
||||
## Hardware acceptance
|
||||
|
||||
Test non-interactively:
|
||||
|
||||
```bash
|
||||
sudo -n /usr/bin/chvt 2
|
||||
```
|
||||
|
||||
If sudo asks for a password or exits with an error, verify:
|
||||
|
||||
```text
|
||||
/etc/sudoers.d/revive-monitor-chvt
|
||||
```
|
||||
|
||||
Always edit sudoers files with `visudo`.
|
||||
|
||||
## Recovery runs multiple times
|
||||
|
||||
Increase:
|
||||
|
||||
```bash
|
||||
DEBOUNCE_SECONDS=30
|
||||
```
|
||||
|
||||
in:
|
||||
|
||||
```text
|
||||
~/.config/revive-monitor/config.env
|
||||
```
|
||||
|
||||
For noisy hardware, `60` may be more appropriate.
|
||||
|
||||
## Recovery runs but the monitor still stays black
|
||||
|
||||
Increase:
|
||||
|
||||
```bash
|
||||
HDMI_SETTLE_SECONDS=5
|
||||
```
|
||||
|
||||
to `7` or `10` and test again.
|
||||
|
||||
Also manually verify that a VT switch actually restores the image:
|
||||
|
||||
```bash
|
||||
sudo chvt 2
|
||||
sleep 1
|
||||
sudo chvt 1
|
||||
```
|
||||
|
||||
Adjust the numbers to match the machine's graphical VT.
|
||||
After installation, check a normal input change, a rapid away/back change and a
|
||||
logout/login cycle. Before Hyprland login there must be no chvt invocation from
|
||||
this service. Automated tests use mocks and do not replace this hardware check.
|
||||
Reference in new issue
Block a user