ASUS 笔记本电脑显卡模式切换工具
supergfxd 是专为 ASUS 笔记本电脑设计的显卡模式切换守护进程,可以在不同的显卡模式之间进行切换。
如果您符合以下情况,则需要此工具:
注意:Xorg 不再受支持(但 supergfxd 仍可与它配合工作)
supergfxd 支持在以下显卡模式间切换:
此切换工具与其他 GPU 切换工具存在冲突,包括:
如果 supergfxd 在启动时总是默认为 integrated 模式,请检查以下位置是否有阻止 nvidia 模块加载的配置:
/etc/modprobe.d//usr/lib/modprobe.d/如果无重启切换失败,可能需要以下操作:
sudo sed -i 's/#KillUserProcesses=no/KillUserProcesses=yes/' /etc/systemd/logind.conf
如果在集成模式和混合模式之间切换后背光控制失效,请在内核启动参数中添加 acpi_backlight=native。
大多数配备 NVIDIA 的笔记本支持不同级别的运行时电源管理,可以延长电池续航。由于某些情况下存在 bug,默认不启用这些设置。如需配置,请在 /etc/modprobe.d/ 中创建除 supergfxd.conf 以外的文件,并根据需要修改以下内容:
# 0x00 - 无电源管理, 0x01 - 粗略电源管理, 0x02 - 精细电源管理 options nvidia NVreg_DynamicPowerManagement=0x02
更多信息请参考 NVIDIA 官方文档。
ASUS-Linux-supergfxctl/ ├── src/ # Rust 源代码 │ ├── lib.rs # 库入口,定义常量和核心功能 │ ├── daemon.rs # 守护进程主程序 │ ├── cli.rs # 命令行工具 │ ├── actions.rs # 模式切换的具体操作 │ ├── controller.rs # 显卡控制逻辑 │ ├── pci_device.rs # PCI 设备相关操作 │ ├── config.rs # 配置文件处理 │ ├── special_asus.rs # ASUS 特殊功能(如 eGPU、MUX) │ ├── error.rs # 错误类型定义 │ ├── zbus_iface.rs # D-Bus 接口定义 │ ├── zbus_proxy.rs # D-Bus 代理 │ ├── systemd.rs # systemd 相关操作 │ └── tests/ # 测试代码 ├── data/ # 系统配置文件 │ ├── supergfxd.service # systemd 服务单元 │ ├── supergfxd.preset # systemd preset │ ├── org.supergfxctl.Daemon.conf # D-Bus 配置 │ ├── 90-nvidia-screen-G05.conf # X11 配置 │ └── 90-supergfxd-nvidia-pm.rules # udev 电源管理规则 ├── Cargo.toml # Rust 项目配置 ├── Cargo.lock # 依赖锁定文件 ├── Makefile # 构建配置 ├── LICENSE # MPL-2.0 许可证 ├── README_EN.md # 英文说明文档 └── README.md # 中文说明文档(本文件)
Debian/Ubuntu:
sudo apt update && sudo apt install curl git build-essential
Fedora/RHEL:
sudo dnf upgrade && sudo dnf install curl git && sudo dnf groupinstall "Development Tools"
Arch/Manjaro:
sudo pacman -Syu && sudo pacman -S curl git base-devel
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
git clone https://gitlab.com/asus-linux/supergfxctl.git
cd supergfxctl
make && sudo make install
sudo systemctl enable supergfxd.service --now
根据您的发行版,将用户名添加到以下组之一:adm、users、wheel,然后刷新会话(最简单的方法是重启)。
sudo usermod -a -G users $USER
supergfxd.mode= 参数(不区分大小写)| 显卡模式 | 命令 |
|---|---|
| 集成模式 | supergfxctl --mode Integrated |
| 混合模式 | supergfxctl --mode Hybrid |
| VFIO 模式 | supergfxctl --mode Vfio |
| ASUS eGPU | supergfxctl --mode AsusEgpu |
| ASUS MUX dGPU | supergfxctl --mode AsusMuxDgpu |
supergfxctl --help
可选参数:
-h, --help:显示帮助信息-m, --mode:设置显卡模式-v, --version:获取 supergfxd 版本-g, --get:获取当前模式-s, --supported:获取支持的模式列表-V, --vendor:获取 dGPU 厂商名称-S, --status:获取当前电源状态-p, --pend-action:获取待处理的用户操作(如有)-P, --pend-mode:获取待处理的模式更改(如有)配置文件位置:/etc/supergfxd.conf
注意:编辑配置文件后必须重启服务
<MODE> - 任何支持的模式(必须大写)<bool> - 启用 vfio 切换以进行 dGPU 直通<bool> - 在模式中保存 vfio 状态(使其在重启之间保持)<bool> - 更改模式时始终要求重启(有助于某些笔记本电脑)<bool> - 不使用 logind 检查所有会话是否已注销。如果未使用登录管理器则很有用。如果设置了 always_reboot 则忽略此选项。<u64> - 等待所有用户图形会话结束的超时时间(秒)。默认为 3 分钟,0 = 无限。如果设置了 no_logind 或 always_reboot 则忽略。<enum> - None(默认)、Std 或 Asus。Std 尝试使用内核热插拔机制(如果可用),Asus 尝试使用 dgpu_disable(如果可用)重要:更改 hotplug_type 需要重启以确保正确状态。例如,如果您在 hotplug_type = Asus 的集成模式下,将其更改为 hotplug_type = None,则需要重启才能使用 dGPU。
这也可以通过 asusctl 设置。如果您通常只需要 Hybrid 模式,那么 asusctl 可能是更好的选择,特别是如果您还想偶尔切换 MUX。
vfio 模块不能编译到内核中,它们必须是独立的模块。如果不计划使用 vfio 模式,可以忽略此要求;否则可能需要自定义构建的内核。
主要依赖:
udev - 设备管理zbus - D-Bus 绑定logind-zbus - logind 集成tokio - 异步运行时serde - 序列化/反序列化当前版本:5.2.7
许可证:MPL-2.0
作者:Luke luke@ljones.dev