在 CentOS 上调试 Compton(或其继任者 Picom,因为 Compton 已停止维护,许多新系统直接提供 picom 包)通常可以分为环境确认、日志调试、配置隔离、后端测试以及高级崩溃分析。
以下是详细的调试步骤和方法:
echo $XDG_SESSION_TYPE
wayland,请注销,在登录界面点击齿轮图标,选择 “GNOME on Xorg” 或使用其他轻量级桌面(如 XFCE、i3、Openbox)。# 查看是否有冲突的进程
ps aux | grep -E "compton|picom|xcompmgr|mutter|xfwm4"
在调试时,千万不要加 -b(后台运行)参数,请直接在终端前台运行,以便观察实时报错。
使用诊断模式(最有用) 这会打印出你的显卡驱动、OpenGL 支持情况、Backend 支持等关键信息:
compton --diagnostics
# 如果是 picom:
picom --diagnostics
开启 Debug 日志级别 如果诊断没报错,但运行时表现异常(比如闪屏、不透明),开启 debug 日志:
# 直接在终端查看输出
compton --log-level debug
# 或者重定向到文件,方便排查(适用于旧版不支持 --log-file 的情况)
compton --log-level debug > /tmp/compton.log 2>&1
tail -f /tmp/compton.log
(注:新版 picom 支持 --log-file /tmp/compton.log)
测试默认配置
如果你的 ~/.config/compton.conf 有问题,Compton 可能直接退出且不给明确提示。先重命名配置文件,用纯默认参数测试:
mv ~/.config/compton.conf ~/.config/compton.conf.bak
compton --log-level debug
如果默认配置能跑,但加上你的配置就崩或卡,需要逐步排查配置项。你可以创建一个最小化调试配置 /tmp/test.conf:
# 最小化配置:只开启基本合成,关闭所有特效
backend = "xrender";
vsync = "none";
shadow = false;
fade = false;
opacity = false;
然后用指定配置启动:
compton --config /tmp/test.conf --log-level debug
如果此时正常,再逐步把你的原配置里的 shadow、blur、opacity-rule 加回来,直到找到导致问题的那一行。
Compton 的很多诡异问题(黑屏、花屏、极高 CPU 占用)都出在渲染后端或**垂直同步(VSync)**上。
强制切换后端测试
glx(基于 OpenGL,性能好但老显卡/虚拟机易崩)xrender(纯 X11 渲染,稳定但慢,兼容性好)# 尝试用 xrender 后端(CentOS 7 或老机器推荐)
compton --backend xrender --log-level debug
# 尝试用 glx 后端
compton --backend glx --log-level debug
排查 VSync 问题 在某些闭源 NVIDIA 驱动或虚拟机(VMware/VirtualBox)中,VSync 会导致死锁或极低帧率。试试关闭:
compton --backend glx --vsync none --log-level debug
检查 OpenGL 驱动是否正常 Compton 依赖 Mesa/显卡驱动提供 XComposite 和 XDamage 扩展:
# 安装并运行 glxinfo 检查驱动
yum install -y mesa-demos
glxinfo | grep -E "OpenGL renderer|direct rendering"
如果显示 Software Rasterizer(软件渲染),说明显卡驱动没装好,Compton 使用 glx 后端会非常卡或崩溃,这种情况下强制使用 --backend xrender。
如果 Compton 一启动就 Segmentation fault (core dumped),需要抓堆栈(Backtrace)。
使用 GDB 运行
# 安装调试工具
yum install -y gdb
# 在 GDB 中启动
gdb compton
(gdb) run --backend xrender
# 等待它崩溃...
(gdb) bt # 输入 bt 打印堆栈信息
把 bt 打印出来的信息保存下来,这是向开发者或社区提问的有力证据。
使用 strace 查看卡在哪里
如果 Compton 是“假死”而不是崩溃,可以用 strace 看它在等待什么系统调用:
yum install -y strace
strace -f compton --backend xrender 2>&1 | tail -50
如果你只想快速解决,直接按顺序执行以下命令:
# 1. 确认在 X11 下
echo $XDG_SESSION_TYPE
# 2. 临时改名配置,排除配置干扰
mv ~/.config/compton.conf ~/.config/compton.conf.bak 2>/dev/null
# 3. 用最稳定(但慢)的 xrender 后端,关闭 vsync 前台运行
compton --backend xrender --vsync none --no-shadow --log-level debug
libconfig、libxcb),或者你当前桌面环境自带合成器冲突。额外提示:CentOS 7 官方仓库里的 Compton 版本非常老旧(0.1-beta),建议通过 EPEL 安装其继任者
picom以获得更好的调试支持和稳定性:yum install -y epel-release yum install -y picom # 然后用 picom 替代上述命令中的 compton 即可,参数完全兼容。