Ubuntu 下使用 Compton 启用硬件加速
一 准备与驱动检查
- 确认会话类型为 X11(Compton 是 X11 合成器;若使用 Wayland,请切换到 Xorg 会话)。
- 安装并启用合适的显卡驱动:
- Intel:一般内核自带 modesetting 驱动即可。
- AMD:优先使用开源 amdgpu 驱动。
- NVIDIA:安装专有驱动(如 nvidia-driver-xxx),建议同时安装 nvidia-settings 以便调优。
- 验证 OpenGL 渲染是否可用:
- 运行
glxinfo | grep "OpenGL renderer",应显示你的 GPU 型号而非 llvmpipe/软件渲染。
- 运行
glxgears -info,帧率应显著高于软件渲染(通常数百至数千 FPS,取决于 GPU 与刷新率)。
二 安装与最小配置
- 安装 Compton(若已安装可跳过):
sudo apt update && sudo apt install compton
- 生成默认配置(如不存在):
mkdir -p ~/.config && cp /etc/xdg/compton.conf ~/.config/compton.conf
- 最小硬件加速配置示例(保存到 ~/.config/compton.conf):
- 启用 GLX 后端与帧缓冲对象(FBO),开启垂直同步与损伤追踪,获得稳定的 GPU 合成与低撕裂体验。
- 可按需关闭阴影/模糊以降低开销。
- 示例:
- backend = “glx”
- vsync = “true”
- shadow = false
- fading = false
- backend = “glx”
- use-damage = true
- glx-no-stencil = true
- glx-copy-from-front = false
- glx-fbconfig = true
- glx-swap-method = “undefined”
- refresh-rate = 0
- unredir-if-possible = true
- focus-exclude = [ “class_g = ‘slop’” ]
- detect-rounded-corners = true
- detect-client-leader = true
- wintypes:
- tooltip = { fade = true; shadow = false; focus = true }
- dock = { shadow = false }
- dnd = { shadow = false }
- opacity-rule = [ “90:class_g = ‘Firefox’”, “90:class_g = ‘Terminal’” ]
- 前台测试运行:
killall compton 2>/dev/null; compton --config ~/.config/compton.conf --backend glx
- 无报错且无明显卡顿/撕裂后,再配置为开机自启(见第四节)。
三 验证硬件加速是否生效
- 检查进程与后端:
ps aux | grep compton 应看到 compton 正在运行;日志/前台启动时能看到 backend=glx。
- 检查 OpenGL 是否被使用:
glxinfo | grep "OpenGL renderer" 显示真实 GPU。
glxgears -info 帧率显著高于软件渲染。
- 观察合成效果:
- 拖动/最小化窗口应流畅、无明显撕裂;若撕裂,优先确保
vsync=true 且驱动正确;若仍异常,可尝试 glx-swap-method = "copy" 或 "undefined" 做 A/B 测试。
- 性能取舍:
- 关闭 shadow/blur/fade 等特效可进一步降低 GPU/CPU 占用,提升流畅度。
- 多显示器:
- 现代 Compton 对多屏是开箱即用的,无需额外配置;如出现不同步/撕裂,优先检查各显示器刷新率与 vsync 设置。
四 开机自启与常用调优
- 开机自启(按你的会话选择其一):
- i3/sway 等窗口管理器:在配置中 exec --no-startup-id compton --config ~/.config/compton.conf
- GNOME Xorg:
- 方式 A:
gnome-session-properties → 添加命令 compton --config ~/.config/compton.conf
- 方式 B:在“启动应用程序”中添加相同命令。
- 常用调优项(按需添加到配置):
- 降低开销:
shadow = false、blur = false、fading = false
- 撕裂控制:
vsync = "true"(若仍有撕裂,结合驱动与显示器设置)
- 特定应用优化:
opacity-rule = [ "90:class_g='Firefox'", "90:class_g='Terminal'" ]
- 多屏与性能:
unredir-if-possible = true(全屏游戏/视频时绕过合成,减少开销)。