polish: UTF-8 batch scripts, drop redundant set-vnc-password, robust vnc password probe

- run.bat / open-firewall.bat: UTF-8 (no BOM) + chcp 65001 instead of cp866/chcp 866.
- scripts/set-vnc-password.bat: removed (run.bat syncs the UltraVNC password via ensure-vnc-password.ps1).
- scripts/ensure-vnc-password.ps1: use a real RFB VNC-Auth probe to 127.0.0.1:5900
  to decide if the password already matches (no UAC when it does); set via
  createpassword/setpasswd + service restart only when it differs. Works for
  any password length (no stored-password encoding assumptions).
- AGENTS.md: .bat encoding convention updated to UTF-8/chcp 65001; drop set-vnc-password refs.
This commit is contained in:
Codex
2026-07-30 20:03:43 +03:00
parent 6a1ee64b14
commit db4f33f725
5 changed files with 144 additions and 248 deletions
+38 -38
View File
@@ -1,44 +1,44 @@
@echo off
REM ============================================================
REM web-vnc launcher - § ¯ã᪠¢ ®¤¨­ ª«¨ª. ‘¯à è¨¢ ¥â ⮫쪮 ¯ à®«ì.
REM web-vnc launcher - запуск в один клик. Спрашивает только пароль.
REM ============================================================
chcp 866 >nul
chcp 65001 >nul
cd /d "%~dp0"
echo.
echo === web-vnc: VNC ¢ ¡à ã§¥à¥ ===
echo === web-vnc: VNC в браузере ===
echo.
REM --- 1. ¨­ à­¨ª ---
REM --- 1. Бинарник ---
if exist "web-vnc.exe" goto havebin
where go >nul 2>nul
if not errorlevel 1 goto dogobuild
echo [®è¨¡ª ] web-vnc.exe ­¥ ­ ©¤¥­,   Go ­¥ ãáâ ­®¢«¥­.
echo “áâ ­®¢¨â¥ Go á https://go.dev/dl/ «¨¡® ¯®«®¦¨â¥ ᮡ࠭­ë© web-vnc.exe à冷¬.
echo [ошибка] web-vnc.exe не найден, а Go не установлен.
echo Установите Go с https://go.dev/dl/ либо положите собранный web-vnc.exe рядом.
echo.
pause
exit /b 1
:dogobuild
echo ‘®¡¨à î web-vnc.exe ...
echo Собираю web-vnc.exe ...
go build -o web-vnc.exe .\cmd\web-vnc
if errorlevel 1 goto buildfail
:havebin
REM --- 2. noVNC-ª«¨¥­â ---
REM --- 2. noVNC-клиент ---
if exist "internal\server\static\core\rfb.js" goto havenovnc
echo noVNC-ª«¨¥­â ¥éñ ­¥ ¢áâ஥­. ëâ îáì ᪠ç âì ...
echo noVNC-клиент ещё не встроен. Пытаюсь скачать ...
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0scripts\get-novnc.ps1"
if errorlevel 1 goto novncfail
echo ¥à¥á®¡¨à î á noVNC ...
echo Пересобираю с noVNC ...
go build -o web-vnc.exe .\cmd\web-vnc
goto havenovnc
:novncfail
echo [¯à¥¤ã¯à¥¦¤¥­¨¥] ¥ 㤠«®áì ᪠ç âì noVNC (­¥â ¨­â¥à­¥â ?).
echo ‚ ¡à ã§¥à¥ ®âªà®¥âáï áâà ­¨æ  á ¯®¤áª §ª®©. ®¢â®à¨â¥ ¯®§¦¥: scripts\get-novnc.ps1
echo [предупреждение] Не удалось скачать noVNC (нет интернета?).
echo В браузере откроется страница с подсказкой. Повторите позже: scripts\get-novnc.ps1
echo.
:havenovnc
REM --- 3. VNC-á¥à¢¥à (¯®¨áª/§ £à㧪 ) ---
REM --- 3. VNC-сервер (поиск/загрузка) ---
set "SPAWNARGS="
set "SPAWN_CMD="
if exist "vnc\winvnc.exe" goto uselocalvnc
@@ -49,7 +49,7 @@ if exist "C:\Program Files\uvnc bvba\UltraVNC\winvnc.exe" goto autodetectvnc
if exist "C:\Program Files (x86)\uvnc bvba\UltraVNC\winvnc.exe" goto autodetectvnc
if exist "C:\Program Files\TightVNC\tvnserver.exe" goto autodetectvnc
if exist "C:\Program Files (x86)\TightVNC\tvnserver.exe" goto autodetectvnc
echo VNC-á¥à¢¥à ­¥ ­ ©¤¥­. ëâ îáì ᪠ç âì ¯®àâ â¨¢­ë© UltraVNC ...
echo VNC-сервер не найден. Пытаюсь скачать портативный UltraVNC ...
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0scripts\get-vnc.ps1"
if errorlevel 1 goto novncserver
if exist "vnc\winvnc.exe" goto uselocalvnc
@@ -59,75 +59,75 @@ goto novncserver
if exist "vnc\winvnc.exe" set "SPAWN_CMD=vnc\winvnc.exe -run"
if exist "vnc\tvnserver.exe" if not defined SPAWN_CMD set "SPAWN_CMD=vnc\tvnserver.exe -run"
set "SPAWNARGS=--spawn-command "%SPAWN_CMD%""
echo  ©¤¥­ «®ª «ì­ë© VNC-á¥à¢¥à: %SPAWN_CMD%
echo Найден локальный VNC-сервер: %SPAWN_CMD%
goto vncdone
:autodetectvnc
echo VNC-á¥à¢¥à ­ ©¤¥­ ¢ á¨á⥬¥ ( ¢â®-®¯à¥¤¥«¥­¨¥ ¯à¨ § ¯ã᪥).
echo VNC-сервер найден в системе (авто-определение при запуске).
goto vncdone
:novncserver
echo [¯à¥¤ã¯à¥¦¤¥­¨¥] VNC-á¥à¢¥à ­¥ 㤠«®áì ¯®«ãç¨âì.
echo ¥§ VNC-á¥à¢¥à  à ¡®ç¨© á⮫ ­¥ ¡ã¤¥â â࠭᫨஢ âìáï.
echo “áâ ­®¢¨â¥ UltraVNC/TightVNC ¢àãç­ãî ¨«¨ ¯®¢â®à¨â¥: scripts\get-vnc.ps1
echo [предупреждение] VNC-сервер не удалось получить.
echo Без VNC-сервера рабочий стол не будет транслироваться.
echo Установите UltraVNC/TightVNC вручную или повторите: scripts\get-vnc.ps1
echo.
:vncdone
REM --- 4.  à®«ì ---
REM --- 4. Пароль ---
:getpw
set "PW="
set /p "PW=‚¢¥¤¨â¥ ¯ à®«ì ¤®áâ㯠: "
set /p "PW=Введите пароль доступа: "
if "%PW%"=="" goto emptypw
goto gotpw
:emptypw
echo  à®«ì ­¥ ¬®¦¥â ¡ëâì ¯ãáâë¬.
echo Пароль не может быть пустым.
goto getpw
:gotpw
REM --- 4b. Sync UltraVNC password with the one entered (only when it differs) ---
echo ‘¨­åà®­¨§¨àãî ¯ à®«ì UltraVNC á ¢¢¥¤ñ­­ë¬. ਠ­¥á®¢¯ ¤¥­¨¨ § ¯à®á¨â ¯à ¢   ¤¬¨­¨áâà â®à ...
echo Синхронизирую пароль UltraVNC с введённым. При несовпадении запросит права администратора...
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0scripts\ensure-vnc-password.ps1" -Password "%PW%"
if errorlevel 1 echo [¯à¥¤ã¯à¥¦¤¥­¨¥] ¥ 㤠«®áì ᨭåà®­¨§¨à®¢ âì ¯ à®«ì UltraVNC - ¯à®¤®«¦ î.
if errorlevel 1 echo [предупреждение] Не удалось синхронизировать пароль UltraVNC - продолжаю.
REM --- 5. •íè ¯ à®«ï + â®â ¦¥ ¯ à®«ì ¤«ï VNC-á¥à¢¥à  ---
echo ƒ¥­¥à¨àãî åíè ¯ à®«ï ...
REM --- 5. Хэш пароля + тот же пароль для VNC-сервера ---
echo Генерирую хэш пароля ...
for /f "delims=" %%i in ('web-vnc.exe --gen-hash "%PW%"') do set "HASH=%%i"
if "%HASH%"=="" goto hashfail
REM ’®â ¦¥ ¯ à®«ì ¡ã¤¥â  ¢â®¬ â¨ç¥áª¨ ¯¥à¥¤ ­ noVNC ¤«ï  ¢â®à¨§ æ¨¨ ­  VNC-á¥à¢¥à¥.
REM Тот же пароль будет автоматически передан noVNC для авторизации на VNC-сервере.
set "WEBVNC_VNC_PASSWORD=%PW%"
set "PW="
REM --- 6. „®áâã¯­ë¥  ¤à¥á  ---
REM --- 6. Доступные адреса ---
echo.
echo === €¤à¥á  ¤«ï ¯®¤ª«î祭¨ï (¯®àâ 8080) ===
echo === Адреса для подключения (порт 8080) ===
echo http://localhost:8080
for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0scripts\list-ips.ps1"') do echo http://%%a:8080
echo.
echo …᫨ á ¤à㣮© ¬ è¨­ë ­¥ ®âªà뢠¥âáï - ®¤¨­ à § ¢ë¯®«­¨â¥ ®â ¨¬¥­¨
echo  ¤¬¨­¨áâà â®à : scripts\open-firewall.bat
echo Если с другой машины не открывается - один раз выполните от имени
echo администратора: scripts\open-firewall.bat
echo.
REM --- 7. ‡ ¯ã᪠---
echo ‡ ¯ã᪠î web-vnc ­  http://localhost:8080
echo Žáâ ­®¢¨âì: Ctrl+C
REM --- 7. Запуск ---
echo Запускаю web-vnc на http://localhost:8080
echo Остановить: Ctrl+C
echo.
REM --- 6b. 5900 already listening? -> do NOT spawn a 2nd VNC server (avoid conflict with the UltraVNC service) ---
set "SPAWNFLAG=--spawn"
powershell -NoProfile -Command "try{$c=New-Object Net.Sockets.TcpClient('127.0.0.1',5900);$c.Close();exit 0}catch{exit 1}"
if not errorlevel 1 (
echo VNC-á¥à¢¥à 㦥 á«ãè ¥â 127.0.0.1:5900 - ¯®¤ª«îç îáì ª ­¥¬ã ¡¥§ --spawn.
echo VNC-сервер уже слушает 127.0.0.1:5900 - подключаюсь к нему без --spawn.
set "SPAWNFLAG="
)
web-vnc.exe --password-hash "%HASH%" %SPAWNARGS% %SPAWNFLAG% --listen :8080
echo.
echo ‘¥à¢¥à ®áâ ­®¢«¥­.
echo Сервер остановлен.
pause
exit /b
:buildfail
echo ‘¡®àª  ­¥ 㤠« áì.
echo Сборка не удалась.
pause
exit /b 1
:hashfail
echo [®è¨¡ª ] ¥ 㤠«®áì ᣥ­¥à¨à®¢ âì åíè ¯ à®«ï.
echo [ошибка] Не удалось сгенерировать хэш пароля.
pause
exit /b 1