在 Linux 上通过 TigerVNC 来实现远程桌面共享

需求背景

之前由于疫情的原因,我一直在家里远程办公,于是日常的开会就变成使用腾讯会议。但是呢,我使用的是 Kubuntu 系统,而腾讯会议并没有 Linux 客户端,因此每次线上会议我都要在 Windows10 虚拟机中使用腾讯会议。这样就又有一个问题了,我没办法共享主机(也就是 Kubuntu)中的桌面,只能共享虚拟机(也就是 Windows10)中的桌面。为了能让腾讯会议共享我主机中的桌面,当时我研究了很多种实现方案,最终选择了使用 TigerVNC 来实现一个桌面共享。

实现方案

在主机中运行 TigerVNC Server,然后在虚拟机中运行 TigerVNC 客户端连接主机中运行的服务端,实现主机系统中桌面的共享。

方案优点

  • TigerVNC 是跨平台的
  • TigerVNC 服务端的性能占用较少
  • TigerVNC 显示质量较高,支持配置色彩等功能
  • TigerVNC 传输过程中支持加密
  • TigerVNC 支持多种认证方式
  • TigerVNC 支持只读模式(屏幕共享而非远程桌面控制),当然了也支持远程控制。
  • TigerVNC 十分精简

实现步骤

TigerVNC 的官网是 https://tigervnc.org/

Github 上的发布页面为 https://github.com/TigerVNC/tigervnc/releases

它的二进制文件下载页面为 https://bintray.com/tigervnc/stable/tigervnc

在这个页面中下载最新的二进制文件即可。这里呢,我下载的是 “tigervnc-1.10.1.x86_64.tar.gz”,它的下载地址为: https://bintray.com/tigervnc/stable/download_file?file_path=tigervnc-1.10.1.x86_64.tar.gz

安装

可以在终端中输入下面的命令去下载:

wget https://bintray.com/tigervnc/stable/download_file?file_path=tigervnc-1.10.1.x86_64.tar.gz -O tigervnc-1.10.1.x86_64.tar.gz

然后使用下面的命令去解压:

tar -xzf tigervnc-1.10.1.x86_64.tar.gz

然后进入到解压后的目录中:

cd tigervnc-1.10.1.x86_64

运行服务端

进入到解压后的目录后在该目录执行下面的命令去运行 x0vncserver:

./usr/bin/x0vncserver -rfbport=5900 -SecurityTypes=None

会有类似下面的输出:

Sat Jul  4 15:57:23 2020
 Geometry:    Desktop geometry is set to 1911x1016+0+0
 XDesktop:    Using evdev codemap
 XDesktop:    
 XDesktop:    XTest extension present - version 2.2
 Main:        Listening on port 5900

然后光标就一直停在第一列,说明正在运行中…,它会输出连接的日志。

我们可以按下 Ctrl+C去停止掉服务端的运行。

客户端的使用

服务端运行之后我们就可以运行 vncviewer 客户端去连接了:

./usr/bin/vncviewer

它会启动一个 GUI 客户端:

这里有一个比较重要的配置项,先点击”Options…”,然后切换到”Screen”标签页,取消勾选“Resize remote session to the local window”和”Enable ful-screen mode over all monitors”这两个选项:

这两个选项,前者会将服务端的桌面分辨率调整为客户端的桌面分辨率,而后者则会默认进入到全屏模式。我觉得这两个选项默认启用对新手来说可能连上去之后就一脸蒙蔽,所以这里建议有需要的话再启用这两个选项。

接着我们点”OK”,回到一开始的界面,在”VNC Server:”后输入服务端地址,这里也就是”127.0.0.1:5900“,然后点击”Connect”就可以连接上了。进入共享桌面后,可以按”F8″快捷键来呼出菜单,在菜单中可以关闭连接也可以进入全屏模式。

如果需要在其他设备中连接该服务端,则需要输入服务端对应的 IP 地址,当然也要记得把服务端的防火墙配置一下,放行 5900 端口(下面以 Ubuntu 和 Ubuntu 衍生版系统自带的 ufw 防火墙为例):

sudo ufw allow 5900/tcp

启用密码认证

之前的运行服务端的命令中我们使用了 -SecurityTypes=None 这个参数,它的意思是客户端的连接不需要任何认证,这样子是不安全的,除非你只在局域网中使用并且只有你自己知道地址和端口。为了安全考虑,我建议在运行服务端时加上密码认证。

要启用密码认证,必须先设置密码,设置密码的方法是使用 vncpasswd 命令:

./usr/bin/vncpasswd           
Password:
Verify:
Would you like to enter a view-only password (y/n)? n

即运行 vncpasswd 命令,然后它会让你输入一个密码,输入完按回车,它会让你再次输入刚才的密码验证一下,输入完成按回车,它会询问你是否设置一个只读模式的密码,根据自己的需要选择,这里我不需要,就直接输入”n”然后按回车就完成了密码的设置。它的密码配置文件在当前用户目录下的”.vnc/passwd”,即”$HOME/.vnc/passwd”。我们按 Ctrl+C 停止掉刚才运行的服务端,然后修改一下服务端的参数重新运行服务端:

./usr/bin/x0vncserver -rfbport=5900 -PasswordFile $HOME/.vnc/passwd -SecurityTypes VncAuth,TLSVnc

这时我们再去使用客户端去连接,在点击了”Connect”后会弹出密码输入框,输入密码之后我们才能连接到服务端。

视频教程

针对本次教程我也录制了视频教程,如有需要可以使用微信扫一扫文章下方左边的二维码或者搜索"sunriseydy"关注本站的微信公众号然后回复"tigervnc"即可获取视频观看链接。


版权说明:
作品 sunriseydy 采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
文章内容如未说明均为原创,欢迎转载,但请注明原作者(sunriseydy)和原文链接(https://blog.sunriseydy.top/technology/linux/tigervnc/)
部分来自互联网的文章,如有侵权,请联系我,24小时内删除,谢谢

手机打开扫一扫即可访问本页面

感谢您的支持,SunriseYDY 会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

日出一点一 | 在探索的路上永不止步

分享到微博 分享到QQ 微信赞赏 在手机上阅读 点赞 1

“在 Linux 上通过 TigerVNC 来实现远程桌面共享”的一个回复

  1. 文章说的很好,学习了

评论一下呗亲

电子邮件地址不会被公开。 必填项已用*标注