Настройте TigerVNC на Ubuntu 20.02 с помощью systemd.

Вопрос или проблема

Я пытаюсь настроить TigerVNC – или любой другой VNC сервер – на Ubuntu 20.04, и начинаю разочаровываться, потому что ни одна из инструкций, которые я нахожу, на самом деле не работает, хотя на CentOS у меня это получилось. Вот чего я хочу достигнуть, и, насколько я понимаю, TigerVNC должен с этим справиться:

  • Предоставить VNC сервис нескольким пользователям
  • Пользователь должен вводить имя пользователя и пароль
  • Это должно работать с systemd

Я просмотрел больше полезных веб-страниц, чем хочу перечислять, но последняя, слегка успешная, была TigerVNC (на Arch Linux), секция Выполнение Xvnc с XDMCP для сеансов по требованию.

Система проста: Ubuntu 20.04 с рабочим столом по умолчанию, который, кажется, основан на GNOME – не то, что я бы выбрал, но это не для моего использования. /var/log/syslog перечисляет множество выводов, когда я пытаюсь подключиться, но я думаю, что следующее содержит соответствующую ошибку:

...
Jul 22 14:22:34 megatron org.gnome.SettingsDaemon.Wacom.desktop[555768]: Unable to init server: Could not connect: Connection refused
Jul 22 14:22:34 megatron org.gnome.SettingsDaemon.Wacom.desktop[555768]: Cannot open display:
Jul 22 14:22:34 megatron org.gnome.SettingsDaemon.Keyboard.desktop[555770]: Unable to init server: Could not connect: Connection refused
Jul 22 14:22:34 megatron org.gnome.SettingsDaemon.Keyboard.desktop[555770]: Cannot open display:
Jul 22 14:22:34 megatron gnome-session[555468]: gnome-session-binary[555468]: WARNING: App 'org.gnome.SettingsDaemon.Wacom.desktop' exited with code 1
Jul 22 14:22:34 megatron gnome-session-binary[555468]: WARNING: App 'org.gnome.SettingsDaemon.Wacom.desktop' exited with code 1
Jul 22 14:22:34 megatron gnome-session-binary[555468]: WARNING: App 'org.gnome.SettingsDaemon.Keyboard.desktop' exited with code 1
Jul 22 14:22:34 megatron gnome-session[555468]: gnome-session-binary[555468]: WARNING: App 'org.gnome.SettingsDaemon.Keyboard.desktop' exited with code 1
Jul 22 14:22:34 megatron gnome-session-binary[555468]: WARNING: App 'org.gnome.Shell.desktop' exited with code 1
Jul 22 14:22:34 megatron gnome-session[555468]: gnome-session-binary[555468]: WARNING: App 'org.gnome.Shell.desktop' exited with code 1
Jul 22 14:22:34 megatron gnome-shell[555777]: Failed to create backend: Unable to open display '127.0.0.1:1'
Jul 22 14:22:34 megatron org.gnome.SettingsDaemon.MediaKeys.desktop[555774]: Unable to init server: Could not connect: Connection refused
Jul 22 14:22:34 megatron org.gnome.SettingsDaemon.MediaKeys.desktop[555774]: Cannot open display:
...

На стороне клиента (OSX) я вижу просто диалог, говорящий, что не удается подключиться. Как мне с этим справиться?

Что ж, мой ответ немного запоздал, но я надеюсь, что он будет полезным. У меня была такая же проблема с Ubuntu 22.04, и я потратил два дня на поиск решения.

