Вопрос или проблема
У меня возникают проблемы с запуском службы 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
будет запущен в контексте сеанса пользователя и получит необходимые переменные окружения.
Шаги по настройке
-
Удаление старой systemd службы:
-
Убедитесь, что служба не запущена и удалите ее, если она не нужна. Используйте команды для остановки и удаления:
sudo systemctl stop x11vnc.service sudo systemctl disable x11vnc.service
-
-
Создание скрипта автозапуска:
-
Откройте терминал и создайте скрипт для запуска
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
-
-
Настройка автозапуска:
-
Откройте Startup Applications в Ubuntu и добавьте новый элемент:
- Name:
x11vnc
- Command:
/home/yourusername/start_x11vnc.sh
- Comment:
Start x11vnc server on login
- Name:
-
Убедитесь, что путь к скрипту корректно отражает путь к вашему пользовательскому каталогу.
-
Дополнительные рекомендации
- Проверьте, что файл паролей
/etc/x11vnc.pass
корректно сгенерирован и доступен для чтения. Вы можете снова использовать командуx11vnc -storepasswd /etc/x11vnc.pass
. - Обратите внимание на права доступа и владение файлами. Файл паролей должен быть защищен от несанкционированного доступа.
- В логах всегда ищите сообщения об ошибках и некорректных переменных окружения, поскольку они могут показать источник проблем.
Используя предложенные настройки, x11vnc
будет корректно запускаться при входе в десктопное окружение и предоставлять доступ через VNC-клиенты. Это решение особенно актуально, если основная цель — интернет-доступ в графическую оболочку именно во время пользовательских сеансов.