Vnc: различия между версиями

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(Как systemd сервис)
(Примеры сервисов)
 
(не показаны 44 промежуточные версии 2 участников)
Строка 7: Строка 7:
 
установка
 
установка
 
  sudo su
 
  sudo su
  aptitude install x11vnc
+
  apt install x11vnc
  
 
формирование файла с паролем
 
формирование файла с паролем
Строка 17: Строка 17:
 
  /root/.vnc/passwd
 
  /root/.vnc/passwd
  
далее добавить до
 
  
exit 0
+
=VNC-server alt starterkit gnome3=
  
в файл
+
  x11vnc -auth /run/user/500/gdm/Xauthority -rfbauth /root/.vnc/passwd -display :1 -ncache 1 -rfbport 5905
 
 
  /etc/rc.local
 
 
 
код
 
 
 
<pre>
 
run_x11vnc() {
 
    x11vnc -dontdisconnect -display :0 \
 
        -auth /var/run/lightdm/root/:0 \
 
        -notruecolor -noxfixes -shared \
 
        -forever -rfbport 5900 -bg \
 
        -rfbauth /root/.vnc/passwd && run_ok=$?
 
 
 
    if [ $run_ok -eq "0" ]; then
 
        echo "DEBUG run_x11vnc: $(date) x11vnc RUN OK !!!" >> /var/log/boot.log
 
    else
 
        echo "DEBUG run_x11vnc: $(date) x11vnc FAILED!!!" >> /var/log/boot.log
 
        run_x11vnc
 
    fi
 
}
 
 
 
rerun_x11vnc() {
 
    is_running=$(ps aux | grep x11vnc | grep -v grep | wc -l)
 
    sleep 5s
 
    if [ $is_running -ne "1" ]; then
 
        echo "DEBUG rerun_x11vnc: $(date) vns was killed " >> /var/log/boot.log
 
        run_x11vnc
 
    fi
 
    rerun_x11vnc
 
}
 
 
 
rerun_x11vnc
 
 
 
</pre>
 
 
 
<code>run_x11vnc</code> -- это рекурсивная функция, которая будет вызывать себя на выполнения до тех пор пока команда
 
 
 
x11vnc -dontdisconnect -display :0 -auth /var/run/lightdm/root/:0 -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -rfbauth /root/.vnc/passwd
 
 
 
не выполнится корректно, т.е. пока в переменной <code>run_ok</code> не будет статус 0.
 
 
 
Другими словами, на этапе старта скриптов из
 
 
 
/etc/rc.local
 
 
 
по каким-то причинам еще нет дисплея 0 у подсистемы X11. Следовательно, команда
 
 
 
  x11vnc -dontdisconnect -display :0 -auth /var/run/lightdm/root/:0 -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -rfbauth /root/.vnc/passwd
 
 
 
проваливается с матюгами в логах при обычном старте. Поэтому такой костыль.
 
 
 
<code>rerun_x11vnc</code> --- это функция, бесконечно вызывающая саму себя с задержкой в 5 секунд и проверяющая запущенный процесс с x11vnc. Если он не запущен, то дергает функцию run_x11vnc. Сделана, т.к. при отсоединении от VNC процесс завершается.
 
То есть раз в 5 секунд эта функция "тикает" и проверяет наличие процесса. Если процесса нет, значит попытка запустить его, дёрнув функцию run_x11vnc
 
  
 
=Полезное=
 
=Полезное=
Строка 139: Строка 85:
 
WantedBy=multi-user.target
 
WantedBy=multi-user.target
  
 +
</pre>
 +
 +
<pre>
 
cat /etc/systemd/system/x11vnc-5901.service  
 
cat /etc/systemd/system/x11vnc-5901.service  
 
[Unit]
 
[Unit]
Строка 150: Строка 99:
 
User=root
 
User=root
 
Group=root
 
Group=root
 +
 +
[Install]
 +
WantedBy=multi-user.target
  
  
 
</pre>
 
