需求背景
之前由于疫情的原因,我一直在家里远程办公,于是日常的开会就变成使用腾讯会议。但是呢,我使用的是 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 会继续努力的!



打开支付宝扫一扫,即可进行扫码打赏哦
日出一点一 | 在探索的路上永不止步
文章说的很好,学习了