宿主机和虚拟机共享屏幕
前言: 垃圾腾讯!只知道盈利的商业公司!中国 Linux 发展的拦路者和毒瘤!
这篇文章起因是想在 Linux 上使用腾讯会议,我不是很喜欢使用 Wine,而且微信这些软件还好,就怕开会这种实时软件突然出了点问题那就麻烦了。所以装虚拟机使用,但是共享屏幕没法共享宿主机的内容,这是个痛点。
所以要找一个共享屏幕软件,宿主机共享屏幕给虚拟机(即宿主机作为服务端、虚拟机作为客户端),然后虚拟机的腾讯会议再共享给别人。
写给我的话(总结)
主要就两点:以后找什么多用 GitHub!然后就是安装不成功就要特别特别注意版本问题!
软件筛选
一开始是打算用 VNC,最好的就是 TigerVNC 了,但是它的痛点就是服务端没法缩放。虚拟机因为有标题栏的原因会导致屏幕比宿主机小一点,所以没有缩放就导致共享只能共享一部分。
然后搞了好久其他 VNC,没有用。但是突然发现又想到其实 VNC 是有些多余的,因为它侧重于 Control,也就是客户端可以控制服务端,但是我只需要共享屏幕就行了,所以我最好使用只有共享屏幕的软件。
于是搜了一下 screen sharing,但是好家伙,全都是些啥...又忙活了半天,结果没找到。
最终解决
最后想到了神奇的 GitHub,果然这里面有一个,而且特别符合要求:就只是单纯的共享屏幕,作者也说了别的功能不会加,貌似他是被微软的远程桌面的高延迟低画质给气的才搞这一个软件,牛啊牛啊。
项目链接: https://github.com/screego/server
下面是安装配置方法。
下载安装
就正常下载就好,如果用 AUR 的话,配置示例文件是 /etc/screego.config
,如果是从 GitHub 下载二进制的话,配置示例文件是 screego.config.example
,之后要把示例文件修改到 /etc/screego/server.config
。
生成证书
按照下面的方法来就行,虽然我也不知道原理,基本上是照搬了 https://www.jianshu.com/p/3a2c01577c7c。
openssl genrsa -des3 -out server.key 2048
openssl rsa -in server.key -out server.key
# 过程中会要求输入一些信息,不填也可
openssl req -new -key server.key -out server.csr
# 创建 CA 证书
openssl req -new -x509 -key server.key -out ca.crt -days 3650
# 创建服务器证书
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt
修改配置
把默认的配置文件放在 /etc/server.config
。
SCREEGO_EXTERNAL_IP=192.168.128.128 # 改成本机 IP 地址
SCREEGO_SERVER_TLS=true
SCREEGO_TLS_CERT_FILE=/path/to/server.crt
SCREEGO_TLS_KEY_FILE=/path/to/server.key
启动
命令 screego serve
进行启动,然后在浏览器打开就行。比如 IP 地址是 192.168.128.128,那么就打开 https://192.168.128.128:5050
,注意一定要有 https 才行。此外如果发现不能分享屏幕,看看是不是浏览器版本的问题。(我搞了几个小时,最后发现是因为虚拟机才安装,Edge 版本比较低,裂开...)
不用这么复杂
后来我发现对于我这种需要虚拟机和宿主机之间共享屏幕的,不需要那么复杂。也不需要开头输入 https 了,虽然可能有安全问题...
配置文件如下。
# 好像什么地址都行
SCREEGO_EXTERNAL_IP=127.0.0.1
SCREEGO_SERVER_TLS=false
然后宿主机执行
screego serve
,宿主机输入地址 localhost:5050
,虚拟机输入地址 host_ip:5050
。搞定。