作者的Y560-IFI最近安装了Ubuntu 12.04,先使用的ATI官方闭源驱动,此时必须在BIOS中关闭集显,只能一直使用独显,在使用windows系统时很不方便,于是想到要搞定在Linux系统中的双显卡切换,经过阅读资料(见文后参考资料)+几天的努力,终于实现了在Ubuntu 12.04系统中的AMD+Intel双显卡切换。文后附有快速切换显卡的sh脚本。
要实现双显卡切换有一下几点要求:
- 使用支持双显卡切换的Linux内核,建议使用最新内核。
- 电脑必须具有硬件MUX,即必须使用第二代手动热切换技术。使用新一代显卡切换技术的用户请参考http://ubuntuforums.org/showthread.php?t=1930450。
- 必须开启KMS。
- 必须使用开源驱动,不能使用闭源驱动。
检测方法:
检测内核的方法:
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其中“IGD”表示集成显卡,“DIS”表示独立显卡;“+”表示正在使用的显卡;“Pwr”表示显卡处于开启状态,“Off”表示显卡处于关闭状态。
1:DIS: :Off:0000:01:00.0
切换显卡方法:
下面开始切换显卡,使用不同的命令可以切换不同的显卡,请按自己的需求使用合适的命令。
开启所有显卡:
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"
命令进行切换,然后注销并重新登陆才可以生效。
在切换显卡之前,如果发现当前使用的显卡就是所需的显卡,可以直接使用关闭未使用显卡的命令,而不用注销。
显卡切换在重启后失效,必须重新设置。可以打开rc.local文件
笔者的电脑在测试显卡切换功能时因怀疑开源驱动不完善,于是更新了最新的开源驱动,不知是否有影响。有需要更新开源驱动的请参考文后的参考资料。
在切换显卡之前,如果发现当前使用的显卡就是所需的显卡,可以直接使用关闭未使用显卡的命令,而不用注销。
sudo sh -c "echo OFF > /sys/kernel/debug/vgaswitcheroo/switch"
显卡切换在重启后失效,必须重新设置。可以打开rc.local文件
sudo gedit /etc/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
没有评论:
发表评论