Попробуйте следующее:

  1. Установите TigerVNC, т.е. tigervnc-standalone-server на сервере.

  2. Следуйте руководству по настройке сервера, например,
    https://docs.01.org/clearlinux/latest/guides/network/vnc.html
    Смотрите “Метод 3: Многопользовательские входы с аутентификацией через GDM”
    Краткие детали:
    a) Создайте файл сокета systemd /etc/systemd/system/xvnc.socket со следующим содержимым:

     [Unit]
     Description=XVNC Server on port 5900
    
     [Socket]
     ListenStream=5900
     Accept=yes
    
     [Install]
     WantedBy=sockets.target
    

    b) Создайте файл сервиса systemd /etc/systemd/system/[email protected] со следующим содержимым:

     [Unit]
     Description=Daemon for each XVNC connection
    
     [Service]
     ExecStart=-/usr/bin/Xvnc -inetd -query localhost -geometry 1920x1200 -once -SecurityTypes=None
     User=nobody
     StandardInput=socket
    

    c) В файле /etc/gdm3/custom.conf установите:

     [xdmcp]
     Enable=true
     Port=177
    

    d) Запустите VNC сокет скрипт и настройте его на автоматический старт при загрузке.

    sudo systemctl daemon-reload
    sudo systemctl enable xvnc.socket
    sudo systemctl start xvnc.socket
    

    e) Проверьте. Если вы выполните команду

    systemctl | grep vnc
    

    вы должны увидеть, по крайней мере:

    xvnc.socket               loaded active listening XVNC Server on port 5900
    
  3. В файле /etc/gdm3/custom.conf раскомментируйте строку:

    WaylandEnable=false
    

    Это решает проблему с черным экраном сразу после подключения.

  4. Редактировать:
    В файле /etc/gdm3/custom.conf в разделе [xdmcp] добавьте:

    DisplaysPerHost=5
    

    Где 5 – это пример вашего максимального количества разрешенных VNC подключений.

    Это решает проблему “read (104: Connection reset by peer)” для большего числа подключений.

  5. В файле /etc/tigervnc/vncserver-config-defaults найдите параметр $session и установите:

    $session = ubuntu
    

    (для возможных значений сессий смотрите в папке /usr/share/xsessions, используйте имена без суффикса .desktop)

    Это решает проблему с черным экраном после экрана входа в систему.

  6. Попробуйте подключиться с клиента к <server-ip>:5900.

Ответ или решение

Настройка TigerVNC на Ubuntu 20.04 с использованием systemd может быть довольно сложной задачей, особенно если необходимо обеспечить доступ для нескольких пользователей с аутентификацией по имени пользователя и паролю. Давайте разберём подробно, как это сделать.

Настройка VNC-сервера TigerVNC на Ubuntu 20.04

1. Установка TigerVNC

Чтобы начать, установите TigerVNC с помощью следующей команды:

sudo apt update
sudo apt install tigervnc-standalone-server

2. Настройка systemd для TigerVNC

Создание сокета systemd

Создайте файл сокета /etc/systemd/system/xvnc.socket с содержимым:

[Unit]
Description=XVNC Server on port 5900

[Socket]
ListenStream=5900
Accept=yes

[Install]
WantedBy=sockets.target
Создание сервиса systemd

Создайте файл сервиса /etc/systemd/system/[email protected] со следующим содержимым:

[Unit]
Description=Daemon for each XVNC connection

[Service]
ExecStart=-/usr/bin/Xvnc -inetd -query localhost -geometry 1920x1200 -once -SecurityTypes=None
User=nobody
StandardInput=socket
Настройка GDM для поддержки XDMCP

Отредактируйте файл /etc/gdm3/custom.conf и включите XDMCP:

[xdmcp]
Enable=true
Port=177

Запустите и активируйте сокет VNC:

sudo systemctl daemon-reload
sudo systemctl enable xvnc.socket
sudo systemctl start xvnc.socket

Проверка статуса сервиса:

systemctl | grep vnc

Вы должны увидеть строку, подобную этой:

xvnc.socket loaded active listening XVNC Server on port 5900

3. Настройки для разрешения экранных проблем

  1. В файле /etc/gdm3/custom.conf раскомментируйте строку:

    WaylandEnable=false

    Это устраняет проблемы с чёрным экраном после подключения.

  2. Добавьте в секцию [xdmcp]:

    DisplaysPerHost=5

    Это решает проблему "read (104: Connection reset by peer)" при увеличении числа подключений пользователей.

  3. Настройка сессии для TigerVNC:
    В файле /etc/tigervnc/vncserver-config-defaults найдите параметр $session и установите его значение:

    $session = ubuntu

    Это поможет устранить проблемы с пустым экраном после входа.

4. Подключение к серверу

Теперь вы можете подключиться с вашего VNC-клиента на IP-адрес сервера по порту 5900.

Следуя этим инструкциям, ваша установка TigerVNC на Ubuntu 20.04 должна функционировать корректно, обеспечивая многопользовательский доступ с аутентификацией по имени пользователя и паролю через systemd. Убедитесь, что вы следили за всеми шагами точно и проверили конфигурационные файлы, чтобы избежать распространённых ошибок.

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

Капча загружается...