Удаленный рабочий стол на ubuntu

Содержание:

Настройка VNC-сервера

Существует несколько способов запуска VNC, включая использование сценариев, привязку VNC к среде рабочего стола с помощью настольных инструментов и использование xinetd для прослушивания VNC-соединений. Этот последний подход и описывается здесь, так как он позволяет запускать VNC так, что тот может использовать XDMCP-сервер. Прежде чем перейти к инструкциям по настройке VNC для запуска посредством xinetd, необходимо выбрать VNC-сервер.

Выбор VNC-сервера

Существует несколько программ VNC-сервера. (См. раздел Ресурсы). Некоторые из наиболее популярных: TightVNC, TigerVNC и RealVNC. В этой статье в качестве примера используется TightVNC. К сожалению, детали конфигурации зависят как от сервера, так и от дистрибутива, поэтому приведенные здесь инструкции нужно будет адаптировать к своему программному обеспечению.

Установка xinetd

Многие дистрибутивы устанавливают суперсервер xinetd по умолчанию, но не все. Так как описанный здесь метод предполагает использование xinetd, необходимо установить xinetd, если он еще не установлен. В большинстве дистрибутивов xinetd можно установить с помощью менеджера пакетов, например, вызывав apt-get install xinetd в дистрибутивах на основе Debian или zypper install xinetd в openSUSE.

Может также потребоваться настройка процесса запуска xinetd. Обычно для одноразового запуска можно использовать сценарий запуска System V (SysV):

# /etc/init.d/xinetd start

Для настройки автоматического запуска xinetd при загрузке компьютера требуется знание методов работы сценариев запуска своего дистрибутива. Как правило, это делается с помощью утилиты, такой как chkconfig (используется в Fedora, openSUSE и родственных дистрибутивах), update-rc.d (используется в Debian и родственных дистрибутивах) или rc-update (используется в Gentoo), примерно так:

# chkconfig xinetd on
# update-rc.d xinetd enable
# rc-update add xinetd default

Введите только одну из этих команд или найдите эквивалент для своего дистрибутива.

Заметим, что xinetd может не запускаться, если он не настроен на выполнение каких-либо служб. Так что, возможно, придется отложить его запуск до тех пор, пока вы не настроете xinetd для управления своим VNC-сервером.

Настройка xinetd

Серверы, которыми должен управлять xinetd, помещают файлы конфигурации в каталог /etc/xinetd.d. Таким образом, чтобы настроить xinetd на управление VNC, нужно создать или отредактировать файл с именем типа /etc/xinetd.d/vnc. (В некоторых дистрибутивах, таких как openSUSE, пакет VNC-сервера устанавливает такой файл.) В листинге 1 приведен пример.

Листинг 1. Пример настройки VNC для xinetd
service vnc
{
   disable     = no
   socket_type = stream
   protocol    = tcp
   wait        = no
   user        = nobody
   server      = /usr/bin/Xvnc
   server_args = -inetd -once -query localhost -geometry 1024x768 -depth 16
   type        = UNLISTED
   port        = 5900
}

Эта запись задает несколько параметров xinetd, большинство из которых нужно оставить как есть. Ниже перечислены те параметры, которые могут потребовать настройки.

  • service. VNC с разными параметрами можно запустить через несколько портов, но в этом случае в первой строке листинга 1 нужно присвоить VNC отдельное имя службы для каждого порта.
  • server. Этот параметр нужно изменить так, чтобы он указывал на главный двоичный файл VNC-сервера, который обычно называется Xvnc.
  • server_args. Некоторые из этих значений вы почти наверняка захотите изменить, как описано ниже.
  • port. VNC использует порты с номерами 5900 и выше. Можно запустить сервер с разными значениями параметров через разные порты. В этом случае каждому экземпляру нужно назначить свой номер порта.

