Ubuntu 20.04 LTS 中的 x11vnc 和 noVNC开机启动
1,x11vnc
先安装x11vnc:
sudo apt install x11vnc
将x11vnc设置成一个服务:
服务文件:x11vnc.service
[Unit] Description=x11vnc (Remote access) After=display-manager.service network.target syslog.target [Service] Type=simple ExecStart=/usr/bin/x11vnc -display :0 -shared -nomodtweak -forever -capslock -repeat -xkb -xrandr "resize" -rfbport 5900 ExecStop=/bin/kill -TERM $MAINPID ExecReload=/bin/kill -HUP $MAINPID KillMode=control-group Restart=on-failure [Install] WantedBy=graphical.target
放到 /etc/systemd/system/目录下,然后执行:
systemctl enable x11vnc
2,noVNC
noVNC:https://github.com/novnc/noVNC
websockify:https://github.com/novnc/websockify
直接git clone下放到对应的目录就可以正常工作的,我这里由于我打过tar压缩包,所以还需要进行解压。
先将novnc的文件下载到本地根目录(/),对应的解压命令(如果没有放置在根目录,则下面的解压命令相应改动就可以):
cd / && tar -xzf /noVNC-1.4.0.tar.gz -C /opt && mv /opt/noVNC-1.4.0 /opt/noVNC && ln -s /opt/noVNC/vnc.html /opt/noVNC/index.html && \ tar -xzf /websockify.tgz -C /opt/noVNC/utils && rm -rf /websockify.tgz /noVNC-1.4.0.tar.gz
将novnc设置成一个服务:
服务文件:novnc.service:
[Unit] Description=noVNC remote desktop server After=x11vnc.service [Service] Type=simple ExecStart=/opt/noVNC/utils/novnc_proxy --vnc localhost:5900 --listen 8080 --heartbeat 10 ExecStop=/bin/kill -TERM $MAINPID ExecReload=/bin/kill -HUP $MAINPID KillMode=control-group Restart=on-failure [Install] WantedBy=graphical.target
同样放到 /etc/systemd/system/目录下,然后执行:
systemctl enable novnc
后记:重启机器后发现novnc服务启动成功了,但是x11vnc服务启动失败,使用 journalctl -u x11vnc 命令查看具体的错误的时候可以看到一句:
x11vnc was unable to open the X DISPLAY: ":0", it cannot continue
无法解决,使用另外的方式启动:在特定用户登录后执行脚本,可以将脚本添加到用户的启动项中。
在用户的主目录中,有一个名为 .config/autostart/
的目录,你可以在其中创建一个 .desktop
文件,指定要运行的脚本。例如:
cd ~/.config/autostart/
touch my_start_vnc.desktop vim my_start_vnc.desktop
[Desktop Entry]
Type=Application
Exec=/path/to/my_start_vnc.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=My Startup Script
Comment=Run my custom startup script
然后在上一步设定的目录创建my_start_vnc.sh ,并写入如下x11vnc的启动命令:
/usr/bin/x11vnc -display :0 -shared -nomodtweak -forever -capslock -repeat -xkb -xrandr "resize" -rfbport 5900
给 my_start_vnc.sh 文件赋予执行权限:
chmod 777 my_start_vnc.sh
novnc应该也可以放在这个文件里执行而不需要使用.service服务的方式。