</pre>
 +
 +
===Для Alt Regular на сизифе===
 +
 +
<pre>
 +
cat /etc/systemd/system/x11vnc.service
 +
[Unit]
 +
Description=x11vnc
 +
Requires=network-online.target
 +
After=network-online.target
 +
 +
[Service]
 +
Restart=on-failure
 +
ExecStart=x11vnc -auth /run/user/1000/gdm/Xauthority -rfbauth /root/.vnc/passwd -display :0 -clip 2560x1080+0+0 -rfbport 5900 -nonc -forever
 +
User=root
 +
Group=root
 +
 +
[Install]
 +
WantedBy=multi-user.target
 +
 +
</pre>
 +
 +
==Полезные параметры==
 +
 +
Параметр, который включает показ курсора на удалённом клиенте (актуально для клиента VNC Viewer под iPad)
 +
 +
-multiptr
 +
  
  
Строка 158: Строка 137:
  
 
[[Категория:Администрирование]]
 
[[Категория:Администрирование]]
 +
 +
 +
==Запустить контейнер с NoVNC для трансляции рабочего стола в браузер==
 +
 +
cat /opt/start-vnc-proxy.sh
 +
 +
<pre>
 +
#!/bin/bash
 +
 +
#teacher ro
 +
docker run --name teacher-ro --rm -p 8751:8081 -d -e REMOTE_HOST=172.17.0.1 -e REMOTE_PORT=5900 dougw/novnc
 +
 +
#teacher rw
 +
docker run --name teacher-rw --rm -p 8750:8081 -d -e REMOTE_HOST=172.17.0.1 -e REMOTE_PORT=5901 dougw/novnc
 +
</pre>
 +
 +
 +
cat /opt/stop-vnc-proxy.sh
 +
 +
<pre>
 +
#!/bin/bash
 +
docker stop teacher-ro teacher-rw
 +
</pre>
 +
 +
 +
=Виртуальный дисплей через VNC=
 +
==один дополнительный дисплей==
 +
<pre>
 +
cat << 'EOF' > ./q.sh
 +
#!/bin/bash
 +
 +
# find an unused output
 +
find -L /sys/class/drm -maxdepth 1 -type d -name 'card0-*' -exec sh -c 'if [ $(cat $0/status) = "disconnected" ]; then echo $0; fi' {} \;|cut -c22-|sort
 +
#on my system DP-1 is available
 +
OUTPUT=HDMI-A-2
 +
DIR=/sys/kernel/debug/dri/0/$OUTPUT
 +
 +
# override EDID (pretend to be a 1080P monitor with lots of resolution options)
 +
EDID_BASE64=AP///////wAebdVZ+KEJAAQXAQNoNR546jMxpFdRoCYQUFSna4CzAIGAlQBxT6nAgQCBwJBAAjqAGHE4LUBYLEUACSUhAAAeAAAA/QA4Sx5TDwAKICAgICAgAAAA/AAyNEVOMzMKICAgICAgAAAA/wAzMDRORFBISksyODgKAJ8=
 +
sudo bash -c "base64 -d <<<$EDID_BASE64 > $DIR/edid_override"
 +
 +
# force output on
 +
sudo sh -c "echo on > $DIR/force"
 +
 +
# add an additional resolution to the dummy display (optional)
 +
# check the xrandr output name, it may be different than the kernel name
 +
xrandr|grep ' connected'
 +
OUTPUT=HDMI-A-2
 +
RES="1920 1080"
 +
MODELINE=$(cvt $RES|awk '/Modeline/{print substr($0,10)}')
 +
MODE="1920x1080_60" #$(sed 's/^"\([^"]\+\).*/\1/' <<<$MODELINE | awk -F '_' {'print $1'})
 +
sh -c "xrandr --newmode $MODELINE"
 +
xrandr --addmode $OUTPUT $MODE
 +
 +
# Use the standard display configuration utility to configure the dummy display.
 +