Самая каверзная часть настройки xinetd — это настройка аргументов сервера. В качестве модели можно использовать аргументы, приведенные в листинге 1, изменив некоторые из них.

  • -query localhost. Этот параметр указывает, что сервер VNC X должен проверять систему localhost на аутентификацию XDMCP. Его можно изменить, если вы хотите использовать один компьютер в качестве транслятора для доступа к программам другого.
  • -geometry 1024x768. Этот параметр устанавливает виртуальное разрешение сеанса VNC. Заметим, что это разрешение не обязательно должно соответствовать разрешению обычного X-сервера, работающего на компьютере сервера. Можно создать несколько записей, работающих с разным разрешением, чтобы пользователи могли входить в VNC-сервер с тем разрешением, которое удобно для их локальных систем.
  • -depth 16. Этот параметр задает глубину цвета. Чем ниже значение, тем быстрее обновляется дисплей, но на экране с большим количеством цветов могут появиться искажения. Диапазон допустимых значений от 2 до 32.

Имеются многие другие параметры, и некоторые из них зависят от VNC-сервера. Обращайтесь к документации по своему серверу VNC.

Вопросы безопасности VNC

RFB не является безопасным протоколом; большинство VNC-клиентов и серверов не шифруют свои данные. (VNC шифрует свои собственные пароли, но при описанном здесь подходе эти пароли не используются.) Будьте осторожны при выборе способа и места установки VNC. Если вы хотите использовать VNC в незащищенной сети, возможны три варианта:

  • использовать виртуальную частную сеть (VPN);
  • туннелировать протокол через SSH;
  • использовать вариант VNC, поддерживающий шифрование, такой как TigerVNC с возможностью шифрования Transport Layer Security.

При включении окон входа VNC, как описано в этой статье, во внешний мир открываются, по крайней мере, два порта (VNC и XDMCP). Оба порта можно ограничить правилами межсетевого экрана, чтобы свести к минимуму риск злоупотреблений. Заметим, что порт XDMCP (UDP 177) должен быть открыт только для localhost, поэтому правило межсетевого экрана для него может быть весьма ограничивающим.

Подключение к VNC-серверу

Теперь попробуем подключиться с другого компьютера, используя VNC-клиент Remmina:

Изначально качество изображения низкое, но это можно изменить в настройках клиента:

Перед подключением надо открыть несколько портов на той машине, где мы установили VNC-сервер:

$ sudo ufw allow 5901:5903/tcp
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
----------------------------------------------------
5901:5903/tcp              ALLOW IN    Anywhere
5901:5903/tcp (v6)         ALLOW IN    Anywhere (v6)

Архитектура VNC и X server

В качестве графического интерфейса пользователя (GUI) в Linuxприменяется X Window System (сокращенно X). X — это необычный GUI в нескольких отношениях, в частности, это изначально сетевой интерфейс. X-сервер, по сути, представляет собой программу сетевого сервера. Программы сетевого сервера предоставляют клиентским программам доступ к локальным ресурсам, и это верно также для X-сервера. Особенность заключается в том, что в случае Х-сервера «локальные ресурсы» – это дисплей, клавиатура и мышь, с которыми работает пользователь. В самой распространенной конфигурации программы Х-клиента работают на том же компьютере, что и сервер. Таким образом, LibreOffice, GNU Image Manipulation Program (GIMP) или другие программы являются X-клиентами, использующими сетевые протоколы Х для приема данных от пользователя и отображения результатов на том же компьютере.

Однако когда X используется в сети, пользователь сидит за компьютером X-сервера, а X-клиентами служат программы, которые нужно запускать на другом компьютере. Для этой конфигурации требуется второй сетевой протокол, устанавливающий соединение. Таким вторым протоколом может быть telnet, Secure Shell (SSH) или X Display Manager Control Protocol (XDMCP). Сервер этого протокола удаленного входа работает на компьютере X-клиента, а клиент удаленного входа ― на компьютере X-сервера. Сервер удаленного входа запускает X-клиенты, которые, в свою очередь, устанавливают соединение с X-сервером. Рисунок 1 иллюстрирует это взаимодействие. Пунктирными стрелками обозначено начало сеанса. (В случае XDMCP XDMCP-клиент встроен в программу X-сервера.)

Рисунок 1. Для удаленного доступа X требуется клиент и сервер на обоих компьютерах

Кликните, чтобы увидеть увеличенное изображение

