У меня проблемы с запуском службы 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 не очень подходит для запуска пользовательских приложений во время графического процесса входа в систему.