如何在Ubuntu 20.04上安装和配置VNC
本文介绍了如何在Ubuntu 20.04上安装和配置VNC服务器。我们还将向您展示如何通过SSH安全地连接到VNC服务器。
虚拟网络计算(VNC)是一个图形桌面共享系统,可让您使用键盘和鼠标来远程控制另一台计算机。它是Microsoft远程桌面 协议(RDP)的开源替代方案。
安装桌面环境
Ubuntu服务器是通过命令行管理的,默认情况下未安装桌面环境。如果您运行桌面版本的Ubuntu,请跳过此步骤。
Ubuntu存储库中提供了各种桌面环境。一种选择是安装Gnome,它是Ubuntu 20.04中的默认桌面环境。另一个选择是安装Xfce 。它是一种快速,稳定且轻巧的桌面环境,非常适合在远程服务器上使用。
在本指南中,我们将安装Xfce。以具有sudo特权的用户身份输入以下命令 :
sudo apt update
sudo apt install xfce4 xfce4-goodies
根据您的系统,下载和安装Xfce软件包可能需要一些时间。
安装VNC服务器
Ubuntu存储库中有几种不同的VNC服务器,例如TightVNC ,TigerVNC 和x11vnc 。每个VNC服务器在速度和安全性方面都有各自的优缺点。
我们将安装TigerVNC。这是一个主动维护的高性能VNC服务器。键入以下命令以安装软件包:
sudo apt install tigervnc-standalone-server
配置VNC访问
安装VNC服务器后,下一步是创建初始用户配置并设置密码。
使用vncpasswd
命令设置用户密码。运行以下命令时请勿使用sudo:
vncpasswd
系统将提示您输入并确认密码,以及是否将其设置为只读密码。如果选择设置仅查看密码,则用户将无法使用鼠标和键盘与VNC实例进行交互。
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
密码文件存储在~/.vnc
目录中,如果不存在则创建该目录。
接下来,我们需要配置TigerVNC以使用Xfce。为此,请创建以下文件:
〜/.vnc/xstartup
nano ~/.vnc/xstartup
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec startxfce4
保存并关闭文件。每当您启动或重新启动TigerVNC服务器时,以上命令都会自动执行。
该~/.vnc/xstartup
文件还需要具有执行权限。使用chmod
命令设置文件权限:
chmod u+x ~/.vnc/xstartup
如果需要将其他选项传递 给VNC服务器,请创建一个名为的文件,config
并在每行添加一个选项。这是一个例子:
~/.vnc/config
geometry=1920x1080
dpi=96
现在,您可以使用以下vncserver
命令启动VNC服务器:
vncserver
New 'server2.iplayio.cn:1 (iplayio)' desktop at :1 on machine server2.iplayio.cn
Starting applications specified in /home/iplayio/.vnc/xstartup
Log file is /home/iplayio/.vnc/server2.iplayio.cn:1.log
Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/iplayio/.vnc/passwd :1 to connect to the VNC server.
在上面的输出中,请注意主机名:1
之后的。这表示正在运行vnc服务器的显示端口号。在此示例中,服务器在TCP端口(5900 + 1)上运行。如果创建第二个实例,它将在下一个可用端口(即)上运行,这意味着服务器在端口(5900 + 2)上运行。5901
vncserver
:2
5902
要记住的重要一点是,在使用VNC服务器时,:X
显示端口是指向的5900+X
。
vncserver -list
TigerVNC server sessions:
X DISPLAY # RFB PORT # PROCESS ID
:1 5901 5710
在继续下一步之前,请使用vncserver
带-kill
选项的命令和服务器编号作为参数来停止VNC实例。在此示例中,服务器在端口5901(:1
)上运行,因此我们将使用以下命令将其停止:
vncserver -kill :1
Killing Xtigervnc process ID 5710... success!
创建一个Systemd单位文件
让我们创建一个systemd单元文件,而不是手动启动VNC会话,以便您根据需要启动,停止和重新启动VNC服务。
打开您的文本编辑器,然后将以下配置复制并粘贴到其中。确保在第7行更改用户名以匹配您的用户名。
sudo nano /etc/systemd/system/vncserver@.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=simple
User=iplayio
PAMName=login
PIDFile=/home/%u/.vnc/%H%i.pid
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver :%i -geometry 1440x900 -alwaysshared -fg
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
保存并关闭文件。
通知systemd已创建一个新的单位文件:
sudo systemctl daemon-reload
启用服务以在启动时启动:
sudo systemctl enable vncserver@1.service
符号1
后的数字@
定义了VNC服务将在其上运行的显示端口。这意味着VNC服务器将侦听port 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; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-03-26 20:00:59 UTC; 3s ago
...
连接到VNC服务器
VNC不是加密协议,可能会受到数据包嗅探的影响。推荐的方法是创建SSH, 并将流量从端口5901上的本地计算机安全转发到同一端口上的服务器。
在Linux和macOS上设置SSH
如果您在计算机上运行Linux,macOS或任何其他基于Unix的操作系统,则可以使用以下命令轻松创建SSH:
ssh -L 5901:127.0.0.1:5901 -N -f -l vagrant 192.168.33.10
系统将提示您输入用户密码。
请务必将username
和server_ip_address
您的用户名和服务器的IP地址。
在Windows上设置SSH
如果您运行Windows,则可以使用PuTTY SSH客户端设置SSH 。
打开Putty,然后在Host name or IP address
字段中输入您的服务器IP地址。
在Connection
菜单下,单击框,展开SSH
,然后选择Tunnels
。输入VNC服务器端口(5901
在)Source Port
字段,并输入server_ip_address:5901
在Destination
现场和点击Add
如下图所示的图像按钮:
返回Session
页面以保存设置,因此您无需每次都输入它们。对于远程服务器,选择保存的会话,然后单击Open
按钮。
使用Vncviewer连接
现在已经创建了SSH,是时候打开您的Vncviewer并连接到VNC服务器了localhost:5901
。
您可以将任何VNC查看器(例如TigerVNC,TightVNC,RealVNC,UltraVNC,Vinagre和VNC查看器)用于Google Chrome浏览器 。
我们将使用TigerVNC。打开查看器,输入localhost:5901
,然后单击Connect
按钮。
在出现提示时输入您的用户密码,您应该会看到默认的Xfce桌面。它看起来像这样:
您可以使用键盘和鼠标从本地计算机开始与远程XFCE桌面进行交互。
结论
我们已经向您展示了如何在Ubuntu 20.04上安装和配置VNC服务器,并使其启动并运行。
要将VNC服务器配置为为多个用户启动显示,请创建初始配置并使用以下vncpasswd
命令设置密码。您还需要使用其他端口创建一个新的服务文件。
{{ nComment.author.nickname }}
{{ nComment.time }}