fix(autostart): wait for the VNC server before starting web-vnc
autostart-run.bat checked 5900 once at startup; at boot the UltraVNC service may not be up yet, so web-vnc either spawned a 2nd VNC server (conflict) or started serving on :8080 before the VNC server was ready, breaking browser connections. Now autostart-run.bat polls 127.0.0.1:5900 for up to ~30s (one PowerShell loop: TcpClient + Start-Sleep 1, exits on first accepted connection) and only then launches web-vnc.exe -- without --spawn when 5900 already listens, or spawning a local server (portable vnc\winvnc.exe / tvnserver.exe, else auto-detect) if it never came up. Docs (AGENTS.md, README.md) updated.
This commit is contained in:
@@ -70,7 +70,7 @@ 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, ищет только ЛОКАЛЬНЫЙ VNC-сервер (ничего не качает), запускает web-vnc.exe в foreground. Вызывается плановым заданием из install-autostart.bat.
|
||||
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/ensure-vnc-password.ps1 синхронизирует VNC-пароль UltraVNC с введённым (пишет только при несовпадении; UAC только при смене) — вызывается из set-password.bat.
|
||||
scripts/get-novnc.{ps1,sh} скачать noVNC
|
||||
scripts/get-vnc.ps1 скачать портативный UltraVNC в vnc/ (с верификацией zip)
|
||||
@@ -138,12 +138,15 @@ scripts/list-ips.ps1 список IPv4 машины (использует
|
||||
плановое задание `web-vnc` через `schtasks /Create /SC ONSTART /RU SYSTEM /RL HIGHEST`,
|
||||
которое при загрузке ОС запускает `scripts/autostart-run.bat`.
|
||||
3. `scripts/autostart-run.bat` — **неинтерактивный** launcher: читает `webvnc.conf`,
|
||||
при необходимости собирает `web-vnc.exe` (если есть Go), ищет только **локальный**
|
||||
VNC-сервер (ничего не качает — на старте сети/интернета может не быть), и запускает
|
||||
`web-vnc.exe --password-hash <HASH> --listen :8080` в foreground (задание держит
|
||||
процесс живым). Если `127.0.0.1:5900` уже слушает (сервис UltraVNC) — запускает
|
||||
**без** `--spawn` и **без** `--spawn-command`, подключаясь к существующему серверу
|
||||
(иначе попытка породить второй VNC-сервер конфликтовала бы с сервисом).
|
||||
при необходимости собирает `web-vnc.exe` (если есть Go), затем **опрашивает
|
||||
`127.0.0.1:5900` до ~30 c** (один PowerShell-проект крутит цикл try/TcpClient +
|
||||
`Start-Sleep 1`; выходит сразу, как только порт принял соединение) — UltraVNC-сервис
|
||||
при загрузке может ещё подниматься. Если `5900` слушает — запускает
|
||||
`web-vnc.exe --password-hash <HASH> --listen :8080` **без** `--spawn` (подключается
|
||||
к существующему серверу, не плодя второй). Если за ~30 c не поднялось — спавнит
|
||||
локальный VNC-сервер (`--spawn-command "vnc\winvnc.exe -run"` если есть portable,
|
||||
иначе `--spawn` с авто-детектом) и запускает web-vnc. На старте ничего не качает.
|
||||
Задание держит процесс живым в foreground.
|
||||
4. Снять автостарт: `uninstall-autostart.bat` (от админа) — `schtasks /Delete`.
|
||||
|
||||
Замечания:
|
||||
|
||||
Reference in New Issue
Block a user