Vnc: различия между версиями
Vovan (обсуждение | вклад) |
Vovan (обсуждение | вклад) (→Примеры сервисов) |
||
(не показано 56 промежуточных версий 3 участников) | |||
Строка 7: | Строка 7: | ||
установка | установка | ||
sudo su | sudo su | ||
− | + | apt install x11vnc | |
формирование файла с паролем | формирование файла с паролем | ||
Строка 17: | Строка 17: | ||
/root/.vnc/passwd | /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 | ||
+ | |||
+ | Со следующим содержимым: | ||
+ | <pre> | ||
+ | [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 | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | далее выполнить: | ||
+ | |||
+ | systemctl daemon-reload | ||
+ | systemctl enable x11vnc.service | ||
+ | |||
+ | проверить статус: | ||
+ | |||
+ | systemctl status x11vnc.service | ||
+ | |||
+ | проверить журнал: | ||
+ | |||
+ | journalctl -lf -u x11vnc.service | ||
+ | |||
+ | ==Примеры сервисов== | ||
+ | |||
+ | <pre> | ||
+ | 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 | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | 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 | ||
+ | |||
+ | |||
+ | </pre> | ||
+ | |||
+ | ===Для Alt Regular на сизифе=== | ||
<pre> | <pre> | ||
− | + | cat /etc/systemd/system/x11vnc.service | |
− | + | [Unit] | |
− | + | Description=x11vnc | |
− | 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> | </pre> | ||
− | + | ==Полезные параметры== | |
− | + | Параметр, который включает показ курсора на удалённом клиенте (актуально для клиента VNC Viewer под iPad) | |
− | + | -multiptr | |
− | |||
− | |||
− | + | [[Категория:Ubuntu]] | |
+ | |||
+ | [[Категория:Администрирование]] | ||
+ | |||
+ | |||
+ | ==Запустить контейнер с 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"
В результате при подключении получаем полотно из нескольких экранов.
Действие 2-ое: в настройках сервера идем на вкладку Extra Ports, и выставляем параметры согласно примеру рисунка 2
В итоге: при подключении к стандартному порту(5900), видим полотно из всех мониторов,
при подключении к 5901 - видим 1-й монитор
при подключении к 5902 - видим 2-ой монитор
Стоит обратить внимание, что при разных конфигурациях мониторов, нужно указывать отрицательные значения, как на рисунке 2.
Для двух FullHD мониторов получается так:
5901:1920x1080+0+0 5902:3840x2160+1920+0