Linux 下使用 Nvidia 显卡和 Virtualbox 遇到的一些坑

nouveau 显卡驱动,并不好。

Virtualbox 的问题

Virtualbox 安装完毕 Windows 10,却莫名其妙卡在了登陆之后应该出现桌面的地方。而且它不仅仅是客户机卡死,宿主机也一并卡死了。

我没太注意这个问题。大不了暂时不用 QQ 好了。

Nvidia 显卡

无独有偶,另一个问题的出现使整个事情出现了转机。

使用 Linux 后不久,就发现了问题。桌面环境(xfce4)经常无故完全卡死,甚至连 Ctrl+Alt+Fn 切换 tty 都没有用。偶尔出现还能忍,但是在短短的两三天就数次出现,呈现一定规律。我决定一探究竟。还好直接看日志就能发现问题——journalctl -xe里面出现了红红的nouveau sched_error ctxsw_timeout,几乎能让人确信是 nouveau显卡驱动的问题。

查了一下,貌似是一个普遍的问题:Bug 93629 – [NVE6] complete system freeze, PGRAPH engine fault on channel 2, SCHED_ERROR [ CTXSW_TIMEOUT ],而且看不到被解决的趋势。

对症下药,我赶紧卸载 nouveau,切换了 Nvidia 的官方驱动,至今运行良好:

sudo pacman -S nvidia

Virtualbox 和 Nvidia 显卡

这时我突然想起,会不会 Virtualbox 的问题,也是 nouveau显卡驱动的问题呢?我激动地打开了 Virtualbox,登陆,一切如期。看来真的是缘起这个显卡驱动。

我还没激动多久,又出现了一个问题。用 Windows 的目的之一,是测试 Angular 对 IE11/Edge 的 polyfill 管不管用。所以我打开 Edge,加载最近在写的 www.zjuqsc.com/m,却发现整个图形界面都在不停闪烁。起初我以为是 UWP 的 bug,然而换了 IE 之后依然如此,安装了 QQ 之后依然如此。我又一次失望起来——这事情就搞不好了吗?

还好,搜索 “virtualbox windows10 flickering” 直接给出了答案:SCREEN FLICKERING IN VIRTUALBOX WITH 3D ENABLED [UPDATED SEP 21, 2017]

看起来,是 Nvidia 显卡的 3D 加速驱动的问题。根据文中内容,虽然只要改动一行代码,但是由于会「破坏一位付费用户用的某些功能」,所以官方不会修改,只能用户自己动手。

好在作者和一位评论者,分别提供了 5.1.85.1.30 编译好的、要打补丁的那个文件VBoxOGLrenderspu.so,只要用它替换/usr/lib/virtualbox/里的同名文件就行了。后者经过我测试,是可以在 ArchLinux 下的 Virtualbox 5.2.* 下正常工作的。

后记

Linux 下的桌面环境,还存在种种问题。还好这些问题现在基本是可以修复的。尤其是相比 Windows 下不可忍受的效率问题,还是早日切换到 Linux 的好。

freetiger18 :