配置云服务器(ubuntu)的vnc守护进程(服务)

 
Category: Linux-Shell

写在前面

之前配置过了基于Ubuntu的阿里云服务器, 并且通过vnc远程查看UI界面, 但是美中不足的一点就是每次开启ssh会话都要重新输入vncserver -kill :1vncserver -geometry 1920x1080 :1, 很不方便.

查看Google发现有人也遇到了这个问题, 并且给出了创建systemd服务的解决方案[^1], 下面来看看这是如何配置和实现的.

方法

下面我的操作均在root用户下. 所以家目录为/root.

安装

首先需要安装vnc的服务端, 这里我已经安装过了, 用的是vnc4server, (需要通过aptitude以及换源安装), 当然如果直接用apt的话可以安装tightvncserver, 这里就不赘述了.

可以通过vncserver检查一下安装情况, 然后输入密码并确认密码, 之后连接的话需要用到的.

You will require a password to access your desktops.

Password:
Verify:

然后就是配置守护进程了. 在此之前你应该已经开启了对应的端口5900以及5901, 并打开了对应的防火墙. 具体方法看我之前的文章.

先kill掉进程, 方便后序操作:

vncserver -kill :1

vnc配置文件

修改一下配置文件, 在此之前先备份:

mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

修改

vi ~/.vnc/xstartup

改为:

#!/bin/sh

export XKL_XMODMAP_DISABLE=1
export XDG_CURRENT_DESKTOP="GNOME-Flashback:GNOME"
export XDG_MENU_PREFIX="gnome-flashback-"
gnome-session --session=gnome-flashback-metacity --disable-acceleration-check &
# vncconfig &

最后一行据说是开启剪贴板的,但事实上并没有用, 我就注释掉了.

修改访问权限:

chmod +x ~/.vnc/xstartup

服务配置

先创建一个文件:

cd /etc/systemd/system/
vi vncserver@1.service 

写入如下内容:(当然也可以用非root用户, 我这里为省事用/root)

[Unit]
Description=Start VNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=root
WorkingDirectory=/root

PIDFile=/root/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1920x1080 :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

这里跟[^1]中的内容有出入, 因为里面是访问本地网络中的Ubuntu, 而我们这里需要访问公网IP上的, 就不能加-localhost选项, 否则就算创建成功也连不上…(小坑)

简单解释一下就是创建有网络连接时候启动的服务, 启动之前先kill掉打开的vnc进程, 然后开启一个1920x1080的窗口, 最后在服务结束之后kill掉vnc后台服务.

最后就是启动服务并设置开机启动, 三条命令一套完成:

sudo systemctl daemon-reload
sudo systemctl enable vncserver@1.service
sudo systemctl start vncserver@1

看一下状态:

sudo systemctl status vncserver@1

绿点点就对了:

● vncserver@1.service - Start VNC server at startup
     Loaded: loaded (/etc/systemd/system/vncserver@1.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-11-16 19:06:14 CST; 1 day 1h ago
   Main PID: 890 (Xvnc4)
      Tasks: 223 (limit: 4432)
     Memory: 387.7M
     CGroup: /system.slice/system-vncserver.slice/vncserver@1.service
             ├─ 890 Xvnc4 :1 -desktop xxx:1 (root) -auth /root/.Xauthority -geometry 1920x1080 -depth 24 -rfb>
             ├─1174 /usr/libexec/gnome-session-binary --builtin --session=gnome-flashback-metacity --disable-acceleration-check
             ├─1203 dbus-launch --exit-with-session /usr/libexec/gnome-session-binary --builtin --session=gnome-flashback-metacit>
             ├─1211 /usr/bin/dbus-daemon --syslog --fork --print-pid 5 --print-address 7 --session
             ├─1371 /usr/libexec/gvfsd
             ├─1392 /usr/libexec/gvfsd-fuse /root/.cache/gvfs -f -o big_writes
             ├─1431 /usr/bin/gnome-keyring-daemon --start --components=ssh
             ├─1496 /usr/libexec/gsd-smartcard
             ├─1498 /usr/lib/gnome-flashback/gnome-flashback-clipboard
             ├─1500 /usr/libexec/gsd-housekeeping
             ├─1503 /usr/libexec/gsd-power
             ├─1508 gnome-flashback

这样的话不管是重启服务器还是重新开启一个ssh会话, 只要服务器在运行, 就能丝滑连接vnc服务并查看图形化界面, 还是很方便的.

ref

[^1]:[How to Install and Configure VNC on Ubuntu 20.04 DigitalOcean](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-20-04);