在 CentOS 8 上安装和配置 VNC

VNC(Virtual Network Computing) 是一个图形桌面共享系统,可让您使用键盘和鼠标远程控制另一台计算机。

本文介绍了在 CentOS 8 上安装和配置 VNC 服务器的步骤。我们还将向您展示如何通过 SSH 隧道安全地连接到 VNC 服务器。

先决条件

要遵循本指南,您需要以具有 sudo 特权的用户身份在远程 CentOS 计算机上登录。

安装桌面环境

通常,服务器没有安装桌面环境。如果要连接的计算机没有 GUI 桌面环境,则必须先安装 GUI 桌面环境。如果已经安装了 GUI 桌面环境,可以跳过此步骤。

运行以下命令在远程计算机上安装 Gnome(CentOS 8 中的默认桌面环境):

sudo dnf groupinstall "Server with GUI"

根据您的系统,下载和安装 Gnome 软件包以及相关性可能会花费一些时间。

安装 VNC 服务器

TigerVNC 是一个正在积极维护的高性能开源 VNC 服务器程序。在默认的 CentOS 存储库中可以找到它,进行安装:

sudo dnf install tigervnc-server

安装 VNC 服务器后,运行 vncserver 命令以创建初始配置并设置密码。 sudo 运行以下命令时请勿使用:

vncserver

系统将提示您输入并确认密码,以及是否将其设置为只读密码。如果选择设置仅只读密码,则用户将无法使用鼠标和键盘与 VNC 实例进行交互。

You will require a password to access your desktops.

Password:
Verify:
Would you like to enter a view-only password (y/n)? n
/usr/bin/xauth:  file /home/buzheng/.Xauthority does not exist

New 'server2.buzheng.org:1 (buzheng)' desktop at :1 on machine server2.buzheng.org

Starting applications specified in /etc/X11/Xvnc-session
Log file is /home/buzheng/.vnc/server2.buzheng.org:1.log

第一次运行 vncserver 命令时,它将创建密码文件并将其存储在 ~/.vnc 目录中。

注意上面输出中主机名后面的 :1 。这指示正在运行 VNC 服务器的端口号。在我们的例子中,服务器在 TCP 端口 5901 (5900 + 1) 上运行。如果创建第二个实例,它将在下一个空闲端口上运行,即 :2 ,表示服务器在端口 5902 (5900 + 2) 上运行。

要记住的重要一点是,在使用 VNC 服务器时, :X 对应的端口是指 5900+X

在继续下一步之前,首先使用 vncserver 命令带上 -kill 选项的和服务器号作为参数停止 VNC 实例。在我们的例子中,服务器在端口 5901(:1) 中运行,因此要停止它,请运行:

vncserver -kill :1
Killing Xvnc process ID 19681

配置 VNC 服务器

现在,在远程 CentOS 计算机上都安装了 Gnome 和 TigerVNC ,下一步是配置 TigerVNC 以使用 Gnome 。创建新桌面时, VNC 服务器使用文件 ~/.vnc/xstartup 启动应用程序。打开文件:

vim ~/.vnc/xstartup

并如下编辑文件 ~/.vnc/xstartup

#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
vncconfig -iconic &
dbus-launch --exit-with-session gnome-session &

保存并关闭文件。每当您启动或重新启动 TigerVNC 服务器时,以上脚本都会自动执行。

如果要将其他选项传递给 VNC 服务器,请打开编辑 ~/.vnc/config 文件,每个选项占一行。文件中列出了最常用的选项。取消注释并根据自己的喜好进行修改。

这是一个例子:

# securitytypes=vncauth,tlsvnc
# desktop=sandbox
geometry=1920x1080
# localhost
# alwaysshared

创建一个 Systemd 单位文件

单位文件使您可以轻松启动,停止和重新启动服务。通常,存储用户的单元文件的最佳位置是 ~/.config/systemd/user创建目录

mkdir -p ~/.config/systemd/user

复制默认的 vncserver 单元文件:

cp /usr/lib/systemd/user/[email protected] ~/.config/systemd/user/

通知 systemd 加载新的用户单元文件:

systemctl --user daemon-reload

启动 VNC 服务并在启动时启用它:

systemctl --user enable [email protected]:1.service --now

@: 后面的数字 1 定义 VNC 服务将在其上侦听的端口。我们使用的是 1 ,这意味着 VNC 服务器将侦听 5901 端口。

启用自动运行,以便用户服务在启动时启动并在用户未登录时保持运行:

loginctl enable-linger

验证服务是否成功启动:

systemctl --user status [email protected]:1.service
[email protected]:1.service - Remote desktop service (VNC)
   Loaded: loaded (/home/linuxize/.config/systemd/user/[email protected]; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-01-30 22:14:08 UTC; 2s ago
  Process: 20813 ExecStart=/usr/bin/vncserver :1 (code=exited, status=0/SUCCESS)
  Process: 20807 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill :1 > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
   CGroup: /user.slice/user-1000.slice/[email protected]/vncserver.slice/[email protected]:1.service
  ...

连接到 VNC 服务器

VNC 不是加密协议,可能会受到数据包嗅探的影响。推荐的方法是创建 SSH 隧道,以安全地将流量从本地计算机上的 5901 端口转发到远程服务器的同一端口上。

在 Linux 和 macOS 上设置 SSH 隧道

如果您在计算机上运行 Linux , macOS 或任何其他基于 Unix 的操作系统,则可以使用以下 ssh 命令轻松创建隧道:

ssh -L 5901:127.0.0.1:5901 -N -f -l username remote_server_ip

系统将提示您输入用户密码。

不要忘了更换 username 为您自己的用户,把 remote_server_ip 更改为您自己的服务器的 IP 地址。

在 Windows 上设置 SSH 隧道

Windows 用户可以使用 PuTTY 设置 SSH 隧道。

打开 Putty ,然后在 Host name or IP address 字段中输入您的服务器 IP 地址。

Connection 菜单下,展开 SSH 并选择 Tunnels 。在 Source Port 字段中输入 VNC 服务器端口 (5901),在 Destination 字段中输入 server_ip_address:5901,然后点击如下图所示的 Add 按钮:

返回 Session 页面保存设置,然后您无需每次都输入它们。要登录到远程服务器,请选择保存的会话,然后单击 Open 按钮。

使用 Vncviewer 连接

要连接到远程服务器,请打开 VNC 查看器并输入 localhost:5901

您可以使用任何 VNC 客户端,例如 TigerVNC , TightVNC , RealVNC , UltraVNC Vinagre 和用于 Google Chrome 的 VNC 客户端。

我们要使用的是 TigerVNC :

在出现提示时输入密码,然后您会看到默认的 Gnome 桌面。它看起来应该像这样:

就是这样!现在,您可以使用键盘和鼠标从本地计算机开始在远程桌面上工作。

结论

我们已经向您展示了如何设置 VNC 服务器并连接到远程 CentOS 8 计算机。

要为多个用户启动显示,请重复相同的步骤。创建初始配置,使用 vncserver 命令设置密码,并使用其他端口创建新的服务文件。