x11vnc на Ubuntu 16.04 Gnome с systemd

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

У меня возникают проблемы с запуском службы x11vnc на сервере Ubuntu 16.04 Gnome. Раньше все работало отлично на 14.04. Не уверен, связано ли это с самим x11vnc или с systemd.

Вот файл службы systemd:

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

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared -o /var/log/x11vnc.log

[Install]
WantedBy=multi-user.target

Файл /etc/x11vnc.pass присутствует и был сгенерирован с помощью команды x11vnc -storepasswd /etc/x11vnc.passwd

После перезагрузки x11vnc запускается, но не удается подключиться к нему через vnc, и в файле x11vnc.log говорится:

03/05/2017 16:12:19 passing arg to libvncserver: -rfbauth
03/05/2017 16:12:19 passing arg to libvncserver: /etc/x11vnc.pass
03/05/2017 16:12:19 passing arg to libvncserver: -rfbport
03/05/2017 16:12:19 passing arg to libvncserver: 5900
03/05/2017 16:12:19 x11vnc version: 0.9.13 lastmod: 2011-08-10  pid: 30259
xauth:  unable to generate an authority file name
03/05/2017 16:12:19 -auth guess: failed for display='unset'
03/05/2017 16:12:19 -auth guess: since we are root, retrying with FD_XDM=1
03/05/2017 16:12:19 -auth guess: failed for display='unset'

Чтобы убедиться, что x11vnc работает нормально, я просто вручную запускаю на сервере:

x11vnc -rfbauth /etc/x11vnc.passwd

и после этого я успешно подключаюсь через vnc. Но как я могу запускать это автоматически?

Похоже, ваш сценарий Upstart запускался когда пользователь входил в систему. Тогда он имел бы доступ к переменным окружения, связанным с входом, и работал бы как пользователь.

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

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

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

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

Для решения проблемы со службой x11vnc на Ubuntu 16.04 с GNOME и системой инициализации systemd необходимо рассмотреть несколько важных моментов. Основная цель: автоматический запуск сервиса x11vnc при входе пользователя в систему, а также корректное подключение через VNC-клиент.

Проблема

Ваше текущее определение службы для systemd запускает x11vnc как фоновую службу с привилегиями root, что может не иметь доступа к необходимой информации о текущем сеансе пользователя. Это может вызывать проблемы с переменной дисплея (DISPLAY) и авторизацией (xauth), что и отражено в вашем логе.

Решение

Для решения задачи можно использовать подход с автозапуском приложения для конкретного пользователя, а именно воспользоваться функцией Startup Applications в Ubuntu, которая позволяет запускать приложения при входе пользователя в среду рабочего стола. Это гарантирует, что x11vnc будет запущен в контексте сеанса пользователя и получит необходимые переменные окружения.

Шаги по настройке

  1. Удаление старой systemd службы:

    • Убедитесь, что служба не запущена и удалите ее, если она не нужна. Используйте команды для остановки и удаления:

      sudo systemctl stop x11vnc.service
      sudo systemctl disable x11vnc.service
  2. Создание скрипта автозапуска:

    • Откройте терминал и создайте скрипт для запуска x11vnc. Например, создайте файл ~/start_x11vnc.sh с содержимым:

      #!/bin/bash
      x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared -o /var/log/x11vnc.log
    • Сделайте файл исполняемым:

      chmod +x ~/start_x11vnc.sh
  3. Настройка автозапуска:

    • Откройте Startup Applications в Ubuntu и добавьте новый элемент:

      • Name: x11vnc
      • Command: /home/yourusername/start_x11vnc.sh
      • Comment: Start x11vnc server on login
    • Убедитесь, что путь к скрипту корректно отражает путь к вашему пользовательскому каталогу.

Дополнительные рекомендации

  • Проверьте, что файл паролей /etc/x11vnc.pass корректно сгенерирован и доступен для чтения. Вы можете снова использовать команду x11vnc -storepasswd /etc/x11vnc.pass.
  • Обратите внимание на права доступа и владение файлами. Файл паролей должен быть защищен от несанкционированного доступа.
  • В логах всегда ищите сообщения об ошибках и некорректных переменных окружения, поскольку они могут показать источник проблем.

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

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

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