写点什么

Ubuntu 20.04 上安装和配置 VNC

  • 2020 年 7 月 22 日
  • 本文字数:2859 字

    阅读完需:约 9 分钟

现今,云服务器已经十分普及,申请个云服务器作为个人开发学习或者简单个人服务器使用已经司空见惯。Linux 云服务器申请就绪后,一般都是命令行的,不包含桌面环境,也不支持通过远程桌面的方式访问图形化桌面环境。本指南介绍了在 Ubuntu 20.04 系统上安装和配置 VNC 服务器所需的步骤,实现通过远程桌面管理和控制 Ubuntu 云服务器,支持图形界面操作。

先决条件


在继续学习本教程之前,请确保以具有 sudo 权限的用户身份登录。建议使用具有 sudo 权限的普通用户进行处理,而不是直接使用 root 用户。创建用户并加入 sudoers 可自行百度。


安装桌面环境


大多数服务器没有安装桌面环境,因此我们首先要安装轻量级桌面环境。


Ubuntu 存储库中有几个桌面环境,远程桌面管理建议选择安装 Xfce 。它是快速,稳定和轻量级的桌面环境,非常适合在远程服务器上使用。


首先使用以下命令更新系统


sudo apt updatesudo apt upgrade
复制代码


然后,键入以下命令以在服务器上安装 Xfce :


sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
复制代码


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


安装 VNC 服务器


Ubuntu 存储库中还有几种不同的 VNC 服务器,如 TightVNC , TigerVNC 和 x11vnc 。每个 VNC 服务器在速度和安全性方面都有不同的优点和缺点。


我们将安装 TigerVNC ,它是高性能 VNC 服务器,并被积积极维护。


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


sudo apt install tigervnc-standalone-server tigervnc-common
复制代码


现在安装了 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/typhoon/.Xauthority does not exist
New 'server2.typhoon.org:1 (typhoon)' desktop at :1 on machine server2.typhoon.org
Starting applications specified in /etc/X11/Xvnc-sessionLog file is /home/typhoon/.vnc/server2.typhoon.org:1.log
Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/typhoon/.vnc/passwd :1 to connect to the VNC server.
复制代码


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


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


重要的是要记住,当使用 VNC 服务器时, :X 是一个引用的显示端口 5900+X 。


注:如果启动时出现 vnc 启动异常: is taken because of /tmp/.X11-unix/X1

此时只需要将提示的文件删除即可。再次输入 vncserver。


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


vncserver -kill :1
复制代码


Killing Xtigervnc process ID 7264... success!
复制代码

配置 VNC 服务器


现在我们已经在服务器上安装了 Xfce 和 TigerVNC ,我们需要配置 TigerVNC 来使用 Xfce 。为此,请创建以下文件 〜/.vnc/xstartup:


nano ~/.vnc/xstartup
复制代码


#!/bin/shunset SESSION_MANAGERunset DBUS_SESSION_BUS_ADDRESSexec startxfce4 
复制代码


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


~/.vnc/xstartup 文件还需要具有执行权限。运行以下命令以确保权限正确:


chmod u+x ~/.vnc/xstartup
复制代码


如果需要将附加选项传递给 VNC 服务器,则可以创建一个名为 config 的文件,并为每行添加一个选项。这是一个例子:


文件 ~/.vnc/config


geometry=1920x1084dpi=96
复制代码


创建 Systemd 单元文件


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


打开文本编辑器,将以下配置复制并粘贴到其中。


sudo nano /etc/systemd/system/vncserver@.service
复制代码


请务必更改第 7 行中的用户名以匹配您的用户名。

[Unit]Description=Remote desktop service (VNC)After=syslog.target network.target
[Service]Type=simpleUser=usernamePAMName=loginPIDFile=/home/%u/.vnc/%H%i.pidExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :'ExecStart=/usr/bin/vncserver :%i -geometry 1440x900 -alwaysshared -fgExecStop=/usr/bin/vncserver -kill :%i
[Install]WantedBy=multi-user.target
复制代码


保存并关闭文件。


通知 systemd 我们创建了一个新的单元文件:


sudo systemctl daemon-reload
复制代码


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


sudo systemctl enable vncserver@1.service
复制代码


符号 1 后面的数字 @ 定义了运行 VNC 服务的显示端口。这意味着 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@.service; indirect; vendor preset: enabled)   Active: active (running) since Thu 2018-08-16 19:05:54 UTC; 4s ago  Process: 9893 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill :1 > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS) Main PID: 9900 (vncserver)    Tasks: 0 (limit: 507)   CGroup: /system.slice/system-vncserver.slice/vncserver@1.service           ‣ 9900 /usr/bin/perl /usr/bin/vncserver :1 -geometry 1440x900 -alwaysshared -fg
复制代码


连接到 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
复制代码


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

-L开关指定的端口绑定。在这种情况下,我们将5901远程连接的端口5901绑定到本地计算机上的端口。该-C开关启用压缩,而-N开关告诉ssh我们不希望执行远程命令。该-l开关指定远程登录名。

记得替换 username,并 server_ip_address 与您的服务器的须藤非 root 用户名和 IP 地址。

如果您使用的是图形化 SSH 客户端(如 PuTTY),请将 server_ip_address 用作连接 IP,并在程序的 SSH 隧道设置中设置localhost:5901为新的转发端口。

隧道运行后,使用 VNC 客户端进行连接localhost:5901。系统将提示您使用在步骤 1 中设置的密码进行身份验证。

连接后,您将看到默认的 Xfce 桌面。它应该看起来像这样:


部分云服务器可能有端口安全控制,在控制规则中放开 5901 端口的访问。

用户头像

还未添加个人签名 2018.03.14 加入

技术爱好者

评论 (4 条评论)

发布
用户头像
根据测试,配置文件有误。 更具ubuntu官网文档和实验测试,http://manpages.ubuntu.com/manpages/focal/man5/vnc.conf.5x.html

配置文件格式为:
$variable = "someValue";


$variable = "someValue";

$variable .= "someValue";

$variable = $var1 . $var2;

$ "" ; 三者缺一不可。

geometry=1920x1084
dpi=96
应改为
$geometry = "1920x1084"
展开
2022 年 02 月 08 日 00:37
回复
应改为
$geometry = "1920x1084";
2022 年 02 月 08 日 00:38
回复
用户头像
vncserver -localhost no

2021 年 11 月 20 日 13:35
回复
用户头像
vncserver -localhost no

2021 年 11 月 20 日 13:35
回复
没有更多了
Ubuntu 20.04 上安装和配置 VNC