Эта конфигурация прекрасно работает во многих локальных сетях, но не лишена недостатков. Например, для нее нужно инициировать двусторонний сетевой протокол, а этому может помешать межсетевой экран или маршрутизатор Network Address Translation (NAT). (SSH устраняет это препятствие, позволяя туннелировать X-сеансы.) Кроме того, хотя существуют X-серверы для большинства платформ, они обычно не устанавливаются на компьютерах под управлением Windows. По этим и иным причинам многие предпочитают использовать другой протокол, Remote Frame Buffer (RFB), который реализован в семействе программ Virtual Network Computing (VNC).

VNC — это кроссплатформенный инструмент, который обеспечивает удаленный доступ к Linux, UNIX, Mac OS X, Windows и другим системам из клиента любого типа. Пользователь сидит за клиентским компьютером и обращается к удаленному серверному компьютеру. В Linux VNC-сервер либо зеркально отражает содержимое локального экрана Х-сервера на удаленный компьютер, либо содержит свой собственный X-сервер, способный работать независимо от того, что управляет локальным экраном. Результат показан на рисунке 2. Опять же, пунктирная стрелка указывает начало сеанса. Эта конфигурация устраняет необходимость в обратном сетевом соединении, а так как клиенты и серверы VNC имеются для многих операционных систем, одна и та же клиентская программа обеспечивает доступ к любому серверу.

Рисунок 2. В состав VNC-сервера входит X-сервер, способный взаимодействовать с локальными программами через X-клиент

Кликните, чтобы увидеть увеличенное изображение

Недостаток VNC заключается в том, что аутентификация RFB основана на паролях без имен пользователей. Таким образом, каждый пользователь должен запускать независимый сеанс VNC-сервера и устанавливать соединение с этим экземпляром VNC, указав правильный номер порта. Это требование терпимо для однопользовательской системы, но вызывает крайние неудобства при работе на многопользовательском компьютере.

Для решения этой проблемы можно объединить эти два подхода: перенастроить локальный XDMCP-сервер так, чтобы он помогал X-серверу, встроенному в VNC, обеспечить недостающую многопользовательскую аутентификацию. (Результирующая конфигурация иллюстрируется на рисунке 3. Пунктирная стрелка указывает начало сеанса.) Теперь, когда удаленные пользователи VNC обращаются к компьютеру VNC-сервера, они могут вводить имена пользователей и пароли доступа к своим собственным уникальным сеансам VNC, так что с компьютером могут работать сколько угодно пользователей.

Рисунок 3. Добавление XDMCP к конфигурации VNC обеспечивает повышенную гибкость

Кликните, чтобы увидеть увеличенное изображение

Step 2 — Configuring the VNC Server

The VNC server needs to know which commands to execute when it starts up. Specifically, VNC needs to know which graphical desktop environment it should connect to.

The commands that the VNC server runs at startup are located in a configuration file called in the folder under your home directory. The startup script was created when you ran the command in the previous step, but you’ll create your own to launch the Xfce desktop.

Because you are going to be changing how the VNC server is configured, first stop the VNC server instance that is running on port with the following command:

The output will look like this, although you’ll see a different PID:

Before you modify the file, back up the original:

Now create a new file and open it in a text editor, such as :

Then add the following lines to the file:

~/.vnc/xstartup

The first line is a shebang. In executable plain-text files on *nix platforms, a shebang tells the system what interpreter to pass that file to for execution. In this case, you’re passing the file to the Bash interpreter. This will allow each successive line to be executed as commands, in order.

The first command in the file, , tells VNC’s GUI framework to read the server user’s file. is where a user can make changes to certain settings of the graphical desktop, like terminal colors, cursor themes, and font rendering. The second command tells the server to launch Xfce. Whenever you start or restart the VNC server, these commands will execute automatically.

Save and close the file after adding these lines. If you used , do so by pressing , , then .

To ensure that the VNC server will be able to use this new startup file properly, you’ll need to make it executable:

Then restart the VNC server:

Notice that this time the command includes the option, which binds the VNC server to your server’s loopback interface. This will cause VNC to only allow connections that originate from the server on which it’s installed.

In the next step, you’ll establish an SSH tunnel between your local machine and your server, essentially tricking VNC into thinking that the connection from your local machine originated on your server. This strategy will add an extra layer of security around VNC, as the only users who will be able to access it are those that already have SSH access to your server.

