Debian x11vnc server настройка

Обновлено: 02.07.2024

В ходе решения своего частного вопроса по рекомендации был опробован альтернативный вариант доступа в ЛВС к удалённому рабочему столу Linux с использованием системы VNC, работающей по протоколу RFB.

Как известно, недостатком ПО vino является возможность получить доступ к удалённому рабочему столу Linux только при условии наличия уже активного графического сеанса пользователя.

Особенности установки vino в Linux Mint 19 читайте в этой заметке.

Пишут, что x11vnc свободен от такого недостатка vino. Но и здесь не обошлось без "ложки дёгтя". При использовании lightdm пароль для входа пользователя ввести не удастся. Поэтому для использования x11vnc Вам необходимо будет сменить lightdm на mdm, либо найти способ устранения данного явления.

Ниже приводятся команды, в результате выполнения которых x11vnc будет установлен и запущен, после чего можно осуществлять соединение с удалённым компьютером.

Выполните в терминале

sudo mkdir /etc/x11vnc && sudo apt install x11vnc && sudo x11vnc --storepasswd /etc/x11vnc/passwd

После выполнения указанных трёх команд система запросит ввести пароль для доступа по VNC. Данный пароль не связан с Вашей учётной записью пользователя в системе и имеет отношение исключительно к VNC. Вам необходимо его придумать.

Далее создайте файл x11vnc.service :

sudo gedit /lib/systemd/system/x11vnc.service (Ubuntu)

sudo xed /lib/systemd/system/x11vnc.service (Linux Mint)

Примечание. Создав псевдоним, соответствующий в моей системе текстовому редактору xed (подробности), всегда ввожу gedit.

[Unit]
Description=Start x11vnc at startup.
After=multi-user.target

Выполните в терминале:

sudo systemctl enable x11vnc.service && sudo systemctl start x11vnc.service

Для подключения к удалённому рабочему столе используйте Remmina с отключённым шифрованием


или любое другое подходящее ПО, например RealVNC viewer (на англ. языке).

Полностью процесс инсталляции и настройки выглядит следующим образом:

Сносим vnc-сервер по умолчанию:
sudo apt-get remove vino

Ставим x11vnc:
sudo apt-get install x11vnc

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

(не забываем выставить ему chmod +x и поменять имя пользователя в пути параметра rfbauth на реальное).

Параметры:
dontdisconnect не отключать клиентов при новом соединении;
display :0 какой дисплей использовать;
shared для подключения более одного пользователя;
noxfixes что-то связанное с отрисовкой курсора;
forever не закрывать x11vnc после разрыва соединения;
rfbport 5900 какой порт использовать;
bg запускать в фоне. Последние два параметра это лог и файл паролей [1].

Добавляем опцию (уже существует, надо найти и раз комментировать) автозагрузки в файл /etc/lightdm/lightdm.conf:
greeter-setup-script=/home/user/x11vnc_start.sh

Перезагружаем сервер и проверяем доступность сервера на этапе ввода пароля пользователем:
sudo reboot
Если не работает, то скорей всего не стартуют X'ы, из-за отсутствия монитора. Выполняем следующие. Убедитесь, что к видеокарте не подсоединено ничего лишнего, кроме монитора (в моем случае монитор должен быть подсоединен через тюнер), то есть всё установлено так, как и должно в дальнейшем использоваться.


Далее нужно сохранить информацию EDID Вашего монитора. Снова открываем NVIDIA X Server Settings:


Option "CustomEDID" "CRT-0:/root/edid.bin"

Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce 9600 GT"
Option "CustomEDID" "CRT-0:/root/edid.bin"
EndSection

Снова перезагрузите компьютер. Если загрузка прошла нормально, то будем двигаться дальше.

Option "ConnectedMonitor" "CRT-0"
Option "ExactModeTimingsDVI" "TRUE"

Option "metamodes" "CRT-0: 1280x1024_60 +0+0"

Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "TwinView" "0"
Option "ConnectedMonitor" "CRT-0"
Option "ExactModeTimingsDVI" "TRUE"
Option "TwinViewXineramaInfoOrder" "CRT-0"
Option "metamodes" "CRT-0: 1280x1024_60 +0+0"
SubSection "Display"
Depth 24
EndSubSection
EndSection

И последний этап.

