本文内容适用于Linux环境中的双显卡切换,依wiki文档的介绍仅适用于第二代的双显卡切换技术,即手动软件切换双显卡,不保证支持新的智能切换技术。仅在联想Y560-IFI,AMD 5730 + Intel双显卡,Ubuntu 12.04环境中测试,不保证在其他环境中可用,由此造成的任何损失作者不负任何责任。
作者的Y560-IFI最近安装了Ubuntu 12.04,先使用的ATI官方闭源驱动,此时必须在BIOS中关闭集显,只能一直使用独显,在使用windows系统时很不方便,于是想到要搞定在Linux系统中的双显卡切换,经过阅读资料(见文后参考资料)+几天的努力,终于实现了在Ubuntu 12.04系统中的AMD+Intel双显卡切换。文后附有快速切换显卡的sh脚本。
要实现双显卡切换有一下几点要求:
1.使用支持双显卡切换的Linux内核,建议使用最新内核。
2.电脑必须具有硬件MUX,即必须使用第二代手动热切换技术。使用新一代显卡切换技术的用户请参考http://ubuntuforums.org/showthread.php?t=1930450。
3.必须开启KMS。
4.必须使用开源驱动,不能使用闭源驱动。
检测方法:
检测内核的方法:
grep -i switcheroo /boot/config-3.2.*
开启KMS:
Ubuntu 12.04默认开启KMS。察看KMS是否开启的方法是打开/boot/grub/grub.cfg文件,在其中找到启动Ubuntu的命令(注意看核心版本号,还有不要看恢复模式下面的),在
linux /boot/vmlinuz-3.2.0-2*-generic
这一行的后面寻找是否有nomodeset
字样,如果有将其删除并保存,然后重启即可开启KMS。如果没能正常开启,则vga_switcheroo
就不会开启,可将其改为radeon.modeset=1
试试(针对AMD显卡,Nvidia显卡请用nouveau.modeset=1
)。
加载vga_switcheroo模块:
切换显卡的模块目前仍然处于调试状态,在一些系统中首先要加载这些模块,在笔者的Ubuntu 12.04中默认就已加载。
sudo mount -t debugfs debugfs /sys/kernel/debug
测试vga_switcheroo是否开启:
ls -l /sys/kernel/debug/vgaswitcheroo/switch
检测开源驱动是否正常工作(非必须):
glxinfo | grep "renderer string"
如提示无效的命令请先安装glxinfo,显示OpenGL renderer string
则表示开源驱动工作正常。
glxinfo | grep direct -i
这里显示是否支持硬件加速。
查看当前双显卡使用状态:
sudo cat /sys/kernel/debug/vgaswitcheroo/switch
此步将显示switch文件的内容,格式如下:
0:IGD:+:Pwr:0000:00:02.0
1:DIS: :Off:0000:01:00.0
其中IGD
表示集成显卡,DIS
表示独立显卡;+
表示正在使用的显卡;Pwr
表示显卡处于开启状态,Off
表示显卡处于关闭状态。
切换显卡方法:
下面开始切换显卡,使用不同的命令可以切换不同的显卡,请按自己的需求使用合适的命令。
开启所有显卡:
sudo sh -c "echo ON > /sys/kernel/debug/vgaswitcheroo/switch"
这条命令可以开启已关闭的显卡,但并不会切换显卡。
切换到集显模式:
sudo sh -c "echo IGD > /sys/kernel/debug/vgaswitcheroo/switch"
切换到独显模式:
sudo sh -c "echo DIS > /sys/kernel/debug/vgaswitcheroo/switch"
关闭未使用的显卡:
sudo sh -c "echo OFF > /sys/kernel/debug/vgaswitcheroo/switch"
这条命令可以关闭未使用的显卡(即在switch文件中不带+
的显卡)以省电。
在重启X-window后切换到集显模式
运行后只需注销重新登陆即可
sudo sh -c "echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch"
在重启X-window后切换到独显模式
运行后只需注销重新登陆即可
sudo sh -c "echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch"
注意事项:
在笔者的电脑上,直接使用sudo sh -c "echo DIS > /sys/kernel/debug/vgaswitcheroo/switch"
命令无法切换显卡,必须使用sudo sh -c "echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch"
命令进行切换,然后注销并重新登陆才可以生效。
在切换显卡之前,如果发现当前使用的显卡就是所需的显卡,可以直接使用关闭未使用显卡的命令,而不用注销。
sudo sh -c "echo OFF > /sys/kernel/debug/vgaswitcheroo/switch"
显卡切换在重启后失效,必须重新设置。可以使用sudo gedit /etc/rc.local
命令打开rc.local文件,在其中的exit 0前面添加以下命令
sudo sh -c "echo OFF > /sys/kernel/debug/vgaswitcheroo/switch"
这样以后每次开机就自动关闭不用的显卡了。
笔者的电脑在测试显卡切换功能时因怀疑开源驱动不完善,于是更新了最新的开源驱动,不知是否有影响。有需要更新开源驱动的请参考文后的参考资料。
快速切换显卡脚本:
建立一个.sh脚本文件,在其中输入以下内容,设置可执行权限后运行即可快速切换显卡。仅限可以使用前文介绍的方法成功切换显卡的用户。其中切换显卡的命令可根据自己的需要进行修改。
#! /bin/bash
function pause(){
read -n 1 -p "$*" INP
if [[ $INP != '' ]] ; then
echo -ne 'b n'
fi
}
sudo cat /sys/kernel/debug/vgaswitcheroo/switch
pause '0切换到独立显卡,1切换到集成显卡'
if [[ "$INP" == 0 ]]; then
sudo sh -c "echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch"
elif [[ "$INP" == 1 ]]; then
sudo sh -c "echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch"
fi
参考资料:
1.http://ukyoi.wordpress.com/2012/03/14/用vga_switcheroo在linux下(开启kms)彻底关闭某一可切换显卡的/
2.https://help.ubuntu.com/community/HybridGraphics
3.http://forum.ubuntu.org.cn/viewtopic.php?f=42&t=351974
4.http://cxbii.blog.163.com/blog/static/185001460201241010137830/
参考资料过多,在此不一一列举,向以上文章作者表示衷心的感激。