![当选择 iGPU 时,fglrx 在锁屏或关闭盖子时冻结](https://linux22.com/image/1118398/%E5%BD%93%E9%80%89%E6%8B%A9%20iGPU%20%E6%97%B6%EF%BC%8Cfglrx%20%E5%9C%A8%E9%94%81%E5%B1%8F%E6%88%96%E5%85%B3%E9%97%AD%E7%9B%96%E5%AD%90%E6%97%B6%E5%86%BB%E7%BB%93.png)
我的系统有混合(我相信是无多路复用,即只有集成卡实际连接到显示器)图形。第一张卡是Intel HD 4400
,第二张卡是AMD Radeon HD 8670M
(太阳系系列,不是 OLAND)。因此,目前开源radeon
驱动程序不支持该卡,我被迫使用专有fglrx
驱动程序。
为什么不直接关闭没有 fglrx 的 dGPU 卡?
我不需要花哨的图形,只要它适当地已关闭,不会过热/耗电。对我来说,没有开关的选项fglrx
似乎pxpress
有限:我没有vgaswitcheroo
开关(甚至在fglrx
安装之前也没有),我只能推断这是因为radeon
驱动程序尚不支持我的卡/尚未正确加载它,请参阅我的问题这里了解关于此内容和我尝试过的内容的更多信息。其他方法acpi_call
被报告为最好的“概念验证”,最坏的情况是危险的,所以我宁愿不冒险使用它们。更可靠的项目只有bumbleebee
nividia。
只需让 AMD 卡保持无驱动程序状态
仅依靠i915
英特尔驱动程序就可以完美运行,没有错误,没有问题,但是 AMD 卡却无人认领,可能会导致过热/电池耗尽,所以我对此不太高兴。
带有 fglrx 的 Ubuntu 12.04 LTS
我从这里开始,在iGPU
选择时遇到了一个错误。每当屏幕锁定、笔记本电脑盖关闭,甚至当计算机处于非活动状态xscreensaver
且安装了类似的东西而没有启用锁屏时,都会出现此错误。它会导致黑屏,只有可移动的光标;切换 tty 并返回无法恢复,需要从 tty 重新启动。它不是每次都发生,但相当有规律地发生,至少每天发生一两次。所有保存的工作都会丢失。
我尝试了存储库中的版本fglrx
以及 AMD 网站上的最新 13.10 版本。没有变化。
当选择 dGPU 时(从 AMD Catalyst 控制中心,或最终通过 pxpress),此错误不会发生,但我有另一个错误,我不会在这里讨论它。
带有 fglrx 的 Ubuntu 13.10
这里有一个非常相似的错误,但不那么严重。完全相同的条件,即锁屏、关闭盖子、不活动(如果正在使用 xscreensaver)。这次冻结的屏幕不是黑色,而是冻结时桌面的图片,同样带有可移动的光标。在这里我只尝试了最新的 fglrx AMD 驱动程序 13.10。
i915
仅驱动程序(否)再次没有问题,fglrx
并且选择再次没有问题dGPU
。
我尝试过的一些方法:
1) 禁用vsync
。我在 compiz 设置管理器中尝试了此操作,然后aticonfig --sync-vsync=off
重新启动。不用找了。
Option "DPMS" "false"
2)在监视器部分关闭 DPMS。xorg.conf
(当然,我也将 gnome 设置更改为“不执行任何操作/不挂起”以用于电池和 AC)。不用找了。
3)Option "AIGLX" "off"
在服务器标志中xorg.conf
。不用找了。
4)修改atieventsd
以便它在 Ubuntu 上正常工作,请参阅我的帖子这里。还有,没有它也能跑步。不用找了。
5)使用选项启动
Option "Capabilities" "0x00000800"
Option "KernelModuleParm" "locked-userpages=0"
Option "NoAccel" "True"
在xorg.conf
设备节中。不用找了。
6)使用nomodeset
内核参数启动。不用找了。
7)关闭acpi
交互aticonfig
:
--acpi-services=off
--acpi-display-switch=off
不用找了。
为什么它只适用于英特尔?
我不明白的一件事是为什么它只适用于英特尔i915
驱动程序。我以为它pxpress
会在启动时将控制权移交给该驱动程序,所以如果它单独使用i915
,我本来希望它与 pxpress 选择一起使用igpu
。
我知道fglrx
它也安装了自己的 libGl 实现,但是当选择英特尔卡时它会切换回旧的库存 MESA libGL 实现(参见/usr/lib/fglrx/switchlibGL
python 脚本)。
所以当igpu
选择后,它应该fglrx
与重启后的生活完全等同吗?
答案1
经过长时间的研究,我终于发现了关键点:当 fglrx/pxpress 加载英特尔驱动程序时,它会使用UXA
加速方法,而默认情况下(在运行 13.10、安装 fglrx 之前的 Haswell 系统上),英特尔驱动程序会使用加速方法加载SNA
。
我通过xorg.conf
如下方式启动进行测试:
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "AccelMethod" "UXA" # (fglrx uses this) I can see the bug
#Option "AccelMethod" "SNA" #(default) no bug!
EndSection
Section "Monitor"
Identifier "Configured Monitor"
EndSection
Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
EndSection
现在,即使是英特尔,xorg.conf
在关闭一两次盖子后也会出现冻结错误。然而,使用完全相同的配置文件启动,只需要
Option "AccelMethod" "SNA"
无论关闭多少次盖子/锁定多少次屏幕,我都没有发现任何错误(无论如何,这是驱动程序的默认方法,这就是我感到困惑的原因,因为它欺骗了我,让我以为英特尔驱动程序一切都很好,而 fglrx 正在污染一切)。
现在我意识到这是一个英特尔驱动程序问题,谷歌搜索让我找到了解决办法。创建一个文件~/.drirc
来配置 DRI 设置,其中包含
<device screen="0" driver="dri2">
<application name="Default">
<option name="vblank_mode" value="0"/>
</application>
</device>
这将关闭vsync
(该设置可让您的 GFX 卡与屏幕刷新率同步,而不是以其固有的帧速率加速,以避免撕裂)。注意:vsync
使用 aticonfig 关闭是没有意义的,就像我的 OP 中那样,因为这只会关闭 dGPU 而不是英特尔卡。我不确定为什么我尝试使用 Compiz 设置管理器将其关闭却没有成功。
即使使用该UXA
方法,通过这种方式关闭也vsync
可以停止崩溃,即使对于也是如此fglrx
xorg.conf
。
更好的办法是通过某种方式配置pxpress
以使用选项加载英特尔驱动程序SNA
,请参阅我的帖子这里