С линуксом жизнь становится интересней, я бы даже сказал экспериментальней!
Меня потянуло на эксперименты с ssh, и то, что я получил в итоге — доступ с работы к домашнему компу — мне очень понравилось! Еще бы — классно управлять домашним компом, обновлять его и т.п. С девушкой даже с помощью festival разговаривал)))
Однако, захотелось пойти дальше, интересно, можно ли настроить удаленный доступ к рабочему столу, как позволяет это RAdmin в Windows? Можно конечно! Надо только настроить))

Покопался в интернете, нашел несколько статей про VNC — Virtual Network Computing, решил такое счастье сделать и у себя!
Для этого сначала необходимо было поставить несколько утилит:

sudo aptitude install vnc4-common vnc4server xvnc4viewer

Эти утилиты необходимы непосредственно для того, чтобы запускать удаленный сервер (vnc4server) и подключаться к нему с удаленного клиента (xvnc4viewer).
Установили! Теперь дело остается за малым: сначала нужно запустить vnc-сервер, а потом подключиться к нему.
Для запуска удаленного сервера, нужно в консоли набрать

Если это первый запуск vncserver в системе с этой учётной записью пользователя, тогда вы должны ввести пароль, который клиенты будут использовать при подключении, после чего запустится сервер, который будет доступен на порту 5901. Кстати, при запуске сервера в консоль выведется номер дисплея (виртуального), на котором он будет доступен, отсчет ведется с 1 (так как 0 — текущий дисплей). Пример запуска:

$ vncserver
New 'Voyageur:1 (igor)' desktop is Voyageur:1
Starting applications specified in /home/igor/.vnc/xstartup
Log file is /home/igor/.vnc/Voyageur:1.log

Здесь строчка New 'Voyageur:1 (igor)' desktop is Voyageur:1 как раз говорит о том, что у меня компе запустился сервер на дисплее 1, доступен он на порту 5901.
Если vncserver запустить еще раз, то загрузится новый терминальный сервер :2 на порту 5902 и т.д.
Теперь попробуем зайти на этот сервер с удаленной машины. Для этого необходимо в консоли удаленного клиента ввести команду:

В этой команде __hostname__ — это доменное имя или ip машины, на которой запущен удаленный сервер. Далее необходимо будет ввести пароль и в результате появится приблизительно вот такое окно:


Немного не то я ожидал увидеть если честно)) Начал разбираться, и оказалось, что vncserver запускает лишь новую сессию, а не подключается к текущей, именно для этого и нужны виртуальные дисплеи. А в этой сессии запущены twm (Tab Window Manager for the X Window System) и xterm.
Между прочим это все добро запускается из скрипта

/.vnc/xtartup, который можно редактировать, удаляя ненужные и добавляя свои строчки запуска необходимых приложений. В самом верху скрипта есть небольшой комментарий:

То есть, чтобы получить нормальный рабочий стол, нужно раскомментировать 2 строчки. Я их раскомментировал, но ничего хорошего из этого у меня не вышло.
Посмотрел я на этот twm, и решил, что с этим убожеством работать нельзя. Я установил fluxbox (занимает всего 6 Мб) и в скрипте xstartup заменил строчку

В итоге у меня получилось вот так:


Нормально для работы. Но не айс! Оперу можно запустить, еще некоторые приложения, но далеко не все (приложения kde выламываются)! Пробовал я вместо fluxbox'a запустить kde, но не пошло… Играет приветствие входа в систему, но вылетает окно с крахом плазмы и все, черный экран, занавес…

В итоге я получил удаленный доступ, но не такой как хотел! Мне-то хотелось иметь доступ к текущему рабочему столу, а не к мифическому дисплею 1, на котором загружается fluxbox, но не kde.

Что делать? Надо копать еще.
Я поискал в репозиториях пакеты, в названии которых присутствует «vnc», список оказался не очень большой, я начал читать комментарии к утилитам и библиотекам… В самом конце списка я увидел такую строчку:

p xvnc4viewer - Virtual network computing client software for X

Очень похоже на то, что мне нужно!
Я установил x11vnc. man у этой утилиты знатный, несколько тысяч строк)) После небольшого его изучения я более менее разобрался с процедурой запуска и назначением утилиты.
Итак, x11vnc является фактически удаленным сервером (как и vncserver), но позволяет получать доступ к уже существующей X-сессии!
На машине, к которой необходимо подключиться:

