我在 Ubuntu 服务器 16.04 Gnome 上启动 x11vnc 服务时遇到了麻烦。它在 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。但是我如何才能自动启动它呢?
答案1
听起来你的 Upstart 脚本运行了当用户登录时然后它将可以访问与登录相关的环境变量并以用户身份运行。
你的 systemd 翻译在后台以 root 身份运行,不是在登录会话的上下文中。
如果你希望在特定用户登录时启动此功能,请考虑使用 Ubuntu Unity自动启动功能。
根据我的经验,systemd 不适合在图形登录过程中启动用户应用程序。