diff --git a/family/how-to/htpc-system.md b/family/how-to/htpc-system.md index b2189112..1cfab854 100755 --- a/family/how-to/htpc-system.md +++ b/family/how-to/htpc-system.md @@ -128,13 +128,15 @@ Sleep управляется `htpc-sleep-guard` — Python-скрипт + system | `htpc-sleep-guard` | **active/enabled** | актуальный guard (SSH + торренты + rsync-файл) | | `transmission-sleep-guard` | disabled | старый, отключён (дублировал и держал ингибитор постоянно) | -### Редизайн guard — nudge вместо ингибитора (план 2026-10-11) +### Редизайн guard — nudge вместо ингибитора (задеплоен 2026-10-11 14:51) -**Инцидент 2026-10-11 14:10:** guard (правка 08.10 в рамках virfield) сам вызвал suspend через 30 мин после отпускания удержания — во время игровой сессии. Игровая активность в условиях guard не проверяется (только SSH/торренты/rsync-файл/чужие block-ингибиторы, которых gamescope не ставит). +**Инцидент 2026-10-11 14:10:** guard (правка 08.10 в рамках virfield) сам вызвал suspend через 30 мин после отпускания удержания — во время игровой сессии. Игровая активность в условиях guard не проверялась (SSH/торренты/rsync-файл/чужие block-ингибиторы, которых gamescope не ставит). -**Новый дизайн:** Steam (`-steamdeck`, gamescope) — единственный инициатор сна, его idle-таймер нативно уважает геймпад/игру (доказано 28.05 и инцидентом — за 1ч игры Steam не усыпил). Guard больше НЕ ставит systemd-inhibit и НЕ вызывает suspend. Пока выполняются условия удержания (SSH-сессия / дневные торренты+cooldown / `/tmp/rsync-active`) — guard каждые 60 с шлёт синтетический input (`xdotool key F13` на дисплей gamescope-сессии), сбрасывая idle-таймер Steam. Условия кончились → nudge прекращён → Steam сам усыпляет по своему таймауту. Ночь (23–11): без nudge даже с торрентами + RTC-wake 11:00 (как раньше). +**Дизайн (активен):** Steam (`-steamdeck`, gamescope) — единственный инициатор сна; его idle-таймер нативно уважает геймпад/игру. Guard НЕ ставит systemd-inhibit и НЕ вызывает suspend. Пока выполняются условия удержания (SSH-сессия / дневные торренты+15-мин cooldown / `/tmp/rsync-active`) — guard каждые 60 с шлёт nudge: `xdotool mousemove_relative ±1px` на дисплей сессии (Steam PID → DISPLAY/XAUTHORITY; канал XTest в Xwayland — тот же, что у magic4pc, доказано), fallback — `key F13`. Условия кончились → nudge прекращается → Steam сам усыпляет по своему таймауту. Ночь (23–11): без nudge даже с торрентами + RTC-wake 11:00 (NOPASSWD rtcwake на месте). -**Риски:** Steam-таймер может не смотреть X-keyboard → fallback uinput-геймпад; Sleep After=Never → таймер не выстрелит (проверить конфиг); XTest в gamescope-сессии (проверить живьём). +**Живой запуск 14:51:09:** `started (nudge design)` → `[nudge] start: Active SSH session` → `[nudge] xdotool OK`; ингибиторов guard не ставит. Бэкап: `~/htpc-sleep-guard.py.bak-20261011` (предыдущая версия — `.bak-20261008`). + +**Питфолы:** Xwayland в gamescope не поддерживает MIT-SCREEN-SAVER — X-idle замерить нельзя (всегда 0), проверка только поведенческая (машина не спит при nudge); ctypes-XSSI без restype=c_void_p сегфолтит. ### Логика guard (до 2026-10-11, заменяется)