VNC 是虚拟网络计算(Virtual Network Computing),是一项允许使用远程帧缓冲协议(RFB)远程控制另一台计算机的技术。在这里,将介绍如何在 Ubuntu 18.04 LTS 和 CentOS 上安装和配置 VNC 服务器。本文默认使用用户 root,使用普通用户,请在命令前增加 sudo.

安装 VNC 服务

1
2
3
4
5
6
7
8
# debian or ubuntu
apt update
apt install xorg openbox xserver-xorg-core
apt install tigervnc-standalone-server tigervnc-xorg-extension

# centos
yum update -y
yum install -y tigervnc-server xorg-x11-fonts-Type1

安装桌面环境

轻量级桌面 xfce4:

1
2
3
4
5
# debian or ubuntu
apt install xfce4 xfce4-goodies

# centos
yum install xfce4 xfce4-goodies -y

经典桌面 gnome:

1
2
3
4
5
6
7
8
9
10
# debian or ubuntu 安装 gnome
apt install -y --no-install-recommends ubuntu-desktop gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal
systemctl start gdm

# 或者通过图像化工具 tasksel, 选择自己需要的桌面,如 gnome
apt install tasksel -y
tasksel

# centos
yum -y groups install "GNOME Desktop"

安装完桌面环境后,记得设置下次开机启动桌面。然后重启电脑

1
2
systemctl set-default graphical.target
shutdown -r now

配置 VNC 服务

设置密码

建议在使用 vnc 之前先设置登录密码

1
vncpasswd

启动服务

1
2
# 默认是 5901 端口
vncserver -localhost no

关闭服务

1
2
3
4
# 查看运行的 vnc server
# :1 对应 5901 端口
# :2 对应 5902 端口,依次类推
vncserver -kill :1

设置 VNC 启动服务桌面环境

使用下面配置可设置启动时的桌面环境

1
vim ~/.vnc/xstartup
1
2
3
4
5
6
7
8
9
10
#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
vncconfig -iconic &

# gnome 配置
dbus-launch --exit-with-session gnome-session &

## xfce4 配置
#startxfce4 &

或者

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS

export DESKTOP_SESSION=/usr/share/xsessions/ubuntu.desktop
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop

vncconfig -iconic &
gnome-session &

或者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/sh

if [ "x$XDG_SESSION_TYPE" = "xwayland" ] &&
[ "x$XDG_SESSION_CLASS" != "xgreeter" ] &&
[ -n "$SHELL" ] &&
grep -q "$SHELL" /etc/shells &&
! (echo "$SHELL" | grep -q "false") &&
! (echo "$SHELL" | grep -q "nologin"); then
if [ "$1" != '-l' ]; then
exec bash -c "exec -l '$SHELL' -c '$0 -l $*'"
else
shift
fi
fi

#SETTING=$(G_MESSAGES_DEBUG='' gsettings get org.gnome.system.locale region)
#REGION=${SETTING#\'}
#REGION=${REGION%\'}

if [ -n "$REGION" ]; then
unset LC_TIME LC_NUMERIC LC_MONETARY LC_MEASUREMENT LC_PAPER

if [ "$LANG" != "$REGION" ] ; then
export LC_TIME=$REGION
export LC_NUMERIC=$REGION
export LC_MONETARY=$REGION
export LC_MEASUREMENT=$REGION
export LC_PAPER=$REGION
fi
fi

exec dbus-launch /usr/libexec/gnome-session-binary "$@"

设置语言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apt update
apt install locales
dpkg-reconfigure locales
# 空格键是选择(如下面两个语言),选择完了后 Tab 切换到 OK,再ENTER 确认
en_US.UTF-8
zh_CN UTF-8 UTF-8


# or
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8


# 如果进入后访问网页,中文还有显示为方块则需要装字体
apt install ttf-wqy-zenhei fonts-wqy-zenhei# 然后重启
shutdown -r now

连接远程 VNC 桌面

首先,先在远程主机上打开 VNC 服务,更多参数如下

1
2
3
4
# Display number [1]
# Screen resolution [1920x1080]
# Color depth [24]
vncserver -localhost no -geometry 1920x1080 -depth 24

