大家可以先阅读 使用 Node.js 驱动 FFmpeg 在 Linux + vncserver 下完成视频录制 了解产品目标和技术选型。
前两天在系统更新里看到 Fedora 34 发布,作为更新党,我当然迫不及待就升级了。升级过程蛮顺利的,升级后,系统里的“在线账户”也能正常走 VPN 了,感觉还蛮好的。
然后,前两天需要调试录视频的程序,发现新系统的 tigerVNC 有一个巨大的变化:不再支持用 vncserver
命令创建虚拟显示器,必须用 systemctl start service
,目的是方便绑定系统启动,因为很多服务器的运维需要自动化。
不过这可苦了我。我是系统运维菜鸡,基本只能照抄文章,搞了半天也没搞好。不过感谢开源,在 GitHub issue 里讨论的只言片语让我知道了其实 vncserver
是个脚本,它调用的其实是 Xvnc
这个命令。
那就好办了,我开始按图索骥,寻找 vncserver
与 Xvnc
之间的关联。最终找到解决方法如下:
- 修改
/etc/X11/Xwrapper.config
,加入allowed_users=anybody
。这样才能直接使用 Xvnc 创建虚拟显示器,不然会报告只有 console 用户才能创建的错误。 - 使用
vncpasswd
命令创建密码文件,创建后的密码文件位于~/.vnc/passwd
- 然后用
Xvnc :5 -geometry 1280x720 -PasswordFile ~/.vnc/passwd
创建显示器,跟之前的命令很类似,不过需要-PasswordFile
选项指定密码 - 使用 VNC viewer 登录 VNC,输入密码。(我不知道这一步是否必须)
- 可以继续使用
DISPLAY=:5
了
不过问题并没有完美解决,虽然我的 puppeteer JS 能跑,FFmpeg 也能录。但是 DISPLAY=:5 firefox https://cn.bing.com
只会在当前屏幕打开窗口,不知道为什么。留待以后解决吧。
最后吐槽下,这种稳定版里换大版本的行为真的要不得,开源团队也不能滥用自己的地位。
参考阅读
欢迎吐槽,共同进步