You’ll see output similar to this:

With the configuration in place, you’re ready to connect to the VNC server from your local machine.

SSH Tunnel

You need to have SSH installed and configured.

Use the flag with x11vnc for it to bind to the local interface. Once that is done, you can use SSH to tunnel the port; then, connect to VNC through SSH.

$ ssh -t -L 5900:localhost:5900 remote_host 'x11vnc -localhost -display :0'

(You will likely have to provide passwords/passphrases to login from your current location into your remote_host Unix account; we assume you have a login account on remote_host and it is running the SSH server)

And then in another terminal window on your current machine run the command:

$ vncviewer -PreferredEncoding=ZRLE localhost:0

Многопользовательский режим (tigervnc-server)[править]

Примечание: К имеющемуся дисплею :0 подключиться этим способом не получится. VNC-сервер запускает новые дисплеи.

Устанавливаем пакет tigervnc-server:

apt-get install tigervnc-server

Есть две реализации разворачивания дополнительных X-серверов:

  • централизованный сервис vncserver, отвечающий за работу всех виртуальных дисплеев;
  • несколько сервисов vncserver@:<номер дисплея>

Рассмотрим оба этих способа, у каждого есть свои плюсы и недостатки

«Всё в одном сервисе»править

1. Добавьте в автозагрузку:

chkconfig vncserver on

2. Далее необходимо настроить виртуальные дисплеи, их количество и параметры запуска. Для это необходимо отредактировать файл /etc/sysconfig/vncservers. Пример содержимого файла:

VNCSERVERS="1:user1 2:user2"
VNCSERVERARGS="-geometry 800x600 -depth 16"
VNCSERVERARGS="-geometry 800x600 -localhost"

Переменные VNCSERVERARGS изменяет параметры по умолчанию для определенного дисплея (в квадратных скобках).
Заданные пользователи — user1 и user2 — должны существовать в системе. Также для успешного старта VNC-сервера необходимо обязательно задать пароли (ничего общего с системными они не имеют) для этих пользователей (запишутся в ~/.vnc/passwd):

# su - user1
$ vncpasswd

3. Запускаем сервис:

service vncserver start

После этого можете проверить прослушиваемые порты:

# netstat -ntlp | grep vnc
tcp        0      0 0.0.0.0:5901                0.0.0.0:*                   LISTEN      12414/Xvnc          
tcp        0      0 127.0.0.1:5902              0.0.0.0:*                   LISTEN      12522/Xvnc          
tcp        0      0 :::5901                     :::*                        LISTEN      12414/Xvnc          
tcp        0      0 ::1:5902                    :::*                        LISTEN      12522/Xvnc  

4. При подключении указываем номер дисплея (или номер порта), который соответствует необходимому пользователю:

vncviewer localhost:1
vncviewer localhost:5901

Примечание: Недостатком данного способа является то, что если у какого-либо пользователя зависнет сеанс или возникнет любая другая проблема, то починить это вы сможете только рестартом всего сервиса (в этом случае все сеансы завершаться, данные могут быть утеряны), перезапустить отдельный дисплей не получится.

Плюсом же является удобство администрирования с помощью единого файла настройки /etc/sysconfig/vncservers

Для небольшого количества (до 3-5) пользователей данный вариант является вполне «конкурентоспособным». Если же пользователей планируется большое количество, либо просто нужна возможность перезапуска отдельного дисплея, то воспользуйтесь вторым способом

«Каждый дисплей — отдельный сервис»править

1. Скопируйте необходимое количество (= кол-во юзеров VNC) юнитов vncserver@.service (после @ подставьте требуемый номер дисплея):

cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:1.service
cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:2.service

2. Приведите их к следующему виду (укажите имя пользователя и его домашнюю папку):

Description=Remote desktop service (VNC)
After=syslog.target network.target


Type=forking
User=user1

# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=-/usr/bin/vncserver -kill %i
ExecStart=/usr/bin/vncserver %i
PIDFile=/home/user1/.vnc/%H%i.pid
ExecStop=-/usr/bin/vncserver -kill %i
WantedBy=multi-user.target

Для изменения дефолтных параметров подключения допишите необходимые в команде ExecStart.