其次,本地连接,推荐使用 MobaXterm 或 REALVNC ,MobaXterm 的连接方法如下:

  1. 打开 Sessions,选择 VNC
  2. 填写 Remote hostname or IP address
  3. 选择端口 5901
  4. 输入设置的密码,登录

MobaXterm 无法在 Mac 系统上使用。在该系统上可使用 REALVNC
下载地址:realvnc

输入:

1
IP::5901

然后,输入 vncpasswd 设置的密码,即可登录。

此外,也可以使用 Linux 的 VNC 查看器,需要安装

1
2
ssh <username>@<vnsserverip> -C -L 5901:127.0.0.1:5901
apt install tigervnc-viewer

配置自启 VNC 服务

1
2
vncserver -kill :1
vim /etc/systemd/system/vncserver@.service

添加如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/home/jinzhongxu/.vnc/%H:%i.pid
ExecStartPre=/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :
ExecStart=/usr/bin/vncserver :%i -localhost no -geometry 1920x1080 -depth 24
ExecStop=/usr/bin/vncserver -kill :%i
User=jinzhongxu
Group=jinzhongxu
WorkingDirectory=/home/jinzhongxu

[Install]
WantedBy=multi-user.target

然后,开启自启

1
2
3
4
systemctl daemon-reload
systemctl enable vncserver@1.service
systemctl start vncserver@1.service
systemctl status vncserver@1.service

TigerVNC

tigervnc 是个人使用中比较喜欢的一种 VNC 软件,下面专门对其介绍。

安装

假设桌面程序已经安装,如果没有安装请使用上面介绍的方法安装。

1
2
3
4
5
6
7
wget  https://nchc.dl.sourceforge.net/project/tigervnc/stable/1.13.1/tigervnc-1.13.1.x86_64.tar.gz
tar -xzf tigervnc-1.13.1.x86_64.tar.gz
sudo mv tigervnc-1.13.1.x86_64 /usr/local/tigervnc

sudo cp /usr/bin/Xvnc /usr/bin/Xvnc.bak

sudo ln -s /usr/local/tigervnc/usr/bin/Xvnc /usr/bin/Xvnc
  • 方法二:使用 apt 安装
1
sudo apt update && sudo apt install tigervnc-standalone-server

使用

方法一安装使用:

1
2
3
4
5
# 设密码,保存到 ~/.vnc/passwd
/usr/local/tigervnc/usr/bin/vncpasswd

# 启动
/usr/local/tigervnc/usr/libexec/vncserver :7

方法二安装使用:

1
2
3
4
5
6
7
8
9
10
11
# 设密码,保存到 ~/.vnc/passwd
vncpasswd
# 常规使用
vncserver :7

# 局域网其他服务器也可访问
vncserver :7 -localhost no

# 指定配置文件,不指定默认使用 ~/.vnc/xstartup
vncserver -xstartup /usr/bin/gnome-session :7 -localhost no
tigervncserver -xstartup /usr/bin/gnome-session :7 -localhost no

配置自启动

方法一配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cat > /etc/systemd/system/vnc@:7.service <<"EOF"
[Unit]
Description=tigervnc Service
After=network-online.target

[Service]
Type=simple
PIDFile=/tmp/vnc.pid
ExecStart=/usr/local/tigervnc/usr/libexec/vncserver %i
ExecStop=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=3
User=jinzhongxu
Group=jinzhongxu

[Install]
WantedBy=multi-user.target
EOF

方法二的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cat > /etc/systemd/system/vnc@:7.service <<"EOF"
[Unit]
Description=tigervnc Service
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/vncserver %i -xstartup /usr/bin/gnome-session -localhost no
ExecStop=/usr/bin/vncserver -kill %i
Restart=on-failure
RestartSec=3
User=jinzhongxu
Group=jinzhongxu

[Install]
WantedBy=multi-user.target
EOF

参考文献

  1. How To Install and Configure VNC Server on Ubuntu 18.04 LTS
  2. VNC 在ubuntu desktop下只显示空白桌面
  3. 解决配置Ubuntu中vnc远程显示灰屏