由于本人笔记本是双显卡的,曾几度尝试安装闭源NVIDIA驱动(为了hashcat),然而每次以失败告终,而系统自带的开源nouveau驱动实在太坑了,系统总是会出现一些莫名其妙的bug,忍无可忍之下干脆禁掉独显,只用核显得了。
bbswitch
首先需要安装bbswitch模块,用于切换显卡
pacman bbswitch
# 加载模块
modprobe bbswitch
# 卸载模块
rmmod bbswitch
禁用独显
首先查看当前系统是否已经禁用独显
cat /proc/acpi/bbswitch
0000:01:00.0 OFF
OFF说明目前已经禁掉独显了,如果不为OFF,那么需要将其关闭
# 关闭独显
tee /proc/acpi/bbswitch <<< OFF
# 打开独显
tee /proc/acpi/bbswitch <<< ON
之后还需要告诉系统:modprobe加载bbswitch时关闭独显(load_state=0),卸载bbswitch时打开独显(unload_state=1)
nano /etc/modprobe.d/bbswitch.conf
options bbswitch load_state=0 unload_state=1
nouveau列入blacklist
执行tee /proc/acpi/bbswitch <<< OFF
后还需要将nouveau列入黑名单,防止它后台运行。
在blacklist.conf
添加blacklist nouveau
禁用nouveau
nano /etc/modprobe.d/blacklist.conf
blacklist nouveau
在下一次重启lspci
就可以看到rev ff
表示独显已经关闭了,或者dmesg|grep -i nouveau
查看是否含有nouveau的内容
01:00.0 3D controller: NVIDIA Corporation GP108BM [GeForce MX250] (rev ff)
rc.local
将以上操作设置一个系统启动服务,这样在每次开机时就能够关闭独显了。基于Archlinux systemd写一个服务
nano /etc/systemd/system/rc-local.service
[Unit]
Description="/etc/rc.local Compatibility"
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardInput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
其中/etc/rc.local
就是要执行shell的启动脚步,开机时让modprobe加载bbswitch
#!/bin/sh
modprobe bbswitch
注意一定要赋予rc.local执行权限 chmod +x /etc/rc.local
,最后将服务rc-local
设置为开机启动 systemctl enable rc-local.service
。
重启计算机后systemctl status rc-local.service
查看rc-local服务状态。
● rc-local.service - "/etc/rc.local Compatibility"
Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset: disabled)
Active: active (exited) since Fri 2020-02-14 09:55:13 CST; 4h 35min ago
Tasks: 0 (limit: 4915)
Memory: 0B
CGroup: /system.slice/rc-local.service
2月 14 09:55:13 system systemd[1]: Starting "/etc/rc.local Compatibility"...
2月 14 09:55:13 system systemd[1]: Started "/etc/rc.local Compatibility".
2月 14 10:07:31 system systemd[1]: /etc/systemd/system/rc-local.service:10: Support for option SysVStartPriority= has bee>
lines 1-10/10 (END)
参考
Arch下使用bbswitch彻底禁用双显卡笔记本的独立显卡
systemd does not run /etc/rc.local?
网友评论