fix(autostart): run from repo root + visible console at logon
autostart-run.bat did 'cd /d %~dp0' -> scripts/, but web-vnc.exe/webvnc.conf/ go.mod live in the repo root, so the binary was never found and web-vnc never started after reboot. Now it cd's to %~dp0.. (repo root). The task was ONSTART/RU SYSTEM (session 0) so it could not show a window, making failures invisible. install-autostart.bat now registers ONLOGON /RL HIGHEST as the current user -> a visible console opens at logon. autostart-run.bat sets a window title, prints status, stays open while web-vnc serves, and pauses on fatal errors (no binary / no webvnc.conf) so the reason is visible. Docs updated.
This commit is contained in:
@@ -63,14 +63,14 @@ internal/server/static встроенные ассеты (vnc.html, favicon.
|
||||
Все пользовательские точки входа лежат в корне репозитория:
|
||||
set-password.bat настройка пароля: спрашивает пароль, генерирует хэш и пишет webvnc.conf (HASH= + VNC_PASSWORD=, gitignored) — ДО синхронизации UltraVNC, чтобы веб-пароль был настроен даже если синк упадёт или UAC отменят; затем синхронизирует VNC-пароль UltraVNC (scripts/ensure-vnc-password.ps1). Если установлено задание «web-vnc» — перезапускает его через restart-autostart.bat (с elevation), чтобы живый gateway перезалил пароль; рестарт пропускается, только если пароль не изменился (PBKDF2-хэш всегда новый из-за соли, поэтому изменение детектится сравнением введённого пароля со старым VNC_PASSWORD из webvnc.conf). Саму проверку «запущен ли web-vnc.exe» делает restart-autostart.bat (elevated, надёжно видит SYSTEM-процесс).
|
||||
run.bat интерактивный запуск в один клик: собирает бинарник/noVNC/VNC, читает пароль из webvnc.conf (НЕ спрашивает — если файла нет, просит сначала запустить set-password.bat); если 5900 уже занят (сервис UltraVNC) — не порождает второй VNC-сервер, а подключается к существующему
|
||||
install-autostart.bat регистрирует плановое задание «web-vnc» (schtasks /SC ONSTART /RU SYSTEM /RL HIGHEST), запускающее scripts/autostart-run.bat при загрузке ОС; запускать от админа (самопрос elevation); требует уже созданный webvnc.conf.
|
||||
install-autostart.bat регистрирует плановое задание «web-vnc» (schtasks /SC ONLOGON /RL HIGHEST, от имени текущего пользователя) — открывает ВИДИМУЮ консоль с scripts/autostart-run.bat при входе пользователя в систему; запускать от админа (самопрос elevation); требует уже созданный webvnc.conf. (Вариант ONSTART/SYSTEM скрыт в session 0 и окна не показывает — поэтому не используется.)
|
||||
uninstall-autostart.bat удаляет плановое задание «web-vnc» (от админа).
|
||||
restart-autostart.bat перезапускает задание «web-vnc» (от админа, auto-elevate): проверяет tasklist, запущен ли web-vnc.exe — если да, делает schtasks /End + пауза 2 c + schtasks /Run; если нет — только schtasks /Run. Вызывается из set-password.bat, или вручную.
|
||||
open-firewall.bat открыть порт 8080 в Windows Firewall (от админа, один раз).
|
||||
webvnc.conf создаётся set-password.bat; содержит HASH=<pbkdf2-хэш> и VNC_PASSWORD=<тот же пароль для noVNC>; читается run.bat и scripts/autostart-run.bat; в git не коммитится (.gitignore).
|
||||
|
||||
Внутренние помощники (вызываются другими скриптами, не пользователем) — в scripts/:
|
||||
scripts/autostart-run.bat НЕинтерактивный launcher для автостарта (нет пауз/запросов): читает webvnc.conf, ПОЛЛИТ 127.0.0.1:5900 до ~30 c (UltraVNC-сервис может ещё подниматься при загрузке) и только потом запускает web-vnc.exe — без --spawn если 5900 уже слушает, иначе спавнит локальный VNC-сервер (portable vnc\\winvnc.exe/tvnserver.exe или авто-детект). Ничего не качает на старте. Вызывается плановым заданием из install-autostart.bat.
|
||||
scripts/autostart-run.bat launcher для автостарта: лежит в scripts/, но работает относительно КОРНЯ репо (cd /d %~dp0.. — web-vnc.exe/webvnc.conf/vnc/go.mod там). Читает webvnc.conf, ПОЛЛИТ 127.0.0.1:5900 до ~30 c (UltraVNC-сервис может ещё подниматься) и только потом запускает web-vnc.exe — без --spawn если 5900 уже слушает, иначе спавнит локальный VNC-сервер (portable vnc\\winvnc.exe/tvnserver.exe или авто-детект). Ничего не качает на старте. Запускается ВИДИМОЙ консолью (задание из install-autostart.bat): окно остаётся, пока web-vnc serves; при фатальной ошибке/no binary/no conf — pause, чтобы окно не закрылось и было видно причину. Вызывается также restart-autostart.bat.
|
||||
scripts/ensure-vnc-password.ps1 синхронизирует VNC-пароль UltraVNC с введённым (пишет только при несовпадении; UAC только при смене) — вызывается из set-password.bat.
|
||||
scripts/get-novnc.{ps1,sh} скачать noVNC
|
||||
scripts/get-vnc.ps1 скачать портативный UltraVNC в vnc/ (с верификацией zip)
|
||||
@@ -135,8 +135,11 @@ scripts/list-ips.ps1 список IPv4 машины (использует
|
||||
даже если синк упадёт или UAC отменят. Файл `webvnc.conf` — **секрет**, в git не
|
||||
коммитится (см. `.gitignore`).
|
||||
2. **Один раз (от админа)** запустить `install-autostart.bat` — регистрирует
|
||||
плановое задание `web-vnc` через `schtasks /Create /SC ONSTART /RU SYSTEM /RL HIGHEST`,
|
||||
которое при загрузке ОС запускает `scripts/autostart-run.bat`.
|
||||
плановое задание `web-vnc` через `schtasks /Create /SC ONLOGON /RL HIGHEST` (от имени
|
||||
текущего пользователя, без `/RU SYSTEM`), которое при **входе пользователя в систему**
|
||||
открывает **видимую консоль** с `scripts/autostart-run.bat`. Запуск от SYSTEM/ONSTART
|
||||
намеренно не используется: он выполняется в session 0 и НЕ показывает окно на рабочем
|
||||
столе, поэтому увидеть ошибки запуска было бы невозможно.
|
||||
3. `scripts/autostart-run.bat` — **неинтерактивный** launcher: читает `webvnc.conf`,
|
||||
при необходимости собирает `web-vnc.exe` (если есть Go), затем **опрашивает
|
||||
`127.0.0.1:5900` до ~30 c** (один PowerShell-проект крутит цикл try/TcpClient +
|
||||
@@ -150,10 +153,14 @@ scripts/list-ips.ps1 список IPv4 машины (использует
|
||||
4. Снять автостарт: `uninstall-autostart.bat` (от админа) — `schtasks /Delete`.
|
||||
|
||||
Замечания:
|
||||
- Задание выполняется от `SYSTEM`, поэтому VNC-сервер, отдавающий рабочий стол, должен
|
||||
быть отдельным сервисом (UltraVNC `uvnc_service`) — `autostart-run.bat` его НЕ порождает,
|
||||
а лишь подключается к `127.0.0.1:5900`. Портативный `vnc\winvnc.exe` используется только
|
||||
если 5900 ещё не слушает.
|
||||
- Задание выполняется от имени **текущего пользователя** при его входе (видимая консоль),
|
||||
а не от SYSTEM в session 0. Поэтому web-vnc может сам спавнить VNC-сервер в сеансе
|
||||
пользователя (что удобнее для захвата рабочего стола, чем SYSTEM). Если уже работает
|
||||
сервис UltraVNC (`uvnc_service`) и слушает 5900 — `autostart-run.bat` подключается к нему
|
||||
без `--spawn`. Портативный `vnc\winvnc.exe` спавнится только если 5900 не слушает.
|
||||
- Автостарт срабатывает при **входе пользователя**, а не до входа. Если нужен запуск до
|
||||
логина (без окна) — это отдельный скрытый вариант ONSTART/SYSTEM; текущий по умолчанию
|
||||
ориентирован на «видимую консоль после ребута/логина».
|
||||
- **Смена пароля на ходу:** `web-vnc.exe` читает хэш и `WEBVNC_VNC_PASSWORD` **один раз
|
||||
при старте** (`config.Parse`/`auth.New`) и никогда не перечитывает `webvnc.conf`. Поэтому
|
||||
`set-password.bat` после перезаписи `webvnc.conf` сам перезапускает задание «web-vnc» через
|
||||
|
||||
Reference in New Issue
Block a user