Подключение к удаленному компьютеру по VNC
Работа с VNC-клиентом. Материал ориентирован на неопытного пользователя.
1. Установка VNC-клиента
2. Подключение VNC-клиента к удаленному компьютеру
3. Отключение VNC-клиента от удаленного компьютера
4. Тюнинг VNC-клиента
5. Частые проблемы
Для работы с удаленным компьютером по VNC на компьютере пользователя нужно запустить программу-клиент (VNC viewer, VNC client). Эта программа передает на удаленный компьютер данные о нажатиях на клавиши и о движениях мыши, сделанных пользователем, и показывает информацию, предназначенную к выводу на экран.
1. Установка VNC-клиента
Для ОС Windows можно бесплатно скачать и инсталлировать VNC-клиент UltraVNC и TightVNC.
Mac OS X начиная с версии 10.5 имеет поддержку VNC-клиента в RemoteDesktop. Для предыдущих версий можно использовать VNC-клиенты JollysFastVNC и Chicken.
Для Linux ветви Debian (Ubuntu) VNC-клиент устанавливается из репозитория командой:
apt-get install vncviewer
Для ветви RedHat (CentOS, Fedora) — командой:
yum install vnc
Для FreeBSD VNC-клиент (TightVNC) устанавливается из пакетов командой:
pkg_add -r tightvnc
2. Подключение VNC-клиента к удаленному компьютеру
Для подключения VNC-клиента к удаленному компьютеру требуется указать его IP-адрес или DNS-имя, и номер дисплея (по умолчанию, :0) или номер TCP-порта (по умолчанию, 5900). Если VNC-сервер требует авторизации, то при подключении к нему VNC-клиент запросит пароль. Обратите внимание, что пароль доступа к VNC-серверу не связан с каким-либо аккаунтом (учетной записью пользователя) на удаленном компьютере, а служит только для ограничения доступа к дисплею VNC-сервера.
После установки соединения и открытия экрана, в зависимости от настроек VNC-сервера может потребоваться авторизация пользователя на виртуальном сервере или может быть открыта уже запущенная рабочая сессия какого-либо пользователя.
Так как на компьютере одновременно могут работать несколько VNC-серверов, для их разделения используют параметр номер дисплея. Например, один VNC-сервер может быть запущен на дисплее :0, другой — на дисплее :1. Каждому номеру дисплея соответствует номер TCP-порта, на котором VNC-сервер принимает соединения. Номер порта для дисплея получается прибавлением номера дисплея к базовому номеру порта — 5900. Дисплею :0 соответствует TCP-порт 5900, дисплею :1 — порт 5901.
3. Отключение VNC-клиента от удаленного компьютера
При закрытии окна VNC-клиента или после выхода из окружения средствами рабочего стола, в зависимости от настроек VNC-сервера, рабочая сессия пользователя может закрыться с остановкой всех используемых программ, или продолжать работу и быть доступной снова при повторном подключении к VNC-серверу.
4. Тюнинг VNC-клиента
Большое количество передаваемой на экран информации влечет за собой повышенные требования к скорости канала — к его пропускной способности и времени передачи пакетов. Нахватка пропускной способности приводит к некомфортным задержкам при больших изменениях показывамой на экране информации — открытии новых окон, скроллинге и т.д. Особенно большие задержки будут возникать при показывании фотографий и других изображений или элементов интерфейса, имеющих большое количество цветов и сложные формы.
Главный параметр, который влияет на объем передаваемых данных — алгоритм кодирования передаваемой графики. Для уменьшения объема и, соответственно, ускорения работы, рекомендуется использовать алгоритмы Tight, ZLib, ZRLE — по сравнению с несжатыми данными (Raw), они обеспечивают сжатие в десятки раз, заметно нагружая процессор. Эти алгоритмы кодирования обеспечивают комфортную работу даже на каналах со скоростью 256-512 Кбит/сек.
Для сокращения объема передаваемой по сети информации также можно устанавливать высокий уровень сжатия (Compression Level, Compression Value), низкий уровень качества JPEG (JPEG Quality) и включать режим уменьшения количества цветов (-bgr233, Restricted colors). Самый большой эффект из них при заметном снижении качества изображения дает режим уменьшения количества цветов — объем передаваемой информации уменьшается в 1.5-3 раза, соответственно, в 1.5-3 раза ускоряется отображение на экране.
JPEG применяется алгоритмом кодирования Tight для сжатия участков экрана, содержащих фотографии и другие сложные изображения с большим числом цветов. Использование Tight+JPEG сокращает в 2-5 раз объем передаваемых при этом данных. Другие алгоритмы кодирования JPEG не поддерживают.
1. Выпадающего меню «Система -> Параметры»
Объем передаваемых данных и скорость отображения на канале 1 Мбит/сек при открытии выпадающего меню «Система -> Параметры» (на рисунке меню выделено зеленым пунктиром):
Полноцветный режим | 256 цветов (BGR233) | |||
---|---|---|---|---|
Объем | Время | Объем | Время | |
ZLib | 11 Кб | 0.09 сек | 7 Кб | 0.06 сек |
HexTile | 208 Кб | 1.6 сек | 118 Кб | 0.95 сек |
Raw | 248 Кб | 2 сек | 128 Кб | 1 сек |
5. Частые проблемы
Не удается подключиться к VNC-серверу
Медленная работа через достаточно быстрый канал
Если VNC-клиент не может согласовать с VNC-сервером использование алгоритм кодирования графики с компрессией данных, выбирается алгоритм по умолчанию — Raw, который передает данные без сжатия. Также кодирование без сжатия или с низким уровнем сжатия может автоматически выбираться VNC-клиентом при работе через быструю локальную сеть. Данную проблему можно исправить, принудительно указав в настройках VNC-клиента алгоритм кодирования с высоким уровнем сжатия — ZLib, ZRLE, Tight.
Однако, для некоторых сочетаний клиента и сервера такое решение может быть бесполезным из-за ошибок в согласовании алгоритма кодирования. Например, клиент TightVNC с сервером RealVNC часто могут работать только с кодировкой Raw. Решением в этом случае будет смена VNC-клиента или VNC-сервера.
Источник
Каков правильный способ убить vncsession в Linux?
Когда я запускаю следующую команду в удаленном поле linux , с которым я подключаюсь, из моего windows 7 ноутбук через VNC Я получаю следующее:
Как я могу убить этот сеанс элегантно? Я знаю, что kill -9
будет делать это, но я думаю, что это сильное чистое и может привести к повреждению файлов.
PS: Я также прочитал из этого источника , чтобы использовать параметр kill из vncserver, но не уверен, как вычислить отображение #.
2 ответа
Как вы заметили, из man vncserver :
Номер дисплея подключается к номеру порта дисплея, если он не установлен вручную (и по-разному), где
например. порт 5901 → дисплей: 1. Эту информацию можно найти в man Xvnc ( vncserver — это просто сценарий оболочки, который вызывает этот инструмент), где он говорит:
Если вы не знаете номер наизусть (но вам нужно знать его, если вы собираетесь подключиться к серверу в любом случае), вы можете проверить, например. ps ax | grep vnc для информации. Если я делаю это локально, я вижу процессы
и, следовательно, я знаю, что они представляют серверы VNC с номерами дисплеев :1 и :2 соответственно и может быть убит
В вашем случае вы видите, что номер дисплея :1 для сервера, указанного в вашем ps .
Я попробовал ответить выше, и это не сработало для меня. Он дал мне сообщение об ошибке, как в этом вопросе: Утилизация процесса VNC вручную
Поэтому мне пришлось убивать их вручную. Я попытался убить -9, а потом больше не могу войти в rdp. Когда я пытался войти в систему, я получил xrdp_mm_process_login_response: login failed .
В принципе, файл сеанса не очищается, когда сервер Xvnc убит. Файл назван для отображения, поэтому, если вы на дисплее: 12, это /tmp/.X11-unix/X12 . Удалите этот файл после kill -9 , и вы вернулись в бизнес.
Источник
VNC CentOS
Введение
Virtual Network Computing (VNC) — система удалённого доступа к рабочему столу компьютера, использующая протокол RFB (англ. Remote FrameBuffer, удалённый кадровый буфер).
Управление осуществляется путём передачи нажатий клавиш на клавиатуре и движений мыши с одного компьютера на другой и ретрансляции содержимого экрана через компьютерную сеть.
Система VNC платформонезависима: VNC-клиент, называемый VNC viewer, запущенный на одной операционной системе, может подключаться к VNC-серверу, работающему на любой другой ОС.
Существуют реализации клиентской и серверной части практически для всех операционных систем, в том числе и для Java (включая мобильную платформу J2ME).
К одному VNC-серверу одновременно могут подключаться множественные клиенты.
Наиболее популярные способы использования VNC — удалённая техническая поддержка и доступ к рабочему компьютеру из дома.
Установка tigervnc-server
sudo yum install tigervnc-server
Залогиньтесь под пользователем, которому вы хотите дать доступ по vnc
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
view-only password это пароль для доступа только с правами на просмотр. Действия мыши и клавиатуры во время такого доступа ограничены.
sudo vi /lib/systemd/system/vncserver@.service
# The vncserver service unit file # # Quick HowTo: # 1. Copy this file to /etc/systemd/system/vncserver@.service # 2. Replace with the actual user name and edit vncserver # parameters in the wrapper script located in /usr/bin/vncserver_wrapper # 3. Run `systemctl daemon-reload` # 4. Run `systemctl enable vncserver@: .service` # # DO NOT RUN THIS SERVICE if your local area network is # untrusted! For a secure way of using VNC, you should # limit connections to the local host and then tunnel from # the machine you want to view VNC on (host A) to the machine # whose VNC output you want to view (host B) # # [user@hostA
]$ ssh -v -C -L 590N:localhost:590M hostB # # this will open a connection on port 590N of your hostA to hostB’s port 590M # (in fact, it ssh-connects to hostB and then connects to localhost (on hostB). # See the ssh man page for details on port forwarding) # # You can then point a VNC client on hostA at vncdisplay N of localhost and with # the help of ssh, you end up seeing what hostB makes available on port 590M # # Use «-nolisten tcp» to prevent X connections to your VNC server via TCP. # # Use «-localhost» to prevent remote VNC clients connecting except when # doing so through a secure tunnel. See the «-via» option in the # `man vncviewer’ manual page. [Unit] Description=Remote desktop service (VNC) After=syslog.target network.target [Service] Type=simple # Clean any existing files in /tmp/.X11-unix environment ExecStartPre=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’ ExecStart=/usr/bin/vncserver_wrapper %i ExecStop=/bin/sh -c ‘/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :’ [Install] WantedBy=multi-user.target
Выполните первый и второй шаги из Quick HowTo
sudo cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@: 1 .service
Обратите внимание на 1 — таким образом указывается номер дисплея для данной версии сервера. Можно было выбрать другое число, главное запомнить этот выбор.
sudo vi /etc/systemd/system/vncserver@\: 1 .service
Замените на имя вашего пользователя. (моего зовут andrei)
Можно вручную через vi а можно с помощью sed
sudo sed -i ‘s / wrapper\ / wrapper\ andrei / ‘ /etc/systemd/system/vncserver@\: 1 .service
Если вашего пользователя зовут vncuser команда будет выглядеть так:
sudo sed -i ‘s / wrapper\ / wrapper\ vncuser / ‘ /etc/systemd/system/vncserver@\: 1 .service
Запуск VNC сервера
Чтобы VNC sever запускался при загрузке системы выполните
systemctl enable vncserver@:1
Запустить VNC sever вручную
sudo systemctl daemon-reload
sudo systemctl start vncserver@:1
Проверить статус VNC сервера
systemctl status vncserver@:1
● vncserver@:1.service — Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:1.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2021-03-16 13:49:55 EET; 3min 56s ago Process: 23138 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 23145 (vncserver_wrapp) CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service ├─23145 /bin/sh /usr/bin/vncserver_wrapper andrei :1 └─24097 /bin/sh /usr/bin/vncserver_wrapper andrei :1 Oct 10 16:48:51 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC). Oct 10 16:48:51 localhost.localdomain systemd[1]: Started Remote desktop service (VNC). Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[23145]: New ‘localhost.localdomain:1 (andrei)’ desktop is localhost.localdomain:1 Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[23145]: Creating default startup script /home/andrei/.vnc/xstartup Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[23145]: Creating default config /home/andrei/.vnc/config Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[23145]: Starting applications specified in /home/andrei/.vnc/xstartup Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[23145]: Log file is /home/andrei/.vnc/localhost.localdomain:1.log
Проверить, что vnc server слушает на порту 5901 можно командой
ss -tulpn| grep vnc
tcp LISTEN 0 5 *:5901 *:* users:((«X vnc «,pid=1330,fd=9)) tcp LISTEN 0 128 *:6001 *:* users:((«X vnc «,pid=1330,fd=6)) tcp LISTEN 0 5 [::]:5901 [::]:* users:((«X vnc «,pid=1330,fd=10)) tcp LISTEN 0 128 [::]:6001 [::]:* users:((«X vnc «,pid=1330,fd=5))
Открыть порт в Firewall
Теперь порт 5901 нужно открыть в firewall
sudo firewall-cmd —add-port=5901/tcp —permanent
sudo firewall-cmd —reload
sudo firewall-cmd —list-ports
Как вы можете убедиться — порт 5901 успешно добавлен в список открытых
Если вам вдруг стало интересно — что за порт 19999 — его использует Locust
Подключение к VNC серверу
Теперь можно установить VNC клиент, например, Remmina
sudo yum install remmina
И зайти на VNC сервер введя нужный IP адрес и порт :5901
Подключение к Centos по VNC через Remmina
Введите пароль пользователя для которого вы создали vncpasswd
Подключение к Centos по VNC через Remmina
Подключение к Centos по VNC через Remmina
Остановить VNC сервер
systemctl stop vncserver@:1
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentication is required to manage system services or units. Authenticating as: andrei Password: ==== AUTHENTICATION COMPLETE ===
Изменить порт и дисплей
Если скопировать существующий файл /etc/systemd/system/vncserver@: 1 .service
cp /etc/systemd/system/vncserver@: 1 .service /etc/systemd/system/vncserver@: 0 .service
systemctl daemon-reload
==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon === Authentication is required to reload the systemd state. Authenticating as: andrei Password: ==== AUTHENTICATION COMPLETE === [andrei@localhost system]$ systemctl start vncserver@:0 ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === Authentication is required to manage system services or units. Authenticating as: andrei Password: ==== AUTHENTICATION COMPLETE === [andrei@localhost system]$ systemctl status vncserver@:0 ● vncserver@:0.service — Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:0.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Wed 2021-10-10 16:55:56 EET; 11s ago Process: 8426 ExecStart=/usr/bin/vncserver_wrapper andrei %i (code=exited, status=2) Process: 8424 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 8426 (code=exited, status=2) Oct 10 16:48:51 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC). Oct 10 16:48:51 localhost.localdomain systemd[1]: Started Remote desktop service (VNC). Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[8426]: Warning: localhost.localdomain:0 is taken because of /tmp/.X0-lock Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[8426]: Remove this file if there is no X server localhost.localdomain:0 Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[8426]: A VNC server is already running as :0 Oct 10 16:48:51 localhost.localdomain systemd[1]: vncserver@:0.service: main process exited, code=exited, status=2/INVALIDARGUMENT Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[8426]: FATAL: ‘runuser -l andrei’ failed! Oct 10 16:48:51 localhost.localdomain systemd[1]: Unit vncserver@:0.service entered failed state. Oct 10 16:48:51 localhost.localdomain systemd[1]: vncserver@:0.service failed.
Обратите внимание на предупреждение Warning: localhost.localdomain:0 is taken because of /tmp/.X0-lock
Файл .X0-lock нужно удалить
rm /tmp/.X0-lock
systemctl start vncserver@:0
systemctl status vncserver@:0
● vncserver@:0.service — Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:0.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Wed 2021-10-10 00:01:00 EET; 13s ago Process: 9358 ExecStart=/usr/bin/vncserver_wrapper andrei %i (code=exited, status=2) Process: 9356 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 9358 (code=exited, status=2) Oct 10 16:48:51 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC). Oct 10 16:48:51 localhost.localdomain systemd[1]: Started Remote desktop service (VNC). Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[9358]: Warning: localhost.localdomain:0 is taken because of /tmp/.X11-unix/X0 Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[9358]: Remove this file if there is no X server localhost.localdomain:0 Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[9358]: A VNC server is already running as :0 Oct 10 16:48:51 localhost.localdomain systemd[1]: vncserver@:0.service: main process exited, code=exited, status=2/INVALIDARGUMENT Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[9358]: FATAL: ‘runuser -l andrei’ failed! Oct 10 16:48:51 localhost.localdomain systemd[1]: Unit vncserver@:0.service entered failed state. Oct 10 16:48:51 localhost.localdomain systemd[1]: vncserver@:0.service failed.
Теперь нужно удалить файл .X11-unix/X0k нужно удалить
rm /tmp/.X11-unix/X0k
systemctl daemon-reload
systemctl start vncserver@:0
systemctl status vncserver@:0
● vncserver@:0.service — Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:0.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2021-10-10 17:16:39 EET; 4s ago Process: 9513 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 9516 (vncserver_wrapp) CGroup: /system.slice/system-vncserver.slice/vncserver@:0.service └─9516 /bin/sh /usr/bin/vncserver_wrapper andrei :0 Oct 10 16:48:51 localhost.localdomain systemd[1]: Starting Remote desktop service (VNC). Oct 10 16:48:51 localhost.localdomain systemd[1]: Started Remote desktop service (VNC). Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[9516]: WARNING: The first attempt to start Xvnc failed, possibly because the font Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[9516]: catalog is not properly configured. Attempting to determine an appropriate Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[9516]: font path for this system and restart Xvnc using that font path .
Дисплей 0
Если вы пытаетесь запустить сервер на дисплее 0 и получаете ошибку
● vncserver@:0.service — Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:0.service; enabled; vendor preset: Active: failed (Result: exit-code) since Thu 2021-03-18 15:50:32 EET; 2min 8s ago Process: 4260 ExecStart=/usr/bin/vncserver_wrapper andrei %i (code=exited, status= Process: 4255 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 Main PID: 4260 (code=exited, status=2) Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[4260]: (EE) Cannot establish Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[4260]: _XSERVTransSocketUNIX Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[4260]: _XSERVTransMakeAllCOT Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[4260]: (EE) Oct 10 16:48:51 localhost.localdomain vncserver_wrapper[4260]: Fatal server error:
Убедитесь, что у вас не запущена X Window System обычно она занимает дисплей 0.
Источник