# Match the resolution of your device and position the display.
 +
 +
x11vnc -auth /run/user/500/gdm/Xauthority -rfbauth /home/vslugin/.vnc/passwd -display :0 -clip 1440x900+0+180 -viewonly -rfbport 5900 -nonc -forever &
 +
 +
#docker run --name display1 -p 8081:8081 -d -e REMOTE_HOST=172.17.0.1 -e REMOTE_PORT=5900 dougw/novnc
 +
 +
EOF
 +
</pre>
 +
 +
==два дополнительных дисплея==
 +
<pre>
 +
cat << 'EOF' > ./q.sh
 +
#!/bin/bash
 +
 +
# find an unused output
 +
find -L /sys/class/drm -maxdepth 1 -type d -name 'card0-*' -exec sh -c 'if [ $(cat $0/status) = "disconnected" ]; then echo $0; fi' {} \;|cut -c22-|sort
 +
#on my system DP-1 is available
 +
OUTPUT=HDMI-A-2
 +
DIR=/sys/kernel/debug/dri/0/$OUTPUT
 +
 +
# override EDID (pretend to be a 1080P monitor with lots of resolution options)
 +
EDID_BASE64=AP///////wAebdVZ+KEJAAQXAQNoNR546jMxpFdRoCYQUFSna4CzAIGAlQBxT6nAgQCBwJBAAjqAGHE4LUBYLEUACSUhAAAeAAAA/QA4Sx5TDwAKICAgICAgAAAA/AAyNEVOMzMKICAgICAgAAAA/wAzMDRORFBISksyODgKAJ8=
 +
sudo bash -c "base64 -d <<<$EDID_BASE64 > $DIR/edid_override"
 +
 +
# force output on
 +
sudo sh -c "echo on > $DIR/force"
 +
 +
# add an additional resolution to the dummy display (optional)
 +
# check the xrandr output name, it may be different than the kernel name
 +
xrandr|grep ' connected'
 +
OUTPUT=HDMI-A-2
 +
RES="1920 1080"
 +
MODELINE=$(cvt $RES|awk '/Modeline/{print substr($0,10)}')
 +
MODE="1920x1080_60" #$(sed 's/^"\([^"]\+\).*/\1/' <<<$MODELINE | awk -F '_' {'print $1'})
 +
sh -c "xrandr --newmode $MODELINE"
 +
xrandr --addmode $OUTPUT $MODE
 +
 +
# Use the standard display configuration utility to configure the dummy display.
 +
# Match the resolution of your device and position the display.
 +
 +
#second display
 +
OUTPUT=VGA-1
 +
DIR=/sys/kernel/debug/dri/0/$OUTPUT
 +
sudo bash -c "base64 -d <<<$EDID_BASE64 > $DIR/edid_override"
 +
sudo sh -c "echo on > $DIR/force"
 +
xrandr|grep ' connected'
 +
RES="1920 1080"
 +
MODELINE=$(cvt $RES|awk '/Modeline/{print substr($0,10)}')
 +
MODE="1920x1080_60" #$(sed 's/^"\([^"]\+\).*/\1/' <<<$MODELINE | awk -F '_' {'print $1'})
 +
sh -c "xrandr --newmode $MODELINE"
 +
xrandr --addmode $OUTPUT $MODE
 +
 +
x11vnc -auth /run/user/500/gdm/Xauthority -rfbauth /home/vslugin/.vnc/passwd -display :0 -clip 1440x900+0+180 -viewonly -rfbport 5900 -nonc -forever &
 +
 +
x11vnc -auth /run/user/500/gdm/Xauthority -rfbauth /home/vslugin/.vnc/passwd -display :0 -clip 1440x900+4000+180 -viewonly -rfbport 5901 -nonc -forever &
 +
 +
#docker run --name display1 -p 8081:8081 -d -e REMOTE_HOST=172.17.0.1 -e REMOTE_PORT=5900 dougw/novnc
 +
 +
