一次失败的双显卡折腾记

近日购入了一款4K显示器,被高PPI所震撼的同时却发现系统相当卡顿,连鼠标移动都有一种迟滞感,检查显示设置后,发现刷新率被锁定在了30Hz。

在购买显示器之前,我已经在Intel ARK上查询过HD530是支持[email protected]输出的。显然问题并不出在这里。网上搜索发现,HDMI 2.0 才支持[email protected],由于特意购买了标明支持[email protected]的线材,所以问题只可能出在主板上。

然而华擎的产品页面没一个地方写了主板的HDMI到底是1.4还是2.0,找了好久才发现有一行小字写着最大分辨率3840×[email protected],妥妥的没戏。

核显用不成,那就买独显吧。找了一圈,支持[email protected]输出的亮机卡性价比较高的就是GT640 OEM了,遂下单购买。

到货之后测试发现并不能点亮,在用Ubuntu Live测试之后排除显卡问题,开始漫长的排错之旅。

首先说下硬件情况,由于将第一块独显——RX480用PCI Passthrough 分配给了虚拟机,宿主机一直是用核显的。外加另一块独显之后,状态就是PCI-E插槽1是RX480,插槽2是GT640。主要图形适配器之前一直设为核显,此时改为使用PCI Express。

在开机之后,会在RX480的显示器上打印POST信息,进入GRUB,启动内核。这时RX480上的显示器会停止输出,因为在启动内核过程中RX480就会被vfio接管,这是预期之内的。但接在GT640上的显示器却一直是有信号但是黑屏的状态。

关闭IOMMU,用RX480作为主GPU进入系统,可以看到显卡已经被正确识别,nouveau模块也被正确加载。系统也已经检测到了GT640上的监视器,但无论如何设置都是没有图像。dmesgjournalctl也没有输出什么有用的信息。

这时只好采用终极排错法——一个一个试。把RX480拔下来只留GT640,虽然Xorg有一些问题,但至少能看见图形界面并且tty一切正常。只留RX480,同样一切正常。(补充:N卡的问题是因为最近版本的nouveau的bug)

还排查不出来那就再换个方法,交换两块显卡的位置,虽然Xorg仍然无法启动但tty已经可以进入。查看Xorg的日志之后发现Xorg无法找到正确的监视器,不过还好,至少Xorg是可以手动配置的。

但将GT640插在插槽1,RX480插在插槽2对我来说是不可接受的。原因有二:

  1. 只有插槽1是直连CPU的,插槽2则会绕道PCH,性能有损失。外加插槽2会和板载的一堆东西分在一个IOMMU组里面,想要使用PCI Passthrough还要自己编译内核。
  2. 插槽2只有4x的速度。

通过一番Google,搜索到了vfio邮件列表当中的一封邮件(Re: [vfio-users] Boot using second GPU?),遂添加了video=efifb:off内核参数,并将两块卡的位置恢复到之前的样子。

不过问题又来了,Xorg无论如何都无法启动。我在Xorg.conf.d下添加了显示卡配置文件,但Xorg仍然抱怨无法找到监视器。好吧,那我继续添加监视器配置。这时Xorg日志中显示KMS(Kernel Mode Setting)加载失败。

nouveau是依赖于KMS运行的,但是我没有关闭KMS啊?查看Arch Wiki

At first, note that for any method you use, you should always disable:

  • Any vga= options in your bootloader as these will conflict with the native resolution enabled by KMS.
  • Any video= lines that enable a framebuffer that conflicts with the driver.
  • Any other framebuffer drivers (such as uvesafb).

嗯,好吧。

找了找,闭源驱动是不依赖KMS的,那就装闭源驱动好了。

不过,即便开了DRM kernel mode setting,性能仍然弱鸡,Kwin处处可见卡顿,tty直接黑屏,进入GRUB就开始黑屏,直到Xorg启动。难怪NVIDIA的Troubleshooting和Tips and Tricks都要单独一页,嗯。

最后也不知道这些问题是切换主GPU产生的还是驱动问题,不过tty用不了,GRUB看不见,这还能用么?卡退了。换主板。

 

 

又一次奇特的问题解决

因为有在床上开电脑的需求,所以某天爬了Arch Wiki来配置WOL。

碰到的第一个问题就是跑# ethtool interface | grep Wake-on压根没有任何输出,想了想E2400应该还没寒酸到连WOL支持都没有,遂Google一番看到Arch论坛有个求助帖,解答就是再读一遍Wiki…

好吧,拉到Wiki的在下面,发现确实有alx相关的内容,虽然such as里面没有E2400,但E2400应该是包括在内吧…嗯。

去AUR搜索一番,果然有人已经打好包了,就是alx-wol-dkms,装完之后美滋滋,WOL运行一切正常。

不过问题很快又来了,我发现这个包在内核更新的时候不会自动重编译,必须再装一遍这个包,pacman hooks才能正常工作。最初我还以为手贱删了什么东西,外加重新装过之后再次安装内核也能自动编译了,就当问题解决了。不过我很快就发现,一旦重启一次,安装内核的时候又不能自动重新编译了…

继续阅读“又一次奇特的问题解决”

干掉「没有找到数据库错误」

强迫症拯救世界!!!

近期yaourt更新(orpacman?)之后,每次执行yaourt -Syu之后都有一行恼人的提示:

尽管我知道这句话的原文是:「No database error have been found.」,也就是说数据库没有错误的意思,而且我也因为yaourt缺乏维护(参见Wiki(翻译很烂))早早换用了trizen,但总还是有喜欢用yaourt的强迫症患者忍受不了这个问题。
查看yaourt的源码可以看到(位于/lib/misc.sh),yaourt的这个动作实际上是调用了pacman -Dk来完成的。于是很自然地,可以想到两种解决办法。
继续阅读“干掉「没有找到数据库错误」”

关于KDE「文件搜索」的一些设置

Can you work-out-of-box???

自从某次系统更新之后,我的Dolphin文件搜索功能就一直不大正常,但我抱着能将就用就将就用的心态一直忍着。直到今天要改源码的时候才发现没有搜索这文件管理器真是不能用……
继续阅读“关于KDE「文件搜索」的一些设置”

为bomi开启硬件解码

可以参考这篇Wiki
环境:Arch Linux,RX480,开源驱动。
首先安装相关的库(以VDAPI为例):

pacman -S mesa-vdpau

如果一切正常,那么这时bomi设置中的硬件解码选项应该已经可选。
如果工作不正常,可能需要手动设置环境变量。
首先查看自己使用的驱动程序:

grep -i vdpau /var/log/Xorg.0.log

radeonsi为例,加入环境变量:

VDPAU_DRIVER=radeonsi

即可。

一个简单的.service配置文件实例

用于启动Brook Client:
[Unit]
Description=Brook Client

[Service]
ExecStart=/path/to/brook client -l 127.0.0.1:1080 -i 127.0.0.1 -s your_sever:port -p your_password

[Install]
WantedBy=multi-user.target

 

将其保存为Brook.service,移动到/etc/systemd/system
执行:
systemctl start Brooksystemctl enable Brook
即可。