refactor: move user-facing scripts to repo root; fix set-password ordering
- install-autostart.bat, uninstall-autostart.bat, restart-autostart.bat, open-firewall.bat moved from scripts/ to the repo root (next to run.bat and set-password.bat). Internal helpers (autostart-run.bat, ensure-vnc-password.ps1, get-novnc.*, get-vnc.ps1, list-ips.ps1) stay in scripts/. autostart-run.bat is kept in scripts/ because the scheduled task /TR points at it; moving it would break already-installed tasks. - Updated all references (set-password.bat, run.bat, install/restart-autostart.bat, AGENTS.md, README.md). - set-password.bat: write webvnc.conf BEFORE the UltraVNC sync so the web password is configured even if ensure-vnc-password.ps1 fails / its UAC is dismissed (previously 'Password is not configured' from install-autostart.bat when the sync blocked before conf was written). - AGENTS.md / README.md structure + autostart sections updated for the new layout.
This commit is contained in:
@@ -59,18 +59,22 @@ internal/relay websocket.go — RFC6455 на stdlib; relay.go — WS
|
||||
internal/vncspawner кросс-ОС поиск/запуск VNC-сервера (build-теги по ОС)
|
||||
internal/server HTTP-роуты, /api/status, middleware сессии, embed.FS
|
||||
internal/server/static встроенные ассеты (vnc.html, favicon.ico + noVNC core/app/vendor)
|
||||
|
||||
Все пользовательские точки входа лежат в корне репозитория:
|
||||
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.
|
||||
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, ищет только ЛОКАЛЬНЫЙ VNC-сервер (ничего не качает), запускает web-vnc.exe в foreground. Вызывается плановым заданием из 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)
|
||||
scripts/list-ips.ps1 список IPv4 машины (используется run.bat)
|
||||
scripts/open-firewall.bat открыть порт 8080 в Windows Firewall (от админа)
|
||||
scripts/ensure-vnc-password.ps1 синхронизирует VNC-пароль UltraVNC с введённым (пишет только при несовпадении; UAC только при смене) — вызывается из set-password.bat
|
||||
set-password.bat настройка пароля: спрашивает пароль, синхронизирует VNC-пароль UltraVNC (ensure-vnc-password.ps1), генерирует хэш и пишет webvnc.conf (HASH= + VNC_PASSWORD=, gitignored). Если установлено задание «web-vnc» — перезапускает его через scripts/restart-autostart.bat (с elevation), чтобы живый gateway перезалил пароль; рестарт пропускается, только если пароль не изменился (PBKDF2-хэш всегда новый из-за соли, поэтому изменение детектится сравнением введённого пароля со старым VNC_PASSWORD из webvnc.conf). Саму проверку «запущен ли web-vnc.exe» делает restart-autostart.bat (elevated, надёжно видит SYSTEM-процесс).
|
||||
webvnc.conf создаётся set-password.bat; содержит HASH=<pbkdf2-хэш> и VNC_PASSWORD=<тот же пароль для noVNC>; читается run.bat и scripts/autostart-run.bat; в git не коммитится (.gitignore).
|
||||
run.bat интерактивный запуск в один клик: собирает бинарник/noVNC/VNC, читает пароль из webvnc.conf (НЕ спрашивает — если файла нет, просит сначала запустить set-password.bat); если 5900 уже занят (сервис UltraVNC) — не порождает второй VNC-сервер, а подключается к существующему
|
||||
scripts/autostart-run.bat НЕинтерактивный launcher для автостарта (нет пауз/запросов): читает webvnc.conf, ищет только ЛОКАЛЬНЫЙ VNC-сервер (ничего не качает), запускает web-vnc.exe в foreground. Вызывается плановым заданием из install-autostart.bat.
|
||||
scripts/install-autostart.bat регистрирует плановое задание «web-vnc» (schtasks /SC ONSTART /RU SYSTEM /RL HIGHEST), запускающее scripts/autostart-run.bat при загрузке ОС; запускать от админа (самопрос elevation); требует уже созданный webvnc.conf.
|
||||
scripts/uninstall-autostart.bat удаляет плановое задание «web-vnc» (от админа).
|
||||
scripts/restart-autostart.bat перезапускает задание «web-vnc» (от админа, auto-elevate): проверяет tasklist, запущен ли web-vnc.exe — если да, делает schtasks /End + пауза 2 c + schtasks /Run; если нет — только schtasks /Run. Вызывается из set-password.bat, или вручную.
|
||||
```
|
||||
|
||||
## Соглашения и подводные камни
|
||||
@@ -125,11 +129,12 @@ scripts/restart-autostart.bat перезапускает задание «web-vn
|
||||
Чтобы gateway поднимался сам при включении машины (а не интерактивно через `run.bat`),
|
||||
пароль должен быть настроен заранее и не запрашиваться при старте. Поэтому процедура:
|
||||
|
||||
1. **Один раз** запустить `set-password.bat` — он спрашивает пароль, синхронизирует
|
||||
VNC-пароль UltraVNC (`scripts/ensure-vnc-password.ps1`), генерирует хэш и пишет
|
||||
`webvnc.conf` (HASH + VNC_PASSWORD). Файл `webvnc.conf` — **секрет**, в git не
|
||||
1. **Один раз** запустить `set-password.bat` — он спрашивает пароль, генерирует хэш
|
||||
и пишет `webvnc.conf` (HASH + VNC_PASSWORD), а уже ПОТОМ синхронизирует VNC-пароль
|
||||
UltraVNC (`scripts/ensure-vnc-password.ps1`) — так веб-пароль оказывается настроен,
|
||||
даже если синк упадёт или UAC отменят. Файл `webvnc.conf` — **секрет**, в git не
|
||||
коммитится (см. `.gitignore`).
|
||||
2. **Один раз (от админа)** запустить `scripts/install-autostart.bat` — регистрирует
|
||||
2. **Один раз (от админа)** запустить `install-autostart.bat` — регистрирует
|
||||
плановое задание `web-vnc` через `schtasks /Create /SC ONSTART /RU SYSTEM /RL HIGHEST`,
|
||||
которое при загрузке ОС запускает `scripts/autostart-run.bat`.
|
||||
3. `scripts/autostart-run.bat` — **неинтерактивный** launcher: читает `webvnc.conf`,
|
||||
@@ -139,7 +144,7 @@ scripts/restart-autostart.bat перезапускает задание «web-vn
|
||||
процесс живым). Если `127.0.0.1:5900` уже слушает (сервис UltraVNC) — запускает
|
||||
**без** `--spawn` и **без** `--spawn-command`, подключаясь к существующему серверу
|
||||
(иначе попытка породить второй VNC-сервер конфликтовала бы с сервисом).
|
||||
4. Снять автостарт: `scripts/uninstall-autostart.bat` (от админа) — `schtasks /Delete`.
|
||||
4. Снять автостарт: `uninstall-autostart.bat` (от админа) — `schtasks /Delete`.
|
||||
|
||||
Замечания:
|
||||
- Задание выполняется от `SYSTEM`, поэтому VNC-сервер, отдавающий рабочий стол, должен
|
||||
@@ -149,7 +154,7 @@ scripts/restart-autostart.bat перезапускает задание «web-vn
|
||||
- **Смена пароля на ходу:** `web-vnc.exe` читает хэш и `WEBVNC_VNC_PASSWORD` **один раз
|
||||
при старте** (`config.Parse`/`auth.New`) и никогда не перечитывает `webvnc.conf`. Поэтому
|
||||
`set-password.bat` после перезаписи `webvnc.conf` сам перезапускает задание «web-vnc» через
|
||||
`scripts\restart-autostart.bat` (elevation): тот проверяет `tasklist`, запущен ли
|
||||
`restart-autostart.bat` (elevation): тот проверяет `tasklist`, запущен ли
|
||||
`web-vnc.exe`, и делает `schtasks /End` + `/Run` (или только `/Run`, если процесс не
|
||||
запущен). Рестарт пропускается, если пароль не изменился (детект по старому `VNC_PASSWORD`
|
||||
из `webvnc.conf`, т.к. PBKDF2-хэш всегда новый из-за соли). Если задание не установлено —
|
||||
|
||||
Reference in New Issue
Block a user