3. Обновите конфигурацию сервисов и добавьте в автозагрузку необходимые из созданных:

systemctl daemon-reload
chkconfig vncserver@:1 on
chkconfig vncserver@:2 on

4. Задайте пароль для всех пользователей (см. )

5. Теперь каждым пользовательским сеансом/дисплеем можно управлять отдельно:

service vncserver@:2 restart

Примечание: Используйте SSH-туннель для шифрации трафика:

  • добавьте в параметры запуска VNC-сервера ключ -localhost (запрещает подключение удаленным пользователям, не используя SSH туннель)
  • запустите на сервере сервис sshd
  • на клиентской машине создайте туннель: ssh <server’s IP-address> -p <SSH-port> -L 5902:localhost:5902
  • подключайтесь с клиентской машины (в другой консоли): vncviewer localhost:5902

Step 4 — Running VNC as a System Service

By setting up the VNC server to run as a systemd service you can start, stop, and restart it as needed, like any other service. You can also use systemd’s management commands to ensure that VNC starts when your server boots up.

First, create a new unit file called :

The symbol at the end of the name will let us pass in an argument you can use in the service configuration. You’ll use this to specify the VNC display port you want to use when you manage the service.

Add the following lines to the file. Be sure to change the value of User, Group, WorkingDirectory, and the username in the value of PIDFILE to match your username:

/etc/systemd/system/vncserver@.service

The command stops VNC if it’s already running. The command starts VNC and sets the color depth to 24-bit color with a resolution of 1280×800. You can modify these startup options as well to meet your needs. Also, note that the command again includes the option.

Save and close the file.

Next, make the system aware of the new unit file:

Enable the unit file:

The following the sign signifies which display number the service should appear over, in this case the default as was discussed in Step 2.

Stop the current instance of the VNC server if it’s still running:

Then start it as you would start any other systemd service:

You can verify that it started with this command:

If it started correctly, the output should look like this:

Your VNC server is now ready to use whenever your server boots up, and you can manage it with commands like any other systemd service.

However, there won’t be any difference on the client side. To reconnect, start your SSH tunnel again:

Then make a new connection using your VNC client software to to connect to your server.

Порты VNC-сервера

При запуске первого экземпляра VNC-сервера без указания порта, сервер будет прослушивать порт 5901 (или :1). При запуске следующего экземпляра сервер будет прослушивать порт 5902 (или :2). Можно явно указать порт при запуске экземпляра сервера:

$ vncserver -depth 24 -geometry 1920x1080 :2

Посмотреть список запущенных серверов можно так:

$ ps -ef | grep vnc | awk '{print substr($0, 0, 60)}'
evgeniy    18949     1    1    8:58    tty1    00:00:40 Xtightvnc :1
evgeniy    19133     1    0    9:35    tty1    00:00:00 Xtightvnc :2
evgeniy    19245  1121    0    9:36    tty1    00:00:00 grep vnc

Остановим работу первого и второго экземпляра VNC-сервера:

$ vncserver -kill :1
$ vncserver -kill :2

Устанавливаем VNC-сервер в Ubuntu

Поскольку в последних версиях Ubuntu по умолчанию установлена графическая оболочка Gnome, инсталлировать и настраивать VNC мы будем, отталкиваясь именно от этого окружения. Весь процесс для удобства разделим на последовательные шаги, поэтому у вас не должно возникнуть трудностей с пониманием наладки работы интересующего инструмента.

Шаг 1: Установка необходимых компонентов

Как уже было сказано ранее, использовать мы будем официальное хранилище. Там находится самая свежая и стабильная версия VNC-сервера. Все действия производятся через консоль, потому начать стоит с ее запуска.

  1. Перейдите в меню и откройте «Терминал». Существует горячая клавиша Ctrl + Alt + T, которая позволяет сделать это быстрее.

Установите обновления для всех системных библиотек через .

Введите пароль для предоставления рут-доступа.

По окончании следует прописать команду и нажать на Enter.

Подтвердите добавление новых файлов в систему.

Ожидайте завершения инсталляции и добавления до появления новой строки ввода.

