AMD Catalyst (简体中文)
相关文章
AMD的显卡驱动有两种:一是官方私有驱动(catalyst,译为催化剂),二是开源驱动(xf86-video-ati).本文主要介绍私有驱动。
AMD曾经将“catalyst”驱动命名为“fglrx” (FireGL and Radeon X). 现在虽然名为“catalyst”,但内核模块名称依然为“fglrx.ko”. 因此,下文中任何提及fglrx 都是指“内核模块”,而不是指软件包.
官方仓库不再提供Catalyst。 Catalyst 曾被移出Arch官方支持,原因是对质量与开发速度的不满。该项目于2013年4月被再次丢弃,截止现在还没有进一步的消息.
与开源驱动相比, Catalyst 在2D,3D渲染和电源管理上更胜一筹,但缺乏高效的多显支持.支持设备为 ATI/AMD Radeon显卡,芯片组 R600 及以上(Radeon HD 2xxx或者更新). model名称 (如X1900, HD4850) 与 chip名称 (分别是R580, RV770)间的对照请参见Xorg decoder ring或者这个表格.
Contents
- 1 安装
- 2 Xorg软件库
- 3 工具
- 4 功能
- 5 卸载
-
6 故障排除
- 6.1 运行 atieventsd.service 失败
- 6.2 无法打开 fglrx_dri.so
- 6.3 启动 GDM 失败
- 6.4 在Wine上3D应用冻结
- 6.5 视频颜色不正常
- 6.6 KWin 与混成
- 6.7 重启或启动x后,黑屏并且一直不退出
- 6.8 注销后KDM消失
- 6.9 直接渲染无效
- 6.10 休眠问题
- 6.11 系统冻结或硬件锁死
- 6.12 硬件冲突
- 6.13 播放视频时系统短时间死机
- 6.14 "aticonfig: No supported adaptaters detected"
- 6.15 让chromium支持WebGL
- 6.16 用Adobe的flashplugin观看flash,画面迟滞或冻结
- 6.17 GNOME3中移动窗口延迟/很慢
- 6.18 在1920x1080分辨率下不能全屏(欠扫描,屏幕周围有黑边)
- 6.19 双屏设置: 关于加速,OpenGL,合成,效能的一般问题
- 6.20 禁用VariBright功能
- 6.21 Hybrid/PowerXpress: 关掉独立GPU
- 6.22 从X会话切换到TTY黑屏/低分辨率TTY
- 6.23 从X会话切换到TTY黑屏,背光并没有关闭
- 6.24 切换TTY后切换回X会话时,只有一个带鼠标的黑屏
- 6.25 30 FPS / Tear-Free / V-Sync bug
- 6.26 背光调节不起效
- 6.27 使用 plasma 时 Chromium 出现毛刺(glitching)
- 7 参见
安装
共有三种途径安装Catalyst。第一种是用Vi0L0(Arch非官方Catalyst维护人员)维护的软件库.此库包涵了所有可用的软件包.第二种方式就是通过AUR,Vi0L0提供的PKGBUILDs跟他用于构建他仓库的PKGBUILDs完全一样。最后你还可以直接通过AMD官方下载Catalyst.
自Catalyst 12.4, AMD已将针对Radeon HD 5xxx 和 Radeon HD 2xxx, 3xxx and 4xxx 显卡驱动分开开发,因此在你选择何种安装方式之前,应查看你的显卡型号。Radeon HD 2xxx, 3xxx and 4xxx 显卡用 legacy驱动,Radeon HD 5xxx(以及更新的)用普通Catalyst。但无论你需要哪种驱动,都应安装Catalyst utilities。
安装Catalyst
从非官方软件库
如果你不喜欢通过AUR来安装,则使用此方法。此软件库由我们的Vi0l0维护。所有的包都经过签名,所以安全方面无需担心。下文提及的很多其他与AMD显卡有关的包也是由Vi0L0维护。
Vi0L0有三个不同的Catalyst软件库:
- catalyst:Radeon HD 5xxx及更新的显卡使用的普通Catalyst驱动。包含了最新的 (稳定版或者beta版) Catalyst.
- catalyst-stable:Radeon HD 5xxx及更新的显卡使用的普通Catalyst驱动。包含了最新的稳定版 Catalyst.
- catalyst-hd234k:Radeon HD 2xxx, 3xxx and 4xxx显卡使用的legacy Catalyst驱动.
要启用上述软件库的话,参见Unofficial user repositories中所述方法. 记得在pacman.conf
中的其他软件库之前添加相应软件库.
完成后更新pacman数据库并安装这些软件包(更多信息参见#工具):
- catalyst-hook
- catalyst-utils
- catalyst-libgl
- opencl-catalyst - 可选,OpenCL支持
- lib32-catalyst-utils - 可选,64-bit系统上32-bit的OpenGL支持
- lib32-catalyst-libgl - 可选,64-bit系统上32-bit的OpenGL支持
- lib32-opencl-catalyst - 可选,64-bit系统上32-bit的OpenCL支持
如果你是一台Intel/AMD双显卡笔记本,参考下这个:
- catalyst-hook
- catalyst-utils-pxp
- lib32-catalyst-utils-pxp - 可选,64-bit系统上32-bit的OpenGL支持
通过AUR安装
还可以通过AUR安装。如果你需为你的电脑进行定制安装,则用此方法。此方法极为繁琐,因为它需要的工作量最大,而且每次内核更新后你得手动更新Catalyst。
在 Vi0L0's 软件库中提到的一切软件包AUR中也可用::
- CatalystAUR
- Catalyst-generatorAUR
- Catalyst-hookAUR
- Catalyst-utilsAUR
- Lib32-catalyst-utilsAUR
AUR还提供些独家软件包。它含有被称为 Catalyst-total的包和一些beta阶段的软件:
catalyst-totalAUR包能让AUR用户更为方便。它能构建驱动、内核工具、32位内核工具和catalyst-hookAUR(参见#工具).
catalyst-total-pxpAUR让Catalyst对powerXpress提供实验性支持。
配置驱动
安装完毕后,要配置 X,让其使用Catalyst。要确保fglrx模块在启动阶段加载,而且要禁用kernel mode setting.
配置X
你需要创建 xorg.conf
文件来配置X. Catalyst提供了aticonfig
工具来创建和(或)修改此文件。
通过访问/etc/ati/amdpcsdb
文件它几乎能配置显卡的各项参数。了解完整的配置选项aticonfig
可运行:
# aticonfig --help | less
现在来配置 Catalyst. 若只有一个显示器,运行:
# aticonfig --initial
注意,若你使用双显示器则使用下面的命令。 此命令会成两个配置文件,第二个显示器的配置文件在第一个前面
# aticonfig --initial=dual-head --screen-layout=above
你可与Sample Xorg.conf上的任何一个示例文件进行对照。
虽然目前的版本的Xorg启动时能自动探测大多数选项,但不同Xorg版本的默认参数可能会有所不同,最好明确指定一些参数.
给一个示例配置 (注意) 仅供参考. 标#
必须有,标##
很可能会用到:
/etc/X11/xorg.conf
Section "ServerLayout" Identifier "Arch" Screen 0 "Screen0" 0 0 # 0's are necessary. EndSection Section "Module" Load [...] [...] EndSection Section "Monitor" Identifier "Monitor0" ... EndSection Section "Device" Identifier "Card0" Driver "fglrx" # Essential. BusID "PCI:1:0:0" # Recommended if autodetect fails. Option "OpenGLOverlay" "0" ## Option "XAANoOffscreenPixmaps" "false" ## EndSection Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 # Should not change from '24' Modes "1280x1024" "2048x1536" ## 1st value=default resolution, 2nd=maximum. Virtual 1664 1200 ## (x+64, y) to workaround potential OGL rect. artifacts/ EndSubSection ## fixed in Catalyst 9.8 EndSection Section "DRI" Mode 0666 # May help enable direct rendering. EndSection
更多信息参考这里.
启动时加载模块
禁用radeon
以防其自动加载. 在/etc/modprobe.d/modprobe.conf
里禁用radeon,同时保证它不被/etc/modules-load.d/
里的文件加载. 详见kernel modules#Blacklisting.
接下来,使模块fglrx
自动加载. 添加fglrx
到/etc/modules-load.d/
下已有的模块文件的新一行,或者创建一个新的模块文件并添加fglrx
.
禁用KMS
禁用KMS很重要.由于Catalyst根本不使用KMS,得将其禁用。否则,当系统切换至TTY或在桌面环境下关机时,系统可能会冻结。
添加 nomodeset
到你的 内核参数.
检查安装是否成功
重启电脑并登录, 运行下列命令可查看fglrx
是否正确运行:
$ lsmod | grep fglrx
若有输出, 则证明安装成功。可以尝试用 $ startx
或者显示管理器来启动X (参见 Xorg#Running).
下面的命令可以输出你的显卡型号信息:
$ fglrxinfo
运行以下命令检查直接渲染模式是否启用:
$ glxinfo | grep direct
若显示"direct rendering: yes"
,恭喜你,到位了! 若无$ glxinfo
命令,安装mesa-demos package。
自己编译内核
在手动编译的内核上,你必须构建你自己的catalyst-$kernel
包.
- 从Catalyst上获取
PKGBUILD
和catalyst.install
文件。 - 编辑PKGBUILD. 两个地方需要修改:
- 将
pkgname=catalyst
修改为pkgname=catalyst-$kernel_name
,$kernel_name
可以随意取(如:custom, mm)。 - 将
linux
的依赖修改为$kernel_name
。
- 将
- 构建并安装软件包;运行
makepkg -i
和makepkg
,接着运行# pacman -U pkgname.pkg.tar.gz
PowerXpress support
PowerXpress technology 允许支持dual-graphic功能(以前叫做AMD Hybrid CrossFire technology)的笔记本电脑从集成显卡(IGP) 切换到独立显卡,以增加电池寿命或者实现更好的3D渲染效能。
为了在archlinux上用上这个功能,你j将需要:
- 从 AUR 获取并编译 catalyst-total-pxpAUR 这个软件包,或者
- 从 [catalyst] 软件仓库安装 catalyst-utils-pxp 软件包 (如果需要,还有 lib32-catalyst-utils-pxp)。
对于intel集成显卡的切换,你还需要安装 mesa-libgl 软件包和intel的驱动:xf86-video-intel 。
现在你可以用下面这些命令切换集成显卡和独立显卡:
# aticonfig --px-igpu #for integrated GPU # aticonfig --px-dgpu #for discrete GPU
Just remember that fglrx needs /etc/X11/xorg.conf
configured for AMD's card with fglrx
inside.
要记着对含有 fglrx
模块的AMD显卡,fglrx需要 /etc/X11/xorg.conf
这个文件
你也可以用pxp_switch_catalyst
这个切换脚本完成一些其他有用的操作:
- Switching
xorg.conf
- it will renamexorg.conf
intoxorg.conf.cat
(if there is fglrx inside) orxorg.conf.oth
(if there is intel inside) and then it will create a symlink toxorg.conf
, depending on what you chose. - Running
aticonfig --px-Xgpu
. - Running
switchlibGL
. - Adding/removing
fglrx
into/from/etc/modules-load.d/catalyst.conf
.
Usage:
# pxp_switch_catalyst amd # pxp_switch_catalyst intel
如果你试图在装有intel驱动的设备上运行X图形界面时遇到问题,你可以尝试强制开启"UXA" acceleration: 在xorg.conf
中写Option "AccelMethod" "uxa"
,就象这样:
/etc/X11/xorg.conf
Section "Device" Identifier "Intel Graphics" Driver "intel" #Option "AccelMethod" "sna" Option "AccelMethod" "uxa" #Option "AccelMethod" "xaa" EndSection
同时运行两个X server(一个使用Intel驱动, 一个使用 fglrx)
因为fglrx容易崩溃(考虑到PowerXpress),主要X server使用Intel驱动,另一个使用需要3D加速的fglrx驱动是个不错的选择。但是在开启第二个X server的时候,简单地从集成显卡 aticonfig
或者 amdcccle
切换到独立显卡将引发一系列不正常的bugs。
为了同时运行两个X server(每个用不同的驱动),你首先需要设置出一个可以和Catalyst一起正常工作的X图形环境,然后把它的 xorg.conf
移动到一个临时的地方(比如/etc/X11/xorg.conf.fglrx
)。下次X图形环境启动时,它将默认使用intel驱动来代替fglrx。
在开启第二个使用fglrx的X server,只需要在运行X之前,把xorg.conf
移回合适的地方(/etc/X11/xorg.conf
)。这个方法甚至允许你在两个运行的X sessions之间来回切换。当你不需要使用fglrx时,再把 xorg.conf
移动到其他地方。
这种方法唯一的坏处是不能使用intel驱动的3D加速。但它的2D却能完全发挥作用。除此之外,它还能给我们一个非常稳定的桌面环境。
多显示器的PowerXpress笔记本运行于AMD模式时(pxp_switch_catalyst amd)的问题
当PowerXpress笔记本工作于AMD-only模式时(比如设置全部渲染工作交给独显),你有可能会遇到显示器伪影/重复的情况.这是一个已知的问题,发生于7xxxM系列显卡.
当旋转或者缩放一个显示器时现象会消失,所以你可以使用xrandr来解决这个问题:
xrandr --output HDMI1 --left-of LVDS1 --primary --scale 1x1 --output LVDS1 --scale 1.0001x1.0001
Xorg软件库
Catalyst由于其缓慢的更新而被人大为诟病。因升级Xorg而造成两者不兼容是稀松平常的事。也就意味着Catalyst用户要么自己编译Xorg的包要么使用一个只包含Xorg包的回溯软件库,该库中不提供更新版Xorg以确保兼容性。 Vi0L0提供好几个这样的库.
要启用上述软件库的话,参见Unofficial user repositories中所述方法. 记得在pacman.conf
中的其他软件库之前(甚至在你的catalyst仓库前,如果你有的话)添加相应软件库(使用和catalyst库相同的PGP密匙).
xorg117
Catalyst 不支持 xorg-server 1.18
[xorg117] Server = http://catalyst.wirephire.com/repo/xorg117/$arch ## Mirrors, if the primary server does not work or is too slow: #Server = http://mirror.rts-informatique.fr/archlinux-catalyst/repo/xorg117/$arch #Server = http://mirror.hactar.bz/Vi0L0/xorg117/$arch
xorg116
Catalyst < 15.7 不支持 xorg-server 1.17
[xorg116] Server = http://catalyst.wirephire.com/repo/xorg116/$arch ## 如果上面那个不行或者太慢的话就换这些镜像站: #Server = http://mirror.rts-informatique.fr/archlinux-catalyst/repo/xorg116/$arch #Server = http://mirror.hactar.bz/Vi0L0/xorg116/$arch
xorg115
Catalyst < 14.9 不支持 xorg-server 1.16
[xorg115] Server = http://catalyst.wirephire.com/repo/xorg115/$arch ## 如果上面那个不行或者太慢的话就换这些镜像站: #Server = http://mirror.rts-informatique.fr/archlinux-catalyst/repo/xorg115/$arch #Server = http://mirror.hactar.bz/Vi0L0/xorg115/$arch
xorg114
Catalyst < 14.1 不支持 xorg-server 1.15.
[xorg114] Server = http://catalyst.wirephire.com/repo/xorg114/$arch ## 如果上面那个不行或者太慢的话就换这些镜像站: #Server = http://mirror.rts-informatique.fr/archlinux-catalyst/repo/xorg114/$arch #Server = http://mirror.hactar.bz/Vi0L0/xorg114/$arch
xorg113
Catalyst < 13.6 不支持 xorg-server 1.14.
[xorg113] Server = http://catalyst.wirephire.com/repo/xorg113/$arch ## 如果上面那个不行或者太慢的话就换这些镜像站: #Server = http://mirror.rts-informatique.fr/archlinux-catalyst/repo/xorg113/$arch #Server = http://mirror.hactar.bz/Vi0L0/xorg113/$arch
xorg112
Catalyst < 12.10 和 Catalyst Legacy 不支持 xorg-server 1.13.
[xorg112] Server = http://catalyst.wirephire.com/repo/xorg112/$arch ## 如果上面那个不行或者太慢的话就换这些镜像站: #Server = http://mirror.rts-informatique.fr/archlinux-catalyst/repo/xorg112/$arch #Server = http://mirror.hactar.bz/Vi0L0/xorg112/$arch
工具
Catalyst-hook
Catalyst-hookAUR 是一个 systemd 服务,它在系统关机或重启后重新构建fglrx
模块(如果需要的话,比如内核升级后).
使用之前请保证 base-devel 组和 linux-headers 包(对应你的内核)已经安装.
只需激活catalyst-hook.service
服务即可:
# systemctl enable catalyst-hook # systemctl start catalyst-hook
你也可以用这个软件包来手动构建fglrx
模块. 在内核更新后运行 catalyst_build_module
脚本即可:
# catalyst_build_module all
一些技术细节:
The catalyst-hook.service
is stopping the systemd "river" and is forcing systemd to wait until catalyst-hook finishes its job.
catalyst-hook.service
调用 catalyst_build_module check
来检查是否有必要重构建fglrx.
check
检查fglrx
模块是否存在:
- 不存在,将构建它;
- 存在,它将比较两个参数来确定是否有必要重构建
fglrx
.
这里的参数是 /usr/lib/modules/<kernel_version>/build/Module.symvers
的md5值. (因为我(这里指Vi0L0)发现每一个版本的这个文件都不一样). 第一个参数是现有的 Module.symvers
文件md5.第二个参数是fglrx
模块构建时 Module.symvers
文件的md5. 这个参数被catalyst_build_module
脚本编译到fglrx
模块.
如果参数不同,将编译新的fglrx
模块.
check 检查整个 /usr/lib/modules/
目录 ,为安装的所有内核编译fglrx模块(如果需要的话). 如果没有必要构建或重构建,进程将很快结束.
Catalyst-generator
catalyst-generatorAUR包能构建并安装fglrx
模块,该模块与pacman兼容的catalyst-${kernver}
相适应。与#Catalyst-hook的区别是必须手动使用此命令,而Catalyst-hook则不需。
通过makepkg,它能构建catalyst-${kernver}
二进制包并用pacman安装。${kernver}
是软件包的目标内核版本 (例如 catalyst-2.6.35-ARCH 适用于 2.6.35-ARCH 内核).
非特权用户使用catalyst_build_module
来构建并安装catalyst-{kernver}
包。安装时会提示输入root密码。
简单说一下如何使用此包:
- root用户: 使用
catalyst_build_module remove
。此举会删除无用的catalyst-{kernver}
包。 - 非特权用户: 使用
catalyst_build_module ${kernver}
,${kernver}
是指升级过后的内核版本。也可通过catalyst_build_module all
为所有安装的内核构建catalyst-{kernver}
。 - 若要删除
catalyst-generator
, 在使用catalyst_build_module remove_all
命令删除catalyst-generator之前最好切换到root用户,这会删除所有catalyst-{kernver}
包.
当删除Catalyst-generator
时,Catalyst-generator
不能自动删除那些catalyst-{kernver}
包,这是因为pacman不允许有一个以上的实例同时运行。若在使用# pacman -R catalyst-generator
前忘记运行# catalyst_build_module remove_all
,catalyst-generator将会询问删除catalyst-generator自身后要删除哪个catalyst-{kernver}
包。
Catalyst-generator 是最安全的,最符合KISS原则的,因为:
- 你可以使用非特权用户来构建包;
- 它在 fakeroot 环境构建包;
- 它不乱丢文件,pacman知道文件们在哪;
- 你需要做的只是,记得去使用它
OpenCL / OpenGL 开发
这几年AMD一直在为OpenCL and OpenGL的开发做一套工具集。
现在AMD在"Heterogeneous Computing"的旗帜下提供了更多的工具集,幸运的是它们也在Linux下可用。
在AUR和 [catalyst] 软件仓库,你可以找到这些代表了AMD最重要工作的工具软件包:
- amdapp-aparapiAUR
- amdapp-sdkAUR
- amdapp-codexlAUR
APP 这个缩写代表 Accelerated Parallel Processing(加速并行处理)。
amdapp-aparapi
AMD的Aparapi是一个用java实现的API,用于并行地表达图像数据,它同时也是一个能把java字节码翻译成能被OpenCL识别的运行时组件。所以它能够被很多种图形处理器(GPU)执行。如果Aparapi在GPU上不能执行,那将在java的线程池中执行。
更多关于Aparapi的信息:here。
amdapp-sdk (以前的amdstream)
AMD APP 软件开发工具套件,是一个由AMD制作地一套完整的开发平台。它让你能够快速和容易地使用AMD APP技术,使得你的程序得到加速。这个SDK提供了代码实例,技术文档和其他资料,让您可以在你的C\C++程序中使用 OpenCL, Bolt, or C++ AMP等技术实现计算加速。
从2.8版本开始,amdapp-sdk 提供了 aparapiUtil 和 aparapi 的代码实例。有一个包已经加入到了[catalyst]软件仓库。它依赖于amdapp-aparapiAUR。AUR中的软件包让你选择需不需要aparapi's additions。
2.8 版本没有提供探查功能( Profiler functionality),它已经被移到CodeXL中了。
关于 AMD APP SDK 的更多信息: here。
amdapp-codexl
CodeXL 是一个带有静态OpenCl内核分析器的OpenCL and OpenGL调试器和探查器。它具有GUI界面,是在著名的gdebuggerAUR 基础上完成的。它只支持 x86_64 系统。
关于CodeXL的更多信息: 这里。
功能
Tear Free Rendering
在Catalyst 11.1中,很可能是添加了三重缓存和v-sync,Tear Free Desktop减少了2D,3D视频应用的屏幕撕裂毛病。但这需要额外的GPU处理。
要启用'Tear Free Desktop',运行amdcccle
,然后设置Display Options
→ Tear Free
。
或以root身份运行:
# aticonfig --set-pcs-u32=DDX,EnableTearFreeDesktop,1
若禁用,使用amdcccle
或以root身份运行:
# aticonfig --del-pcs-key=DDX,EnableTearFreeDesktop
视频加速
Video Acceleration API (VA API)是为基于Linux/UNIX操作系统提供利用GPU加速视频处理的一个开源函数库和应用程序接口规范。启用视频加速后,通过各种入口(VLD, IDCT, Motion Compensation, deblocking)它能加速常用编码标准(MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/WMV3)视频文件的解码过程(俗称硬解)。
VA-API在xvba-videoAUR上有一个私有后端(2009年10月), 它允许使用VA-API的程序通过XvBA (X-Video Bitstream Acceleration API designed by AMD)函数库来充分利用拥有uvd2(第二代通用视频解码单元)芯片组的视频加速功能.
xvba-video和支持XvBA的软件仍还在开发,但在大多数情况下它都能很好的工作. 通过AUR构建(或通过Vi0L0的仓库直接安装)专有xvba-videoAUR包,若这个版本对你来说有问题,用libva-xvba-driverAUR取代; 并安装mplayer-vaapiAUR and libva。然后将视频播放器的视频输出设置为vaapi:gl:
$ mplayer -vo vaapi:gl movie.avi
此选项可添加到mplayer的配置文件,参考MPlayer。
针对 smplayer:
Options → Preferences → General → Video (tab) → Output driver: User Defined : vaapi:gl Options → Preferences → General → Video (tab) → Double buffering on Options → Preferences → General → General → Screenshots → Turn screenshots off Options → Preferences → Performance → Threads for decoding: 1 (to turn off -lavdopts parameter)
针对 VLC:
Tools → Preferences → Input & Codecs → Use GPU accelerated decoding
它有助于在amdcccle中启用v-sync:
3D → More Settings → Wait for vertical refresh = Always On将"Suspend desktop effects for fullscreen windows"开启或关闭。}}
显卡/显存频率, 温度, 风扇转速, 超频工具
$ aticonfig --od-getclocks
可以获知当前显卡/显存频率。
$ aticonfig --pplib-cmd "get fanspeed 0"
可以获知风扇转速(显卡);
$ aticonfig --odgt
可以获知显卡温度。
$ aticonfig --pplib-cmd "set fanspeed 0 50"
可以设置风扇转速,其中查询索引50代表速度百分比。
若超频或与之相反,则使用图形工具反而相对容易些,如需要qt的ATi Overclocking Utility。你可以从这儿找到(不过它可能过时了).
更复杂的amdoverdrivectrlAUR也能达到此目的,它的主页是here。可通过AUR或Vi0L0's非官方软件库构建安装包。
双屏显示
介绍
- 本节讲述如何配置"BIG Desktop"效果。主要是不同尺寸的屏幕如何通过两个不同的输出接口(DVI + HDMI)共享一个显卡。
- Xinerama解决办法有些不便,尤其是不能与XrandR兼容。因为XrandR对于我们所讲的来说是必须的,所以不使用Xinerama。
- 双头显示能让你有两个不同的会话(一个屏幕一个)。你可以随心所欲地干任何事情,但不能将窗口从一个屏幕移动到另一个屏幕。若只有一个屏幕,你得在Xorg会话里为Server Layout section的每个会话定义鼠标,具体方法查看:
ATI Catalyst Control Center
ATI的图形工具非常有用,我们将尽可能地使用它。运行下面命令可启用它:
$ {kdesu/gksu} amdcccle
安装
开始之前,确保你的硬件接插正确,电源开启,而且你得你的硬件属性(2D还是3D屏,屏幕尺寸,刷新率等)。通常情况下,在启动阶段两个显示器都会被识别却不需正确区分先后顺序,而是依赖热插拔功能。尤其在不使用(/etc/X11/xorg.conf
)配置时。
首先要让你的桌面环境和X认识你的显示器。为此,要为你两个显示器生成基本的Xorg配置文件:
# aticonfig --initial --desktop-setup=horizontal --overlay-on=1
或
# aticonfig --initial=dual-head --screen-layout=left
{{注意|overlay
非常重要,因为它能让两个显示器拥有1种(多种)像素。
现在可编辑基本的Xorg配置文件(如:添加分辨率)。分辨率一定要正确,尤其是使用不同尺寸的显示器。分辨率在"Screen" section:
SubSection "Display" Depth 24 Modes "X-resolution screen 1xY-resolution screen 1" "Xresolution screen 2xY-resolution screen 2" EndSubSection
这以后就不需手动编辑xorg.conf
,而ATI的图形化工具。重启X,确保正确支持两个显示器和识别屏幕分辨率(两个屏幕相互独立而不是完全一样。
设置
现在只需以root身份启动ATI控制中心,在显示菜单设置你需要的选项(下拉菜单中的小箭头)。设置好后重启X就大功造成(你和我都可松口气了,这段翻译有点难度,呵呵)!
重启X之前,不要忘了核实xorg.conf
。主要是核实"Display"下的"Screen"节, 在"Virtual"行里,两个显示器的分辨率应该一样。"Server Layout"节则是剩下的参数。
卸载
你可能会因为catalyst不工作或者是想试试开源驱动而要卸载掉catalyst:移除 catalyst
和 catalyst-utils
包. 当然你也应该移除 catalyst-generatorAUR, catalyst-hookAUR 和 lib32-catalyst-utilsAUR 包(如果你安装了的话).
按如下步骤:
- 如果你有
/etc/modprobe.d/blacklist-radeon.conf
,删除文件或者注释掉文件中的blacklist radeon
. - 如果你在
/etc/modules-load.d
下有配置文件要在启动时载入fglrx
模块, 删除掉或者注释掉fglrx
那一行. - 记住删除/备份
/etc/X11/xorg.conf
. - 如果安装了 catalyst-hookAUR 包,记得关掉它的systemd服务的自启动.
- 如果你在 内核参数 中指定了
nomodeset
而现在你打算使用KMS,那么删除nomodeset
.
- 安装另一个驱动之前记得重启 .
故障排除
若能启动到命令行,问题很可能出在/etc/X11/xorg.conf
可阅读/var/log/Xorg.0.log
或通过下列命令查找线索:
$ grep '(EE)' /var/log/Xorg.0.log $ grep '(WW)' /var/log/Xorg.0.log
若看不懂显示的是什么东东,请先搜索论坛,没有结果的话,可将其提交到thread specific to ATI/AMD,注意要提交两者显示的信息。
运行 atieventsd.service 失败
从 官方仓库 安装 acpid. 启用并运行acpid守护进程.
如果还不行, 编辑 /usr/lib/systemd/system/atieventsd.service
,把 acpid.socket
改成 acpid.service
.
无法打开 fglrx_dri.so
创建从 /usr/lib/xorg/modules/dri/fglrx_dri.so
到 /usr/X11R6/lib64/modules/dri/fglrx_dri.so
或其它需要路径的链接:
# mkdir -p /usr/X11R6/lib64/modules/dri # ln -s /usr/lib/xorg/modules/dri/fglrx_dri.so /usr/X11R6/lib64/modules/dri/fglrx_dri.so
启动 GDM 失败
降级 xorg-server 或者试试其它 显示管理器 比如 LightDM.
在Wine上3D应用冻结
若在Wine上3D应用挂起,禁用TLS。使用aticonfig
或编辑/etc/X11/xorg.conf
。使用aticonfig
:
# aticonfig --tls=off
或以root身份打开/etc/X11/xorg.conf
,在Device段添加Option "UseFastTLS" "off"
。
只需来个二选一,然后重启X让其生效。
视频颜色不正常
仍然使用vaapi:gl
来防止画面抖动,但这样不会有视频加速:
- 不使用
-vo vaapi
运行mplayer。
- 若是smplayer,在Options → Preferences → Advanced → Options for MPlayer → Options:中删除
-vo vaapi
。
此后还可以启动smplayer的截屏功能。
KWin 与混成
根据你的显卡,在OpenGL和XRender渲染方式中选择一种更快的。 在某些情况下,XRender还可以解决一些人为的错误(比如调整命令行大小)。
重启或启动x后,黑屏并且一直不退出
检查在启动加载器的内核参数行是否添加了nomodeset
(参考 #禁用KMS)。
你如果在使用legacy驱动 (catalyst-hd234k
) 黑屏的话, 尝试降级 xorg-server 到 1.12 (使用 #xorg112 库).
错误的ACPI硬件调用
出现此种错误很可能是fglrx模块与系统的ACPI硬件调用配合不够默契而自身禁用,屏幕也就不会有输出。
果真那样,运行:
$ aticonfig --acpi-services=off
注销后KDM消失
若使用Catalyst,当注销后你会获取tty1这个控制台而不是KDM的欢迎界面。每次注销后你必须让kdm重启X服务器. 将标题为[X-:*-Core]
段里下面行前的注释删掉:
/usr/share/config/kdm/kdmrc
TerminateServer=True
当前注销KDE后KDM就会出现。
直接渲染无效
若直接渲染有问题,运行:
$ LIBGL_DEBUG=verbose glxinfo > /dev/null
从此命令输出的第一行至末尾都与直接渲染无效有关,且非常详细。
常见错误提示和解决办法:
libGL error: XF86DRIQueryDirectRenderingCapable returned false
- Ensure that you are loading the correct agp modules for your AGP chipset before you load the
fglrx
kernel module. To determine which agp modules you will need, run# hwdetect --show-agp
. Then open your/etc/modules-load.d/fglrx.conf
and add the agp module on a line before thefglrx
line. - 若使用AGP的芯片组,确保加载fglrx模块之前加载正确的agp模块。要确定哪些agp模块,运行
hwdetect --show-agp
,然后打开/etc/modules-load.d
下的fglrx.conf
,将agp模块添加到fglrx行之前。
libGL error: failed to open DRM: Operation not permitted libGL error: reverting to (slow) indirect rendering
libGL: OpenDriver: trying /usr/lib/xorg/modules/dri//fglrx_dri.so libGL error: dlopen /usr/lib/xorg/modules/dri//fglrx_dri.so failed (/usr/lib/xorg/modules/dri//fglrx_dri.so: cannot open shared object file: No such file or directory) libGL error: unable to find driver: fglrx_dri.so
- 某些软件未正确安装。在错误提示中,若路径为
/usr/X11R6/lib/modules/dri/fglrx_dri.so
,彻底注销,然后重新登录。若使用图形化的登录管理器(gdm, kdm, xdm),确保每次登录时/etc/profile
都会被读取。将source /etc/profile
添加到~/.xsession
或~/.xinitrc
通过都达到以上目的(不同的登录管理器修改的文件不一样)。
- 若路径为
/usr/lib/xorg/modules/dri/fglrx_dri.so
,试着重装catalystAUR包。
若错误信息为:
fglrx: libGL version undetermined - OpenGL module is using glapi fallback
可能是因为系统装了多个版本的libGL.so
.下面的命令应该得到这样的回显:
$ locate libGL.s
/usr/lib/libGL.so /usr/lib/libGL.so.1 /usr/lib/libGL.so.1.2
系统应只有3个libGL.so文件,若不止(例如/usr/X11R6/lib/libGL.so.1.2
),则将其删除。
若使用X11R7且系统中有下列文件,系统并不会给出任何错误提示,一定要将他们删除:
/usr/X11R6/lib/libGL.so.1.2 /usr/X11R6/lib/libGL.so.1
休眠问题
视频播放不能从休眠状态中恢复
若启动了framebuffer,Catalyst不能从挂机状态中恢复。在内核参数中添加 vga=0
可禁用framebuffer。
其他加载器,参考#禁用KMS。
系统冻结或硬件锁死
- 过去,
radeonfb
的framebuffer驱动很容易导致这个问题。若内核编译时启用对radeonfb的支持,应换内核看是否能解决此问题。
- 若退出桌面环境(关机、挂机和切换到tty等)时系统冻结,很可能忘记禁用KMS。(参见 #禁用KMS)
硬件冲突
当和某些版本的nForce3芯片组一起使用时,Radeon不能3D加速。目前虽还未找到具体原因,但有资料表明: indicate that it may be possible to get acceleration with this combination of hardware by booting with the drivers from 先用nVIDIA驱动启动到Windows然后再重启系统就可能获得3D加速。在root控制台使用下列命令可识别此问题(会得到与下列相似(使用基于nForce3系统)的输出:):
$ dmesg | grep agp
agpgart: Detected AGP bridge 0 agpgart: Setting up Nforce3 AGP. agpgart: aperture base > 4G
或者还有下面的命令得到如下的回显:
$ tail -n 100 /var/log/Xorg.0.log | grep agp
(EE) fglrx(0): [agp] unable to acquire AGP, error "xf86_ENODEV"
则就有问题。
有些资料说在某些情形下降级主板的BIOS可能有助于解决问题,但注意此方法并不是在各种情况下都适用,而且方法不对则很可能让显卡报废。
参考这个错误报告。
播放视频时系统短时间死机
使用Catalyst可导致此问题。
当用mplayer,若不定时出现几秒到几分钟的死机。查看日志,若有与下面相似的信息:
/var/log/messages.log
Nov 28 18:31:56 pandemonium [<c01c64a6>] ? proc_get_sb+0xc6/0x160 Nov 28 18:31:56 pandemonium [<c01c64a6>] ? proc_get_sb+0xc6/0x160 Nov 28 18:31:56 pandemonium [<f8bc628c>] ? ip_firegl_ioctl+0x1c/0x30 [fglrx] Nov 28 18:31:56 pandemonium [<c01c64a6>] ? proc_get_sb+0xc6/0x160 Nov 28 18:31:56 pandemonium [<c0197038>] ? vfs_ioctl+0x78/0x90 Nov 28 18:31:56 pandemonium [<c01970b7>] ? do_vfs_ioctl+0x67/0x2f0 Nov 28 18:31:56 pandemonium [<c01973a6>] ? sys_ioctl+0x66/0x70 Nov 28 18:31:56 pandemonium [<c0103ef3>] ? sysenter_do_call+0x12/0x33 Nov 28 18:31:56 pandemonium [<c01c64a6>] ? proc_get_sb+0xc6/0x160 Nov 28 18:31:56 pandemonium =======================
给内核参数添加nopat
和/或nomodeset
到内核参数应该能行
"aticonfig: No supported adaptaters detected"
若得到:
# aticonfig --initial
aticonfig: No supported adapters detected
可以在etc/X11/xorg.conf
中设置device,或者复制以前的能工作的 /etc/ati/control
文件 (推荐 - 这也能解决水印的问题),这可能让Catalyst正常工作.
从AMD下载先前版本的fglrx,使用--extract driver
参数运行. 文件将提取到driver/common/etc/ati/control
. 用它覆盖原来的control文件后重启X. 你可以试试不同版本的.
设置型号的方法:在/etc/X11/xorg.conf
将device段设置为:
/etc/X11/xorg.conf
Section "Device" Identifier "ATI radeon ****" Driver "fglrx" EndSection
此处****
为设备型号(6870 for the HD 6870的显卡为6870,APU E-350为6310,通过网络是很容易查到的).
Xorg启动后很可能使用amdcccle
而不是aticonfig
。这里会有一个"AMD不支持硬件"水印。
用下面脚本可将此水印删除:
#!/bin/sh DRIVER=/usr/lib/xorg/modules/drivers/fglrx_drv.so for x in $(objdump -d $DRIVER|awk '/call/&&/EnableLogo/{print "\\x"$2"\\x"$3"\\x"$4"\\x"$5"\\x"$6}'); do sed -i "s/$x/\x90\x90\x90\x90\x90/g" $DRIVER done
然后重启。
让chromium支持WebGL
在Google的Chromium/Chrome浏览器里,Linux的Catalyst驱动被列入了黑名单。参见 Chromium#WebGL .
用Adobe的flashplugin观看flash,画面迟滞或冻结
编辑:
/etc/adobe/mms.cfg
#EnableLinuxHWVideoDecode=1 OverrideGPUValidation=true
如果你使用KDE,请确保 系统设置->工作空间外观与行为->桌面效果->高级 里,"为全屏窗口挂起桌面特效" 没有勾选.
GNOME3中移动窗口延迟/很慢
你可以试试这么做,有报告称大多数情况下此方法有效。
将下面行添加到~/.profile
或/etc/profile
:
export CLUTTER_VBLANK=none
重启X或操作系统。
在1920x1080分辨率下不能全屏(欠扫描,屏幕周围有黑边)
这经常会在使用HDMI连接显示器/电视时发生.
这似乎是AMD/ATI为适应所有HDTV的一项新功能,可以在amdccle中调整.
使用amdcccle(图形界面)你可以选择要修改的显示输出,将欠扫描设置成0% (aticonfig默认15%欠扫描). (至少)版本14.10有时也会出现显示调整的下面没有欠扫描的滑块的情况.(It is possible as well that the underscan slider won't show under the display's adjustments, as sometimes in (at least) version 14.10.)
这不是永久的配置,重启X,重启系统,挂起后唤醒甚至切换tty之后都会失效.
要使这成为永久配置的话,你需要以root身份在console下使用aticonfig来调整欠扫描设置,或者手动编辑 /etc/ati/amdpcsdb
(也是以root身份)
用aticonfig的方法:
# aticonfig --set-pcs-u32=MCIL,DigitalHDTVDefaultUnderscan,0
改变设置后重启.
新版本的话(比如12.11), 要是ccc总不能保存过扫描设置,你可以试试:
# aticonfig --set-pcs-u32=MCIL,TVEnableOverscan,0
手动编辑/etc/ati/amdpcsdb的方法:
在 [AMDPCSROOT/SYSTEM/MCIL]
之下的任意位置添加
# DigitalHDTVDefaultUnderscan=V0
新版本的话(比如12.11), 要是ccc总不能保存过扫描设置,你可以试试:
在 [AMDPCSROOT/SYSTEM/MCIL]
之下找到这一行
# TVEnableOverscan=V1
然后把它变成
# TVEnableOverscan=V0
改变设置后重启.
应对措施: 要是因某些原因你不想动ATI的配置文件,你可以设置面板的位置与分辨率来规避问题 以普通用户运行:
# aticonfig --set-dispattrib=DISPLAYTYPE,positionX:0 # aticonfig --set-dispattrib=DISPLAYTYPE,positionY:0 # aticonfig --set-dispattrib=DISPLAYTYPE,sizeX:1920 # aticonfig --set-dispattrib=DISPLAYTYPE,sizeY:1080
DISPLAYTYPE
代表你想改的显示器,比如"dfp9".
用如下命令获得你的 DISPLAYTYPE
:
# xrandr --current
如果没启用RandR的话,你可以用这个:
# aticonfig --query-monitor
也许需要用显示开关或 DISPLAY 变量来设置适当的显示/屏幕(比如 :0.1).
这将告诉你目前哪一个显示正连接着或断开着,以及它的详情
这个应对措施不是永久配置,不过是个让面板及上边内容看起来合适的方便快捷的方法
用 aticonfig --help | grep set-pcs-val
来阅读ATI的说明.
双屏设置: 关于加速,OpenGL,合成,效能的一般问题
试着禁用 xinerama 和 xrandr12. 如下:
输入:
# aticonfig --initial # aticonfig --set-pcs-str="DDX,EnableRandR12,FALSE"
然后重启系统. 在 /etc/X11/xorg.conf
中检查 xinerama 是不是被禁用了, 如果没有,禁用它,然后重启系统.( In /etc/X11/xorg.conf check that xinerama is disabled, if it's not disable it and reboot your system. )
接下来运行amdcccle
,如下: amdcccle→显示管理→多屏幕显示→以display(s) 2多屏显示桌面(amdcccle->display manager->multi-display->multidisplay desktop with display(s) 2. ).
再次重启,再按你的想法设置显示.
禁用VariBright功能
Vari-Bright 动态调整显示面板用电量以节能. 输入以下命令以禁用 VariBright:
# aticonfig --set-pcs-u32=MCIL,PP_UserVariBrightEnable,0
Hybrid/PowerXpress: 关掉独立GPU
当你使用 catalyst-total-pxpAUR 或 catalyst-utils-pxp 时,你也许会发现切换到集成GPU时,独立GPU仍在工作,又耗电又使得系统温度很高.
对于集显是intel的话你可以通过 vgaswitcheroo
来关掉独立GPU.
不过很不幸有些时候不行...
然后这时你可以试试 acpi_call. MrDeepPurple准备好了脚本来完成这个任务.脚本在启动和恢复系统的时候通过systemd服务调用. 这是他的脚本:
#!/bin/sh libglx=$(/usr/lib/fglrx/switchlibglx query) modprobe acpi_call if [ "$libglx" = "intel" ]; then echo '\_SB.PCI0.PEG0.PEGP._OFF' > /proc/acpi/call fi
从X会话切换到TTY黑屏/低分辨率TTY
接受这个"功能"吧,这出现在catalys 13.2 beta,解决方法是使用vga=
内核选项,比如vga=792
。
使用
$ hwinfo --framebuffer
来得到支持的分辨率列表
选择最适合你的分辨率,粘贴到启动引导器的内核行,比如 vga=0x03d4
从X会话切换到TTY黑屏,背光并没有关闭
使用 uvesafb 作为 framebuffer 驱动. 而且, uvesafb
可以为 TTY 设置任意分辨率.
切换TTY后切换回X会话时,只有一个带鼠标的黑屏
如果你遇到了这个bug的话,试着添加
Option "XAANoOffscreenPixmaps" "true"
到你的 xorg.conf 的 'Device' 部分.
同时, 确认已安装有 polkit 认证代理 并正在运行, 因为这种情况可能会在某程序想要请求密码但没有认证代理来显示密码对话框时出现.
30 FPS / Tear-Free / V-Sync bug
这个Bug发生于Catalyst 13.6 beta, 到现在(13.9)还没修复.
激活 "Tear Free"(防撕裂) 功能之后,所有新启动的OpenGL程序都出现延迟,常表现为只有30 FPS,复合桌面环境也是.("After enabling "Tear Free" functionality every freshly started OpenGL application is lagging, often generates only 30 FPS, it also touches composited desktop.")
M132找到一个解决方法.在 "AMD Catalyst Control Center" (amdcccle) 里完成这些操作:
1. 开启 Tear-Free, 这将设置 3D V-Sync 为"总是开启". 2. 设置 3D V-Sync 为"总是关闭". 3. 确认 Tear-Free 仍为"开启". 4. 重启X/重登录.
这在KDE 4.11.x下有效.M132的建议: "试着关闭 "Detect refresh rate" ,并为复合插件("Composite plugin")指定显示器刷新率."
背光调节不起效
如果你的背光调节有问题, 你可以试试:
# aticonfig --set-pcs-u32=MCIL,PP_PhmUseDummyBackEnd,1
一些用户报告说这导致FPS降低.要恢复默认的话:
# aticonfig --set-pcs-u32=MCIL,PP_PhmUseDummyBackEnd,0
使用 plasma 时 Chromium 出现毛刺(glitching)
添加 --disable-gpu 参数来启动 chromium, 比如,对 /usr/share/applications/chromium.desktop, 改成这样:
# cat /usr/share/applications/chromium.desktop | grep -i exec Exec=chromium %U --disable-gpu