在 Linux 上部署 Melt 和 Webvfx 时碰到了一个很棘手的问题—— Webvfx 依赖 X Server。

Cannot connect to display server

正如崔健唱到的:“听说过,没见过,X Server;有的说,没的做,怎知不容易”。没搞过这玩意儿啊,我跟另一个帮忙的同学都一头雾水,试来试去发现 ssh -X 可以转发到本地的 X Server 上处理,可问题是不能 ssh 一直连着啊,而且这么一来一回,速度慢的很呐。

于是结对 Google,看到有人说了这么一句话

Yes, it's a GUI application. I heard that it can run on virtual frame buffer directly on linux without X-Windows system

查了查,试着用 xvfb-run 跑,还真能跑起来,简直是救命恩人。

然而问题来了,虽然能跑但产出的视频画质不对,有种显示器坏掉了花屏的感觉,猜测是色彩位数不对。 那么就应该是在初始化 X 环境时把色彩位数传进去,一番摸索找到 xvfb-run--server-args 可以往 X Server 透传参数,所以正确的用法就是:

xvfb-run --server-args="-screen 0 1280x768x24" melt

至此,X 环境的问题解决了。


后面又碰到了一些诡异的问题,最终发现是我 webvfx 的源码下载错了。我从 release 里下载的时候没看时间,结果他们 release 的版本落后了 master 好几年,尼玛。拉了 master 的代码重新编译,啥问题都没了。而且还会我提示:

The MLT Qt module requires a X11 environment. Please either run melt from an X session or use a fake X server like xvfb: xvfb-run -a melt (...)

WTF!!! 搞错分支害死人啊!

怪我咯?