Теперь в Ubuntu присутствуют все необходимые компоненты, осталось только проверить их работу и провести настройку перед запуском удаленного рабочего стола.

Шаг 2: Первый запуск VNC-server

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

  1. В консоли напишите команду , отвечающую за запуск сервера.

Вам будет предложено задать пароль для своих рабочих столов. Здесь надо ввести любую комбинацию символов, но не менее пяти. При наборе символы отображаться не будут.

Подтвердите пароль, введя его повторно.

Вы будете уведомлены о том, что создан стартовый скрипт и новый виртуальный десктоп начал свою работу.

Шаг 3: Настройка VNC-сервера для полноценного функционирования

Если в предыдущем шаге мы только удостоверились в работоспособности установленных компонентов, сейчас нужно подготовить их для осуществления удаленного подключения к рабочему столу другого компьютера.

  1. Сначала завершите запущенный десктоп командой .

Далее стоит запустить файл конфигурации через встроенный текстовый редактор. Для этого введите .

Убедитесь, что файл имеет все строки, указанные ниже.

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80×24+10+10 -ls -title «$VNCDESKTOP Desktop» &
x-window-manager &

gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &

Если вы совершили какие-либо изменения, сохраните настройки нажатием клавиши Ctrl + O.

Выйти из файла можно нажатием на Ctrl + X.

Кроме всего, следует также пробросить порты, чтобы предоставить удаленный доступ. Поможет осуществить эту задачу команда .

После ее введения сохраните настройки, прописав .

Шаг 4: Проверка работы VNC-сервера

Последний шаг — проверка установленного и настроенного VNC-сервера в действии. Использовать для этого мы будем одно из приложений для управления удаленными рабочими столами. С его инсталляцией и запуском предлагаем ознакомиться далее.

  1. Сначала потребуется запустить сам сервер путем ввода .

Убедитесь в том, что процесс прошел корректно.

Приступайте к добавлению приложения Remmina из пользовательского репозитория. Для этого надо напечатать в консоли .

Нажмите на Enter для добавления новых пакетов в систему.

По завершении установки требуется обновить системные библиотеки .

Теперь осталось только собрать последнюю версию программы через команду .

Подтвердите операцию по инсталляции новых файлов.

Запустить Remmina можно через меню, нажав на соответствующий значок.

Здесь осталось только выбрать технологию VNC, прописать нужный IP-адрес и подключиться к десктопу.

Конечно, для подключения таким образом пользователю нужно знать внешний IP-адрес второго компьютера. Для определения этого существуют специальные онлайн-сервисы или дополнительные утилиты, добавляемые в Ubuntu. Детальную информацию по этой теме вы найдете в официальной документации от разработчиков ОС.

Теперь вы ознакомлены со всеми основными действиями, которые требуется выполнить для установки и настройки VNC-сервера под дистрибутив Ubuntu на оболочке Gnome.

Опишите, что у вас не получилось.
Наши специалисты постараются ответить максимально быстро.

С помощью x11vnc[править]

1. Установите пакет x11vnc-service (предназначен для популярных дистрибутивов с SystemD):

apt-get install x11vnc-service

2. Добавьте сервис в автозапуск и запустите его:

chkconfig x11vnc on
service x11vnc start

3. Укажите пароль для удаленного доступа (необходимо записать его в /root/.vnc/passwd):

# x11vnc --storepasswd 
Enter VNC password: 
Verify password:    
Write password to /root/.vnc/passwd?  /n

4. Параметры запускаемого сервисом сервера x11vnc указаны в скрипте запуска: /usr/sbin/x11vnc-start-daemon (x11vnc-service >= 0.2). Для внесения изменений — просто отредактируйте в нем последнюю строчку.

TODO:

Данный файл не является %config(noreplace), поэтому будет перезаписан при обновлении пакета!

В планах (когда потребуется внести какое-либо изменение в пакет) переместить параметры в отдельный конфигурационный файл.

5. Примеры настройки файла /lib/systemd/system/x11vnc.service для запуска x11vnc при старте дисплей менеджера (до авторизации пользователей):

Для дисплей менеджера lightdm:

Description=X11VNC Server
After=prefdm.service


