VNC X server DISPLAY :0

Для подключения к активной сесии DISPLAY :0 нужно использовать x11vnc

[root@vnc-host ~]# yum install x11vnc


Вывод программы

Настройка Firewall

Ручной IPTABLESNetwork manager
[root@vnc-host ~]# cat /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:VNC - [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp -m multiport --dports 5900:5910 -j VNC
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

-A VNC -s 192.168.12.0/24 -j ACCEPT
-A VNC -j REJECT --reject-with icmp-host-prohibited
COMMIT
[root@vnc-host ~]# firewall-cmd --permanent --zone=public --add-service vnc-server

Пытаемся запустить

[root@vnc-host ~]# x11vnc -display :0
Вывод программы
Проверяем по пунктам всё что было в диагостическом выводе.

[root@vnc-host ~]# echo $DISPLAY
:0
[root@vnc-host ~]# ls -l /var/run/kdm/
total 8
-rw-------. 1 root root 44 Feb 14 08:09 A:0-NVTXPb
-rw-r--r--. 1 root root  5 Feb 14 08:09 kdm.pid
[root@vnc-host ~]# ps wwwwaux | grep auth
root      1272  0.6  1.8  56900 19176 tty1     Ss+  Feb14  18:52 /usr/bin/X :0 vt1 -background none -nolisten tcp -auth /var/run/kdm/A:0-NVTXPb
user002   2069  0.0  0.2  98468  2580 ?        Sl   Feb14   0:00 /usr/libexec/kde4/polkit-kde-authentication-agent-1
root     31269  0.0  0.0   4604   796 pts/1    S+   11:07   0:00 grep --color=auto auth
[root@vnc-host ~]# x11vnc -findauth
XAUTHORITY=/var/run/kdm/A:0-NVTXPb

Нужно с параметром -auth передать полученный файл /var/run/kdm/A:0-NVTXPb. Но с версии x11vnc 0.9.9 появился более удобный ключ -auth guess который автоматически найдёт нужный файл.

[root@vnc-host ~]# x11vnc -auth guess -display :0

Для однократного соединения с VNC сервером можно использовать такой вариант команды:

[root@vnc-host ~]# x11vnc -rfbauth /root/.vnc/passwd -auth guess -display :0

Он самостоятельно найдёт и использует XAUTHORITY=/var/run/kdm/A:0-NVTXPb, запустится на порту 5900, возьмёт пароль из файла /root/.vnc/passwd, подождёт одного соединения клиента и когда клиент завершит сессию сервер также завершится.
Забегая вперёд, до инсталяции VNC клиента, приведу удобную команду для однократного запуска vnc сервера через ssh туннель на удалённой машине.

[user001@home ~]$ ssh -L localhost:5900:localhost:5900 root@192.168.12.252 'x11vnc -quiet -once -timeout 20 -localhost -auth guess -display :0 -rfbauth /root/.vnc/passwd'& sleep 5; vncviewer localhost:0; sleep 1; echo

Здесь устанавливается ssh канал на хост 192.168.12.252 и через него пробрасывается локальный порт 5900 на удалённый 5900 и там запускается x11vnc.
x11vnc ждёт 20 секунд соединения от клиента (-timeout 20). Если клиент не соединится x11vnc завершится.
Выжидается 5 секунд чтобы с удалённой стороны x11vnc успел стартануть и открыть порт и на этой стороне запускается vncviewer на открытый локальный порт 5900.
После завершения vncviewer выжидается 1 секунда и печатается эхо чтобы пользователю стало видно что команда завершилась.
Со стороны удалённой машины x11vnc отваливается самостоятельно когда обнаружит отсоединение клиента (-once она ставит и по умолчанию) и как только это происходит завершается и сам туннель.
Это позволяет не запоминать PID ssh туннеля и затем “убивать” его после завершения vncviewer.
Опции:
-quiet — уменьшает количество диагностических сообщений;
-rfbauth /root/.vnc/passwd — задаёт файл с паролем для аутентификации (без неё vnc откроется без пароля)

Для того чтобы x11vnc запустился как фоновый процесс и многократно ждал соединений нужно использовать такую команду:

[root@vnc-host ~]# x11vnc -many -background -auth guess -display :0 -rfbauth /root/.vnc/passwd

Такую команду можно запускать при каждом старте X сервера.
После запуска можем посмотреть процесс и порт.

[root@vnc-host ~]# ps afx | grep -v grep | grep x11vnc
25374 ?        Ss     0:07 x11vnc -many -background -rfbauth /root/.vnc/passwd -auth guess -display :0

[root@vnc-host ~]# netstat -nlp -A inet | grep 5900
tcp        0      0 0.0.0.0:5900                0.0.0.0:*                   LISTEN      25374/x11vnc        

И теперь подключаемся с другой машины.

[user001@home ~]$ sudo yum install tigervnc
[user001@home ~]$ vncviewer 192.168.12.252:0

TigerVNC Viewer 32-bit v1.3.0 (20140319)
Built on Mar 19 2014 at 17:09:08
Copyright (C) 1999-2011 TigerVNC Team and many others (see README.txt)
See http://www.tigervnc.org for information on TigerVNC.

Sun Feb 15 23:33:45 2015
 CConn:       connected to host 192.168.12.252 port 5900
 CConnection: Server supports RFB protocol version 3.8
 CConnection: Using RFB protocol version 3.8

Sun Feb 15 23:33:49 2015
 PlatformPixelBuffer: Using default colormap and visual, TrueColor, depth 24.
 CConn:       Using pixel format depth 24 (32bpp) little-endian rgb888
 CConn:       Using Tight encoding

Материалы для детального изучения.
man x11vnc
http://www.karlrunge.com/x11vnc/
Как запустить VNC на виртуальном DISPLAY :1 читайте статью.

Leave a Reply