Skip to main content

如何在 CentOS 7 上安装和配置 VNC

发布于

在本教程中,我们将引导您完成在 CentOS 7 系统上安装和配置 VNC 服务器的步骤。我们还将向您展示如何通过 SSH 隧道安全地连接到 VNC 服务器。

虚拟网络计算(VNC)是一种图形桌面共享系统,允许您使用键盘和鼠标远程控制另一台计算机。

先决条件

在继续学习本教程之前,请确保以 具有 sudo 权限的用户 身份登录。我们假设您以名 buzheng 为的用户身份登录。

安装 Xfce 桌面环境

CentOS 服务器安装通常不会安装桌面环境,因此我们首先要安装轻量级桌面环境。

在本指南中,我们将安装 Xfce 。它快速,稳定且占用系统资源较少,因此非常适合在远程服务器上使用。

EPEL 存储库中提供了 Xfce 包。如果您的服务器上没有启用 EPEL 存储库 ,则可以键入以下命令:

sudo yum install epel-release

添加存储库后,在 CentOS 上安装 Xfce :

sudo yum groupinstall xfce

根据您的系统,下载和安装 Xfce 软件包和依赖项可能需要一些时间。

安装 VNC 服务器

我们将使用 TigerVNC 作为我们首选的 VNC 服务器。 TigerVNC 是一款积极维护的高性能开源 VNC 服务器。

键入以下命令以在 CentOS 服务器上安装 TigerVNC :

yum 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)上运行。如果您创建第二个实例, vncserver 它将在下一个空闲端口上运行,即 :2,这意味着服务器正在端口 5902 (5900 + 2)上运行。

当使用 VNC 服务器时, 服务器编号 :X 代表了显示的端口是 5900+X

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

vncserver -kill :1
Killing Xvnc process ID 2432

配置 VNC 服务器

现在我们的 CentOS 服务器上安装了 Xfce 和 TigerVNC ,下一步是配置 TigerVNC 使用 Xfce 。为此,请打开以下文件:

nano ~/.vnc/xstartup

并将最后一行 exec /etc/X11/xinit/xinitrc 更改为 exec startxfce4

#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec startxfce4 

保存并关闭文件。无论何时启动或重新启动 TigerVNC 服务器,都将自动执行上述脚本。

如果需要将 附加选项 传递给 VNC 服务器,则可以打开 ~/.vnc/config 文件并在每行添加一个选项。最常见的选项列在文件中。取消注释并根据自己的喜好进行修改。

这是一个例子:

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

创建 Systemd 单元文件

我们将创建一个 systemd 单元文件,使我们能够根据需要轻松启动,停止和重新启动 VNC 服务,与任何其他 systemd 服务相同。

sudo cp /usr/lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service

使用文本编辑器打开文件,并替换 <USER> 为您的实际用户名。

sudo nano /etc/systemd/system/vncserver@\:1.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking

# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l buzheng -c "/usr/bin/vncserver %i"
PIDFile=/home/buzheng/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

[Install]
WantedBy=multi-user.target

保存并关闭文件。通知 systemd 我们创建了一个新的单元文件,让其重新加载:

sudo systemctl daemon-reload

下一步是使用以下命令启用单元文件:

sudo systemctl enable vncserver@:1.service

符号 1 后面的数字 @ 定义了 VNC 服务将在其上运行的显示端口,在我们的情况下,这是默认设置 1 , VNC 服务器将在端口上侦听, 5901 如我们在上一节中讨论的那样。

执行以下命令启动 VNC 服务:

sudo systemctl start vncserver@:1.service

验证服务是否已成功启动:

sudo systemctl status vncserver@:1.service
● vncserver@:1.service - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/vncserver@:1.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2018-09-16 09:59:53 UTC; 4s ago
  Process: 6391 ExecStart=/usr/sbin/runuser -l buzheng -c /usr/bin/vncserver %i (code=exited, status=0/SUCCESS)
  Process: 6389 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
 Main PID: 6413 (Xvnc)
   CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service
           ‣ 6413 /usr/bin/Xvnc :1 -auth /home/buzheng/.Xauthority -desktop server2.buzheng.org:1 (buzheng) -fp catalogue:/etc/X11/fontpath.d -geometry 1024x768 -pn -rfbauth /home/buzheng/.vnc/passwd -rfbport ...

连接到 VNC 服务器

VNC 不是加密协议,可以进行数据包嗅探。建议的方法是创建一个 SSH 隧道,该隧道将安全地将来自本地计算机的端口 5901 上的流量转发到同一端口上的服务器。

在 Linux 和 macOS 上设置 SSH 隧道

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

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

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

不要忘了更换 usernameserver_ip_address 为您的用户名和服务器的 IP 地址。

在 Windows 上设置 SSH 隧道

如果运行 Windows ,则可以使用 PuTTY SSH 客户端 设置 SSH 隧道。

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

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

返回 Session 页面以保存设置,这样您每次都不需要输入它们。现在,您只需选择已保存的会话并通过单击 Open 按钮登录到远程服务器。

使用 Vncviewer 连接

现在您已经设置了 SSH 隧道,现在可以打开 Vncviewer 并连接到 localhost:5901 的 VNC 服务器了。

您可以使用任何 VNC Viewer,如 TigerVNC , TightVNC , RealVNC , UltraVNC Vinagre 和 VNC Viewer for Google Chrome 。

在这个例子中,我们将使用 TigerVNC 。打开 VNC Viewer,输入 localhost:5901 并单击 Connect 按钮。

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

您现在可以使用键盘和鼠标从本地计算机开始与远程 XFCE 桌面交互。

结论

到目前为止,您已经启动并运行 VNC 服务器,并且可以使用图形界面轻松管理 CentOS 7 服务器。

要配置 VNC 服务器以启动多个用户的显示,请使用 vncserver 命令创建初始配置并设置密码,并使用其他端口创建新的服务文件。