虚拟网络计算(VNC)是一个图形化的桌面共享系统,允许你使用你的键盘和鼠标来远程控制另一台计算机。它是微软远程桌面协议(RDP)的一个开源替代品。
本文解释了如何在Ubuntu 20.04上安装和配置一个VNC服务器。我们还将告诉你如何通过SSH隧道安全地连接到VNC服务器。
$ sudo apt update
$ sudo apt install xfce4 xfce4-goodies
根据你的系统,下载和安装Xfce包可能需要一些时间。
$ sudo apt install tigervnc-standalone-server
$ vncpasswd
系统会提示你输入并确认密码,以及是否将其设置为仅可查看的密码。如果你选择设置一个只允许查看的密码,用户将不能用鼠标和键盘与VNC实例交互。
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
密码文件存储在~/.vnc目录下,如果不存在,就会创建。
接下来,我们需要将TigerVNC配置为使用Xfce。要做到这一点,创建以下文件。
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的文件,每行添加一个选项。下面是一个例子。
geometry=1920x1080
dpi=96
现在你可以使用vncserver命令启动VNC服务器。
$ vncserver
New 'server2.febhost.com:1 (febhost)' desktop at :1 on machine server2.febhost.com
Starting applications specified in /home/febhost/.vnc/xstartup
Log file is /home/febhost/.vnc/server2.febhost.com:1.log
Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/febhost/.vnc/passwd :1 to connect to the VNC server.
注意上面的输出中主机名后面的:1。这表示vnc服务器正在运行的显示端口的编号。在这个例子中,服务器运行在TCP端口5901(5900+1)。如果你用vncserver创建第二个实例,它将在下一个空闲端口上运行,即:2,这意味着服务器在5902端口(5900+2)运行。
需要记住的是,在使用VNC服务器时, :X是一个显示端口,指的是5900+X。
你可以通过输入以下内容获得当前所有正在运行的VNC会话的列表。
$ vncserver -list
TigerVNC服务器会话。
TigerVNC server sessions:
X DISPLAY # RFB PORT # PROCESS ID
:1 5901 5710
在继续下一步之前,使用vncserver命令停止VNC实例,该命令带有-kill选项,并将服务器号作为参数。在这个例子中,服务器运行在5901端口(:1),所以我们要停止它。
$ vncserver -kill :1
Killing Xtigervnc process ID 5710... success!
$ sudo nano /etc/systemd/system/vncserver@.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=simple
User=febhost
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服务器将监听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
...
$ ssh -L 5901:127.0.0.1:5901 -N -f -l vagrant 192.168.33.10
你会被提示输入用户密码。
确保将用户名和server_ip_address替换为你的用户名和你的服务器的IP地址。