Эта команда позволит позаимствовать пароль для подключения к серверу из файла

/.vnc/passwd (тут лежит пароль, который был задан при первом запуске vncserver). Далее непосредственно запустим x11vnc:

x11vnc -usepw -display :0

Опция -usepw задействует использования пароля при подключении к серверу, -display :0 — запускает сервер на нулевом дисплее (так, где открыта текущая X-сессия).
Теперь мы с удаленной машины можем подключиться к текущей X-сессии, выполнив


При закрытии окна удаленного рабочего стола, завершается и работа x11vnc (на сервере)
Таким образом, я получил то, что хотел))))
Напоследок приведу несколько опций для утилит vncserver, x11vnc и vncviewer, облегчающих траффик и жизнь))

Довольно часто может понадобиться подключиться к удаленному компьютеру. Если это сервер, то можно подключиться по ssh. Но если это домашний компьютер, то намного удобнее использовать графическую оболочку. Во многих случаях это позволяет намного быстрее выполнить привычные обычному пользователю действия. Есть несколько способов и несколько протоколов, с помощью которых можно получить удаленный доступ к графическому интерфейсу, но самый популярный и самый используемый из них - VNC.

В этой небольшой статье будет рассмотрена настройка x11vnc на Ubuntu. Мы погорим о том как установить VNC в Ubuntu, а также как добавить его в автозагрузку с помощьюs systemd. А теперь перейдем непосредственно к инструкции.

Установка x11vnc в Ubuntu 16.04

Один из самых популярных VNC серверов для Linux это x11vnc, его мы и будем устанавливать. Этот VNC сервер распространяется с открытым исходным кодом и его особенность в том, что он позволяет подключиться к уже существующему сеансу X сервера. Это удобно не только для доступа через интернет, но и для того чтобы по локальной сети управлять компьютером с помощью смартфона.

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

sudo apt install x11vnc

Настройка x11vnc в Ubuntu

Когда установка VNC ubuntu будет завершена, мы сможем перейти к настройке. Сначала создадим пароль для нашего сервера:

x11vnc -storepasswd "пароль" /etc/x11vnc.pass


Команда x11vnc с опцией -storepasswd сохраняет пароль в файл, предварительно его зашифровав. Сделаем этот файл доступным для чтения, чтобы x11vnc смог его прочитать:

sudo chmod ugo+r /etc/x11vnc.pass

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

x11vnc -noxdamage -shared -dontdisconnect -many -noxfixes -rfbauth /etc/x11vnc.pass


  • -rfbauth — использовать пароль для аутентификации пользователей из файла;
  • -rfbport — порт, на котором будет работать VNC сервер;
  • -bg — работать в фоновом режиме;
  • -shared — разрешить подключаться одновременно нескольким пользователям;
  • -dontdisconnect — не отключать подключенных пользователей при подключении нового;
  • -many — не завершать работу сервера после отключения первого клиента.

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

Вот такую рекурсию можно поймать, если подключаться локально:


Автозагрузка x11vnc с помощью systemd

Если все верно, можно создать скрипт для автоматического запуска во время старта системы. Для этого мы будем использовать systemd:

[Unit]
Description=Start x11vnc at startup.
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -noxdamage -shared -dontdisconnect -many -noxfixes -rfbauth /etc/x11vnc.pass
[Install]
WantedBy=multi-user.target

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

sudo systemctl daemon-reload

И делаем автозапуск x11vnc ubuntu:

sudo systemctl enable x11vnc.service

Также можно запустить программу сейчас:

sudo systemctl start x11vnc.service

sudo systemctl status x11vnc.service

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

sudo vi /bin/x11vncstart

!/bin/bash
x11vnc -rfbauth /etc/x11vnc.pass -noxdamage -bg -shared -dontdisconnect -many -noxfixes &

Затем дайте этому скрипту права на выполнение:

chmod ugo+x /bin/x11vncstart

Теперь вы можете запускать этот скрипт когда нужен x11vnc или добавить его в автозагрузку с помощью утилиты автоматически запускаемые приложения. Как это сделать описано в статье как добавить скрипт в автозагрузку Ubuntu.

Выводы

