1) Скачать и установить Python:
https://www.python.org/downloads/
2) В cmd выполнить:
pip install websockify
3) Скачать и установить TightVNC:
https://www.tightvnc.com/download.php
|---------------- quiet_install_tightvnc.bat ----------------|
@echo off
msiexec /i tightvnc-2.8.85-gpl-setup-64bit.msi /quiet /norestart ^
ADDLOCAL=Server ^
SET_USEVNCAUTHENTICATION=1 VALUE_OF_USEVNCAUTHENTICATION=1 ^
SET_PASSWORD=1 VALUE_OF_PASSWORD=123 ^
SET_USECONTROLAUTHENTICATION=1 VALUE_OF_USECONTROLAUTHENTICATION=1 ^
SET_CONTROLPASSWORD=1 VALUE_OF_CONTROLPASSWORD=321 ^
VALUE_OF_REMOVEWALLPAPER=1 ^
SET_USEMIRRORDRIVER=1 VALUE_OF_USEMIRRORDRIVER=1 ^
SET_POLLINGINTERVAL=1 VALUE_OF_POLLINGINTERVAL=500 ^
SET_DISCONNECTCLIENTS=1 VALUE_OF_DISCONNECTCLIENTS=1
:: ADDLOCAL="Server,Viewer"
:: VALUE_OF_REMOVEWALLPAPER=1 - Убирает обои рабочего стола при подключении VNC-клиента.
:: SET_USEMIRRORDRIVER=1 VALUE_OF_USEMIRRORDRIVER=1 - Включает mirror driver (драйвер зеркального экрана).
:: SET_POLLINGINTERVAL=1 VALUE_OF_POLLINGINTERVAL=500 - Частота проверки экрана (в миллисекундах).
:: SET_DISCONNECTCLIENTS=1 VALUE_OF_DISCONNECTCLIENTS=1 - Новый подключился → старый вылетел
:: SET_RUNCONTROLINTERFACE=1 VALUE_OF_RUNCONTROLINTERFACE=0 - Скрыть иконку в трее (чтобы «не трогали»)
|------------------------------------------------------------|
Документация:
https://www.tightvnc.com/doc/win/TightVNC_2.7_for_Windows_Installing_from_MSI_Packages.pdf
4) Скачать noVNC и извлечь в папку web:
https://github.com/novnc/noVNC/releases
5) В cmd выполнить:
cd C:\Users\User\Desktop\noVNC
py novnc.py
|------------------------- novnc.py -------------------------|
import sys, os, socket, subprocess
def base_dir():
exe = sys.executable if getattr(sys, 'frozen', False) else __file__
return os.path.dirname(os.path.abspath(exe))
def local_ip():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
s.connect(('8.8.8.8', 80))
return s.getsockname()[0]
finally:
s.close()
BASE_DIR = base_dir()
IP = local_ip()
PORT_WEB = int(sys.argv[1]) if len(sys.argv) > 1 else 8080
PORT_VNC = int(sys.argv[2]) if len(sys.argv) > 2 else 5900
SSL_CRT = sys.argv[3] if len(sys.argv) > 3 else ''
SSL_KEY = sys.argv[4] if len(sys.argv) > 4 else ''
WEB_DIR = os.path.join(BASE_DIR, 'web')
try:
if os.path.isfile(SSL_CRT) and os.path.isfile(SSL_KEY):
SSL = f' --cert="{SSL_CRT}" --key="{SSL_KEY}"'
else:
SSL = ''
print(f"noVNC URL: http{'s' if SSL else ''}://{IP}:{PORT_WEB}/?resize=scale&quality=4&compression=4&host={IP}&port={PORT_WEB}&password=123&autoconnect=1&reconnect=1")
print(f"VNC port: {PORT_VNC}")
print(f"Web dir: {WEB_DIR}")
print(f"Web exists: {os.path.exists(WEB_DIR)}")
cmd = f'netsh advfirewall firewall delete rule name="noVNC" >nul 2>&1 & '
cmd += f'netsh advfirewall firewall add rule name="noVNC" dir=in action=allow protocol=TCP localport={PORT_WEB} >nul 2>&1 & '
cmd += f'py -m websockify --web "{WEB_DIR}" {PORT_WEB} {IP}:{PORT_VNC}{SSL}'
subprocess.run(cmd, shell=True)
except KeyboardInterrupt:
print('Остановлено.')
except subprocess.CalledProcessError as e:
print(f"Ошибка при запуске websockify: {e}")
|------------------------------------------------------------|
Пример URL:
http://192.168.0.110:8080/?resize=scale&quality=4&compression=4&host=192.168.0.110&port=8080&password=123&autoconnect=1&reconnect=1
Документация:
https://github.com/novnc/noVNC/blob/master/docs/EMBEDDING.md#parameters
*текст* - жирный,
~текст~ - курсивный,
-текст- - _текст_ - подчеркнутый