Ubuntu使用acpi_call关闭独立显卡
时间:2016-05-22 23:16 来源:linux.it.net.cn 作者:IT
使用的Y470是双显卡切换的,但只支持Windows系统(鄙视一下联想),运行Linux时独立显卡是一直开着的,相当耗电。Nvidia在Linux下支持并不好,而且使用Linux一般都是出于编程目的,不会使用到独显。因此关闭独立显卡是一个Linux系统省电的一个方案。
经过搜索,Kaijia找到了Michal Kottman开发的一个内核模块acpi_call,这个模块通过修改/proc/acpi/call调用高级配置与电源接口(ACPI)关闭一些不需要的硬件,通过acpi_call可以关闭独立显卡。
9月23日更新:如果出现在升级Linux内核后acpi_call模块无法载入的现象请参考《Linux内核重编译后无法加载acpi_call问题解决》。
可以在Bumblebee项目提供的Ubuntu PPA中安装acpi_call,首先需要向软件仓库增加PPA并且更新apt:
1
2
sudo add-apt-repository ppa:bumblebee/stable
sudo apt-get update
输入以下命令安装acpi_call:
1
sudo apt-get install acpi-call-tools
安装完成后的文件放置在/usr/src/acpi-call-版本号/(Kaijia写本文时的版本是1.1.1),运行以下命令编译并加载模
1
2
3
cd /usr/src/acpi-call-1.1.1/
sudo make
sudo insmod acpi_call.ko
完成编译后可以就可以关闭独立显卡了,输入关闭的命令需要通过test_off.sh脚本确定。你可以在模块的GitHub托管主页下载test_off.sh文件,也可以直接通过此链接下载ZIP压缩包,下载完成后解压出test_off.sh文件,使用chmod增加执行权限并且运行:
1
2
3
cd /path/to/your/test/off/sh/
chmod +x test_off.sh
sudo ./test_off.sh
运行后会看到类似以下文字的输出内容,其中显示“works!”的内容便是需要输入的部分代码:
1
2
3
4
5
6
7
8
9
10
11
12
Trying \_SB.PCI0.P0P1.VGA._OFF: failed
Trying \_SB.PCI0.P0P2.VGA._OFF: failed
Trying \_SB_.PCI0.OVGA.ATPX: failed
Trying \_SB_.PCI0.OVGA.XTPX: failed
Trying \_SB.PCI0.P0P3.PEGP._OFF: failed
Trying \_SB.PCI0.P0P2.PEGP._OFF: failed
Trying \_SB.PCI0.P0P1.PEGP._OFF: failed
Trying \_SB.PCI0.MXR0.MXM0._OFF: failed
Trying \_SB.PCI0.PEG1.GFX0._OFF: failed
Trying \_SB.PCI0.PEG0.GFX0.DOFF: failed
Trying \_SB.PCI0.PEG1.GFX0.DOFF: failed
Trying \_SB.PCI0.PEG0.PEGP._OFF: works!
以上是Kaijia运行后获得的结果,在此例中“\_SB.PCI0.PEG0.PEGP._OFF”(后面显示为works!,其他均显示为failed)是需要关闭的独立显卡代号,具体的代号根据电脑实际主板情况而不同,模块原作者Michal Kottman的电脑则是“\_SB.PCI0.PEG1.GFX0.DOFF”。确定了代号后可以运行一下命令关闭独立显卡:
1
sudo echo "独立显卡的代码" > /proc/acpi/call
在此例Kaijia的电脑中为:
1
sudo echo "\_SB.PCI0.PEG0.PEGP._OFF" > /proc/acpi/call
命令运行后独立显卡就已经关闭了,当然每次开机都需要手动运行命令会比较麻烦,可以在rc.local文件中在Linux开机时自动加载模块并关闭独立显卡。以Root编辑文件/etc/rc.local,在文件的最后加入
1
2
insmod /usr/src/acpi-call-1.1.1/acpi_call.ko
echo "\_SB.PCI0.PEG0.PEGP._OFF" > /proc/acpi/call
这样每次开机时独立显卡就会被关闭了,另外如果你需要实现双显卡切换的话,可以参考Bumblebee项目(只支持Nvidia显卡)。
(责任编辑:IT)
使用的Y470是双显卡切换的,但只支持Windows系统(鄙视一下联想),运行Linux时独立显卡是一直开着的,相当耗电。Nvidia在Linux下支持并不好,而且使用Linux一般都是出于编程目的,不会使用到独显。因此关闭独立显卡是一个Linux系统省电的一个方案。 经过搜索,Kaijia找到了Michal Kottman开发的一个内核模块acpi_call,这个模块通过修改/proc/acpi/call调用高级配置与电源接口(ACPI)关闭一些不需要的硬件,通过acpi_call可以关闭独立显卡。 9月23日更新:如果出现在升级Linux内核后acpi_call模块无法载入的现象请参考《Linux内核重编译后无法加载acpi_call问题解决》。 可以在Bumblebee项目提供的Ubuntu PPA中安装acpi_call,首先需要向软件仓库增加PPA并且更新apt:
输入以下命令安装acpi_call:
安装完成后的文件放置在/usr/src/acpi-call-版本号/(Kaijia写本文时的版本是1.1.1),运行以下命令编译并加载模
完成编译后可以就可以关闭独立显卡了,输入关闭的命令需要通过test_off.sh脚本确定。你可以在模块的GitHub托管主页下载test_off.sh文件,也可以直接通过此链接下载ZIP压缩包,下载完成后解压出test_off.sh文件,使用chmod增加执行权限并且运行:
运行后会看到类似以下文字的输出内容,其中显示“works!”的内容便是需要输入的部分代码:
以上是Kaijia运行后获得的结果,在此例中“\_SB.PCI0.PEG0.PEGP._OFF”(后面显示为works!,其他均显示为failed)是需要关闭的独立显卡代号,具体的代号根据电脑实际主板情况而不同,模块原作者Michal Kottman的电脑则是“\_SB.PCI0.PEG1.GFX0.DOFF”。确定了代号后可以运行一下命令关闭独立显卡:
在此例Kaijia的电脑中为:
命令运行后独立显卡就已经关闭了,当然每次开机都需要手动运行命令会比较麻烦,可以在rc.local文件中在Linux开机时自动加载模块并关闭独立显卡。以Root编辑文件/etc/rc.local,在文件的最后加入
这样每次开机时独立显卡就会被关闭了,另外如果你需要实现双显卡切换的话,可以参考Bumblebee项目(只支持Nvidia显卡)。 |