Вот и все, настройка vnc Ubuntu завершена. Теперь вы знаете как выполняется установка x11vnc в Ubuntu 18.04. Это не настолько сложно, как может показаться на первый взгляд. Если вам нужен другой VNC сервер, который бы позволял создавать новые сеансы, а не подключаться к существующим, то смотрите статью о том как установить TigerVNC в Ubuntu. Надеюсь информация была полезной, если остались вопросы, спрашивайте в комментариях!





Оцените статью:

(7 оценок, среднее: 4,71 из 5)

Об авторе

19 комментариев

x11vnc.service - Start x11vnc at startup.
Loaded: loaded (/lib/systemd/system/x11vnc.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Пт 2016-12-16 14:06:40 MSK; 7min ago
Process: 2571 ExecStart=/usr/bin/x11vnc -rfbauth /etc/x11vnc.pass -noxdamage -shared -dontdisconnect -many -noxfixes (code=exited, status=1/FAILURE)
Main PID: 2571 (code=exited, status=1/FAILURE)

Решил проблему так : rm -r /tmp/.X11-unix в статусе пишет все ок,только vnc-сервер по моему не стартует в автозагрузке

Не работает .
Статья написана просто так, видимо ничего не проверялось на практике.
Сервис не стартует и все тут.

Всё работает. Поменяйте строку запуска на ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared

Спасибо! Помогло!
И кстати многие команды надо выполнять с sudo!

x11vnc как поставить пароль что при входе удаленно на компьютер запрашивал пароль
пробовал так -storepasswd пишет что пароль изменил но при входе удаленно не запрашивает сразу попадаю на компьютер

-rfbauth — использовать пароль для аутентификации пользователей из файла;

Нет, у меня руки кривые!

Все сделал по инструкции, все работает - но до смены пользователя. В наличии Linux Mint 18.2, два пользователя. Если перезагрузить компьютер, то можно подключиться по порту 5900 и войти под любым пользователем, если теперь выбрать Завершение сеанса или Сменить пользователя - получаем черный экран с мышкой, помогает только рестарт компьютера. Как можно это решить, нужен VNC к текущей сессии с возможностью подключения до входа пользователя.

добавьте к стоке запуска параметр -auth guess
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared

Просьба к автору спасибо за статью, просто и доступно но в список параметров для старта все же можно добавить -auth guess
У меня без нее не стартовало и судя по коментам не только у меня.
И еще для читателей если будете отлаживать почему сервис не стартует удобно смотреть логи командой
journalctl -b -u x11vnc.service

"Этот VNC сервер распространяется с открытым исходным кодом и позволяет подключиться к уже существующему сеансу X сервера или создать новый. "
А как создать новый сеанс Х?

Пытаюсь vnc прикрутить на xubuntu 18.04, с текущей сессий запускаю сервер - работает, при перезапуске не стартует.

Настроил по статье x11vnc. Сначала все заработало при запуске из терминала командой x11vnc -dontdisconnect -auth /home/user/.Xauthority -rfbauth /home/user/.vnc/passwd -display :0 -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -noipv6. user - это реальный пользователь. Затем настроил запуск сервиса, как описано в статье. Перегрузился и все не работает. Убрал сервис, автозагрузку, запуск, все рано уже никак не работает. Ни с терминала командой, ни после перегрузки. Сосем! Пробовал и -auth guess, Запутался совсем. Гуглил, но все тоже самое, у всех все просто и как уже описано выше. Ubuntu 20.04 LTS. Кто нибудь может подсказать?

Секция [Service] файла /lib/systemd/system/x11vnc.service для дисплейного менеджера SDDM должна быть следующего вида:
[Service]
Type=simple
ExecStartPre=/usr/bin/bash -c "/usr/bin/systemctl set-environment SDDMXAUTH=$(/usr/bin/find /var/run/sddm/ -type f)"
ExecStart=/usr/bin/x11vnc -display :0 -auth $ -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared

автозагрузка сервиса не работает хоть убейся
советы в комментариях тоже не помогают
статья фигня

Добрый день.
Прошу подсказать в вопросе. Пытаюсь подключить второй монитор через x11vnc таким образом чтобы он не дублировал основной монитор, а расширял его пространство.
Как это сделать?

Вместо -auth guess попробуйте -auth /run/user/1000/gdm/Xauthority
или какой там путь в параметре -auth выдаёт ps aux | grep Xorg.
У меня Ubuntu Desktop 20.04.2 и путь /run/user/1000/gdm/Xauthority

Читайте также: