Ubuntu 下使用 Compton 进行多屏显示配置与优化
一 环境准备与显示器命名
- 确认会话为 X11(Compton 是 X11 合成器;若在 Wayland 会话中,请先切换到 Xorg)。
- 使用 xrandr 查看并确认显示器名称与布局,例如:eDP-1、HDMI-1、DP-1。
- 示例扩展布局:
- xrandr --output HDMI-1 --auto --right-of eDP-1
- xrandr --output DP-1 --auto --right-of HDMI-1
- 安装 Compton(若未安装):sudo apt update && sudo apt install compton。以上步骤可确保多屏被 X 正确识别,便于 Compton 统一合成。
二 配置文件与关键参数
- 创建配置:mkdir -p ~/.config && nano ~/.config/compton.conf。
- 建议的基础配置(多屏通用,按你的显示器名与需求微调):
# 渲染与同步
backend = "glx";
vsync = true; # 防撕裂;若卡顿可改为 false 试验
refresh-rate = 0; # 0 表示自动;也可填主屏刷新率如 60/144
# 帧率与渲染
fps-limit = 60;
# 阴影(多屏下可按需关闭或精细排除)
shadow = true;
shadow-radius = 5;
shadow-opacity = 0.5;
shadow-exclude = [
"class_g = 'gnome-terminal'",
"class_g = 'konsole'",
"class_g = 'xterm'"
];
# 透明与性能
opacity-rule = [
"90:class_g = 'Gnome-terminal'",
"90:class_g = 'Firefox'"
];
# 渲染路径优化(常见可用组合)
glx-no-stencil = false;
glx-copy-from-front = false;
glx-shape = true;
glx-fbconfig = false;
glx-hardware = true;
glx-damage = true;
damage = true;
- 说明:Compton 对多屏无需为每个屏幕单独写块,通常一份全局配置即可;关键在于使用 backend = “glx”、合理的 vsync/fps-limit,以及对阴影/透明的按需排除与规则。
三 启动与自启动
- 手动测试:compton -c ~/.config/compton.conf(观察是否无报错、窗口阴影/透明是否正常)。
- 开机自启动(推荐用户级 systemd,避免权限与图形会话问题):
- 创建服务:nano ~/.config/systemd/user/compton.service
- 内容示例:
[Unit]
Description=Compton Compositor
After=graphical-session.target
[Service]
ExecStart=/usr/bin/compton -c %h/.config/compton.conf
Restart=on-failure
Environment=DISPLAY=:0
[Install]
WantedBy=graphical-session.target
- 启用并启动:
- systemctl --user daemon-reload
- systemctl --user enable --now compton.service
- 如使用 Openbox 等窗口管理器,也可在 ~/.config/autostart/compton.desktop 中加入:
Exec=/usr/bin/compton -c ~/.config/compton.conf
- 验证:systemctl --user status compton.service;无报错且多屏效果正常即生效。
四 多屏常见问题与优化建议
- 撕裂或卡顿:优先开启 vsync = true;若仍不理想,尝试 vsync = false 并适当降低 fps-limit(如 30/45)。
- 性能优先:可临时关闭阴影(shadow = false)或对特定应用排除阴影/透明(shadow-exclude、opacity-rule)。
- 刷新率与帧率:多屏混刷新率时,将 refresh-rate = 0 让 Compton 自动选择;或将其设为主屏刷新率(如 60)。
- 3D/视频卡顿:保持 backend = “glx”,并开启 glx-damage = true / damage = true 减少不必要的重绘。
- 显示器热插拔/切换:调整后先重跑 xrandr 确认布局,再重启 Compton(systemctl --user restart compton.service)。