#docker run --name display2 -p 8082:8081 -d -e REMOTE_HOST=172.17.0.1 -e REMOTE_PORT=5901 dougw/novnc
 +
 +
EOF
 +
</pre>
 +
 +
=Настройка NOVNC read-only на Windows для дфухмониторной конфигурации=
 +
 +
[https://wiki.nntc.nnov.ru/images/d/d7/Tightvnc.zip скачать файл установщика Tightvnc.zip ]
 +
 +
Действие 1-ое: в настройках сервера на вкладке Server ("Update Handling")
 +
установить галку в чекбоксе "Use mirror driver if avaliable"
 +
 +
 +
[[image:vncwin1.jpg|left|800px|thumb|Рис. 1 - Вкладка Server]]
 +
<br clear="all">
 +
В результате при подключении получаем полотно из нескольких экранов.
 +
 +
<br clear="all">
 +
 +
Действие 2-ое: в настройках сервера идем на вкладку Extra Ports, и выставляем параметры согласно примеру рисунка 2
 +
 +
[[image:vncwin2.jpg|left|800px|thumb|Рис. 2 - Вкладка Extra Ports]]
 +
<br clear="all">
 +
В итоге: при подключении к стандартному порту(5900), видим полотно из всех мониторов, <br>
 +
при подключении к 5901 - видим 1-й монитор<br>
 +
при подключении к 5902 - видим 2-ой монитор<br>
 +
 +
<b>Стоит обратить внимание, что при разных конфигурациях мониторов, нужно указывать отрицательные значения, как на рисунке 2.<br></b>
 +
Для двух FullHD мониторов получается так:<br>
 +
 +
5901:1920x1080+0+0
 +
5902:3840x2160+1920+0

Текущая версия на 20:51, 22 апреля 2024

VNC-server ubuntu

проверено на Ubuntu 14.04.1 MATE i386

--Vovan (обсуждение) 16:15, 15 марта 2015 (UTC)

установка

sudo su
apt install x11vnc

формирование файла с паролем

x11vnc -storepasswd

результат формирования пароля будет в файле

/root/.vnc/passwd


VNC-server alt starterkit gnome3

x11vnc -auth /run/user/500/gdm/Xauthority -rfbauth /root/.vnc/passwd -display :1 -ncache 1 -rfbport 5905

Полезное

Трансляция рабочего стола преподавателя

транслируем только левый дисплей в двухмониторной конфигурации

x11vnc -clip 1920x1080+0+0 -display :0 -viewonly -shared -rfbport 5900 -rfbauth .vnc/passwd

Как systemd сервис

Создать файл, например:

/etc/systemd/system/x11vnc.service 

Со следующим содержимым:

[Unit]
Description=x11vnc
Requires=network-online.target
After=network-online.target

[Service]
Restart=on-failure
ExecStart=/usr/bin/x11vnc -dontdisconnect -display :0 -auth /var/run/lightdm/root/:0 -shared -forever -rfbport 5900 -rfbauth /root/.vnc/passwd
User=root
Group=root

[Install]
WantedBy=multi-user.target


далее выполнить:

systemctl daemon-reload
systemctl enable x11vnc.service

проверить статус:

systemctl status x11vnc.service

проверить журнал:

journalctl -lf -u x11vnc.service

Примеры сервисов

cat /etc/systemd/system/x11vnc.service 
[Unit]
Description=x11vnc
Requires=network-online.target
After=network-online.target

[Service]
Restart=on-failure
ExecStart=/usr/bin/x11vnc -dontdisconnect -display :0 -viewonly -shared -auth /var/run/lightdm/root/:0 -forever -rfbport 5900 -rfbauth /root/.vnc/passwd
User=root
Group=root

[Install]
WantedBy=multi-user.target

cat /etc/systemd/system/x11vnc-5901.service 
[Unit]
Description=x11vnc
Requires=network-online.target
After=network-online.target

[Service]
Restart=on-failure
ExecStart=/usr/bin/x11vnc -dontdisconnect -display :0 -auth /var/run/lightdm/root/:0 -forever -rfbport 5901 -rfbauth /root/.vnc/passwd
User=root
Group=root

[Install]
WantedBy=multi-user.target


Для Alt Regular на сизифе

cat /etc/systemd/system/x11vnc.service 
[Unit]
Description=x11vnc
Requires=network-online.target
After=network-online.target

[Service]
Restart=on-failure
ExecStart=x11vnc -auth /run/user/1000/gdm/Xauthority -rfbauth /root/.vnc/passwd -display :0 -clip 2560x1080+0+0 -rfbport 5900 -nonc -forever
User=root
Group=root

[Install]
WantedBy=multi-user.target

Полезные параметры

Параметр, который включает показ курсора на удалённом клиенте (актуально для клиента VNC Viewer под iPad)

-multiptr


Запустить контейнер с NoVNC для трансляции рабочего стола в браузер

cat /opt/start-vnc-proxy.sh

#!/bin/bash

#teacher ro
docker run --name teacher-ro --rm -p 8751:8081 -d -e REMOTE_HOST=172.17.0.1 -e REMOTE_PORT=5900 dougw/novnc

#teacher rw
docker run --name teacher-rw --rm -p 8750:8081 -d -e REMOTE_HOST=172.17.0.1 -e REMOTE_PORT=5901 dougw/novnc


cat /opt/stop-vnc-proxy.sh

#!/bin/bash
docker stop teacher-ro teacher-rw


Виртуальный дисплей через VNC

один дополнительный дисплей

cat << 'EOF' > ./q.sh
#!/bin/bash

# find an unused output
find -L /sys/class/drm -maxdepth 1 -type d -name 'card0-*' -exec sh -c 'if [ $(cat $0/status) = "disconnected" ]; then echo $0; fi' {} \;|cut -c22-|sort
#on my system DP-1 is available
OUTPUT=HDMI-A-2
DIR=/sys/kernel/debug/dri/0/$OUTPUT

# override EDID (pretend to be a 1080P monitor with lots of resolution options)
EDID_BASE64=AP///////wAebdVZ+KEJAAQXAQNoNR546jMxpFdRoCYQUFSna4CzAIGAlQBxT6nAgQCBwJBAAjqAGHE4LUBYLEUACSUhAAAeAAAA/QA4Sx5TDwAKICAgICAgAAAA/AAyNEVOMzMKICAgICAgAAAA/wAzMDRORFBISksyODgKAJ8=
sudo bash -c "base64 -d <<<$EDID_BASE64 > $DIR/edid_override"

# force output on
sudo sh -c "echo on > $DIR/force"

# add an additional resolution to the dummy display (optional)
# check the xrandr output name, it may be different than the kernel name
xrandr|grep ' connected'
OUTPUT=HDMI-A-2
RES="1920 1080"
MODELINE=$(cvt $RES|awk '/Modeline/{print substr($0,10)}')
MODE="1920x1080_60" #$(sed 's/^"\([^"]\+\).*/\1/' <<<$MODELINE | awk -F '_' {'print $1'})
sh -c "xrandr --newmode $MODELINE"
xrandr --addmode $OUTPUT $MODE

# Use the standard display configuration utility to configure the dummy display.
# Match the resolution of your device and position the display.

x11vnc -auth /run/user/500/gdm/Xauthority -rfbauth /home/vslugin/.vnc/passwd -display :0 -clip 1440x900+0+180 -viewonly -rfbport 5900 -nonc -forever &

#docker run --name display1 -p 8081:8081 -d -e REMOTE_HOST=172.17.0.1 -e REMOTE_PORT=5900 dougw/novnc

EOF

два дополнительных дисплея

cat << 'EOF' > ./q.sh
#!/bin/bash

# find an unused output
find -L /sys/class/drm -maxdepth 1 -type d -name 'card0-*' -exec sh -c 'if [ $(cat $0/status) = "disconnected" ]; then echo $0; fi' {} \;|cut -c22-|sort
#on my system DP-1 is available
OUTPUT=HDMI-A-2
DIR=/sys/kernel/debug/dri/0/$OUTPUT

# override EDID (pretend to be a 1080P monitor with lots of resolution options)
EDID_BASE64=AP///////wAebdVZ+KEJAAQXAQNoNR546jMxpFdRoCYQUFSna4CzAIGAlQBxT6nAgQCBwJBAAjqAGHE4LUBYLEUACSUhAAAeAAAA/QA4Sx5TDwAKICAgICAgAAAA/AAyNEVOMzMKICAgICAgAAAA/wAzMDRORFBISksyODgKAJ8=
sudo bash -c "base64 -d <<<$EDID_BASE64 > $DIR/edid_override"

# force output on
sudo sh -c "echo on > $DIR/force"

# add an additional resolution to the dummy display (optional)
# check the xrandr output name, it may be different than the kernel name
xrandr|grep ' connected'
OUTPUT=HDMI-A-2
RES="1920 1080"
MODELINE=$(cvt $RES|awk '/Modeline/{print substr($0,10)}')
MODE="1920x1080_60" #$(sed 's/^"\([^"]\+\).*/\1/' <<<$MODELINE | awk -F '_' {'print $1'})
sh -c "xrandr --newmode $MODELINE"
xrandr --addmode $OUTPUT $MODE

# Use the standard display configuration utility to configure the dummy display.
# Match the resolution of your device and position the display.

#second display
OUTPUT=VGA-1
DIR=/sys/kernel/debug/dri/0/$OUTPUT
sudo bash -c "base64 -d <<<$EDID_BASE64 > $DIR/edid_override"
sudo sh -c "echo on > $DIR/force"
xrandr|grep ' connected'
RES="1920 1080"
MODELINE=$(cvt $RES|awk '/Modeline/{print substr($0,10)}')
MODE="1920x1080_60" #$(sed 's/^"\([^"]\+\).*/\1/' <<<$MODELINE | awk -F '_' {'print $1'})
sh -c "xrandr --newmode $MODELINE"
xrandr --addmode $OUTPUT $MODE

x11vnc -auth /run/user/500/gdm/Xauthority -rfbauth /home/vslugin/.vnc/passwd -display :0 -clip 1440x900+0+180 -viewonly -rfbport 5900 -nonc -forever &

x11vnc -auth /run/user/500/gdm/Xauthority -rfbauth /home/vslugin/.vnc/passwd -display :0 -clip 1440x900+4000+180 -viewonly -rfbport 5901 -nonc -forever &

#docker run --name display1 -p 8081:8081 -d -e REMOTE_HOST=172.17.0.1 -e REMOTE_PORT=5900 dougw/novnc

#docker run --name display2 -p 8082:8081 -d -e REMOTE_HOST=172.17.0.1 -e REMOTE_PORT=5901 dougw/novnc

EOF

Настройка NOVNC read-only на Windows для дфухмониторной конфигурации

скачать файл установщика Tightvnc.zip

Действие 1-ое: в настройках сервера на вкладке Server ("Update Handling") установить галку в чекбоксе "Use mirror driver if avaliable"


Рис. 1 - Вкладка Server


В результате при подключении получаем полотно из нескольких экранов.


Действие 2-ое: в настройках сервера идем на вкладку Extra Ports, и выставляем параметры согласно примеру рисунка 2

Рис. 2 - Вкладка Extra Ports


В итоге: при подключении к стандартному порту(5900), видим полотно из всех мониторов,
при подключении к 5901 - видим 1-й монитор
при подключении к 5902 - видим 2-ой монитор

Стоит обратить внимание, что при разных конфигурациях мониторов, нужно указывать отрицательные значения, как на рисунке 2.
Для двух FullHD мониторов получается так:

5901:1920x1080+0+0
5902:3840x2160+1920+0