User=root
Restart=on-failure
ExecStart=/usr/bin/x11vnc -auth /var/run/lightdm/root/:0 -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg /var/log/x11.log -rfbauth /root/.vnc/passwd


WantedBy=graphical.target

Для дисплей менеджера sddm:

Description=X11VNC Server
After=graphical.target


Restart=always
RestartSec=30
Type=simple
ExecStart=-/bin/bash -c "/usr/bin/x11vnc -display :0 -shared -dontdisconnect -many \
-auth $(ls /var/run/sddm/{*}) -rfbauth /root/.vnc/passwd -o /var/log/x11.log"


WantedBy=graphical.target

How to setup x11vnc

  • 3rd day of Chaos, in the yold 3176
  • 35 Comments

How to setup x11vnc to access with graphical login screen.

English version of this page under construction. You can read automatic translation.

В качестве альтернативного VNC-сервера в Linux мы рекомендуем использовать сервер x11vnc. Его преимущества перед сервером vino (установленном в Ubuntu по-умолчанию) в том, что он может загружаться сразу же со стартом X Window System (то есть прямо с login screen’ом, до того, как вы осуществите вход пользователя в систему), а также в гибкости настроек. Установка x11vnc позволяет подключаться к рабочему столу на этапе входа пользователя в систему, в отличии от других VNC-серверов, подгружаемых только одновременно со входом в систему. Ниже будут приведены краткие типовые инструкции по его настройке, так, чтобы сервер не отключался при входе в систему (недостаток многих решений, встречающихся в сети).

Итак, удаляем vino, в Ubuntu и Debian это:

Устанавливаем x11vnc

Генерируем пароль для доступа:

После этого пароль по-умолчанию сохраняется в /home/USERNAME/.vnc/passwd (где USERNAME – имя пользователя, под которым вы выполнили команду).

Теперь нам надо добавить автозагрузку сервера.

Если вы используете GDM:

Под рутом редактируем файл /etc/gdm/PreSession/Default (), где в самом конце добавим следующую строку:

Не забывайте в этой строке изменить ‘USERNAME’ в пути к паролю, на адрес вашей домашней папки (ну или любой другой путь, куда вы положите cгенерированный вами файл с паролем).

Также необходимо добавить одну строку GDM Custom Configuration file. Путь к этому файлу зависит от дистрибутива, может быть /etc/gdm/gdm-custom.conf, /etc/gdm/gdm.conf, в последних Ubuntu это, как правило, /etc/gdm/custom.conf:

В графическом менеджере LXDM:

Нужен файл – добавьте в него ту же самую строку запуска:

После этих несложных инструкций x11vnc должен автоматически запускаться со стартом X Window System (то есть для того, чтобы эти параметры вступили в силу – надо перезагрузить систему или непосредственно X11).

При использовании LightDM (в последних Ubuntu):

После установки x11vnc создайте файл /etc/init/x11vnc.conf, в который добавьте следующий код:

Соответственно, измените путь к файлу с паролем и параметры запуска x11vnc. После перезагрузки системы x11vnc будет готов к работе.

Описание параметров запуска x11vnc вы можете найти на этой странице.

Client-side caching

The RFB (VNC) protocol is odd when compared to other network graphics protocols, such as X11 and RDP, in that there is no provision for viewer-side caching of pixel data. While this makes the client easier to implement, there is a price to pay in terms of interactive response. For example, every re-exposure of a window or background region needs to have its (compressed) pixel data resent over the network. This effect is particularly noticeable for windows with complex or photo regions (such as a web browser window) that gets iconified and deiconified or re-exposed often.

x11vnc has an experimental and somewhat brute-force implementation of client-side caching. It is enabled via the -ncache option. When creating the RFB frame buffer in this mode, x11vnc allocates a very large scratch region below the top portion used for the actual (on-screen) pixel data. x11vnc can then use the RFB CopyRect command to instruct the viewer to move rectangles of pixel data into and out of the scratch region. These moves are done locally on the viewer side. In this way x11vnc can manage the scratch region to store and retrieve pixel data without having to resend it over the network.

x11vnc’s client-side caching mode can give noticeable interactive response improvements for many activities.

SSVNC 1.0.29 connected to a remote Debian 7 Linux Xsession

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *