温馨提示×

怎样调试CentOS的Compton

小樊
38
2026-08-30 17:37:55
栏目: 智能运维

在 CentOS 上调试 Compton(或其继任者 Picom,因为 Compton 已停止维护,许多新系统直接提供 picom 包)通常可以分为环境确认、日志调试、配置隔离、后端测试以及高级崩溃分析

以下是详细的调试步骤和方法:


一、 调试前的环境确认(CentOS 特有的坑)

  1. 确认当前是 X11 会话,而不是 Wayland Compton/Picom 仅支持 X11,不支持 Wayland。CentOS 8/9 的 GNOME 桌面默认使用 Wayland,这会导致 Compton 直接失败或无法透明。
    echo $XDG_SESSION_TYPE
    
    • 如果输出 wayland,请注销,在登录界面点击齿轮图标,选择 “GNOME on Xorg” 或使用其他轻量级桌面(如 XFCE、i3、Openbox)。
  2. 确认没有其他合成器在运行 如果你在使用 GNOME 或 XFCE,它们自带窗口合成管理器(Mutter / xfwm4),会与 Compton 冲突。请先关闭系统自带的“窗口合成”功能,或在使用 Compton 时只保留一个。
    # 查看是否有冲突的进程
    ps aux | grep -E "compton|picom|xcompmgr|mutter|xfwm4"
    

二、 基础命令行调试(看日志与诊断)

在调试时,千万不要加 -b(后台运行)参数,请直接在终端前台运行,以便观察实时报错。

  1. 使用诊断模式(最有用) 这会打印出你的显卡驱动、OpenGL 支持情况、Backend 支持等关键信息:

    compton --diagnostics
    # 如果是 picom:
    picom --diagnostics
    
  2. 开启 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)

  3. 测试默认配置 如果你的 ~/.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

如果此时正常,再逐步把你的原配置里的 shadowbluropacity-rule 加回来,直到找到导致问题的那一行。


四、 图形后端(Backend)与显卡驱动调试

Compton 的很多诡异问题(黑屏、花屏、极高 CPU 占用)都出在渲染后端或**垂直同步(VSync)**上。

  1. 强制切换后端测试

    • glx(基于 OpenGL,性能好但老显卡/虚拟机易崩)
    • xrender(纯 X11 渲染,稳定但慢,兼容性好)
    # 尝试用 xrender 后端(CentOS 7 或老机器推荐)
    compton --backend xrender --log-level debug
    
    # 尝试用 glx 后端
    compton --backend glx --log-level debug
    
  2. 排查 VSync 问题 在某些闭源 NVIDIA 驱动或虚拟机(VMware/VirtualBox)中,VSync 会导致死锁或极低帧率。试试关闭:

    compton --backend glx --vsync none --log-level debug
    
  3. 检查 OpenGL 驱动是否正常 Compton 依赖 Mesa/显卡驱动提供 XComposite 和 XDamage 扩展:

    # 安装并运行 glxinfo 检查驱动
    yum install -y mesa-demos
    glxinfo | grep -E "OpenGL renderer|direct rendering"
    

    如果显示 Software Rasterizer(软件渲染),说明显卡驱动没装好,Compton 使用 glx 后端会非常卡或崩溃,这种情况下强制使用 --backend xrender


五、 针对“崩溃/段错误(Segmentation Fault)”的高级调试

如果 Compton 一启动就 Segmentation fault (core dumped),需要抓堆栈(Backtrace)。

  1. 使用 GDB 运行

    # 安装调试工具
    yum install -y gdb
    
    # 在 GDB 中启动
    gdb compton
    (gdb) run --backend xrender
    # 等待它崩溃...
    (gdb) bt   # 输入 bt 打印堆栈信息
    

    bt 打印出来的信息保存下来,这是向开发者或社区提问的有力证据。

  2. 使用 strace 查看卡在哪里 如果 Compton 是“假死”而不是崩溃,可以用 strace 看它在等待什么系统调用:

    yum install -y strace
    strace -f compton --backend xrender 2>&1 | tail -50
    

六、 总结:CentOS 快速调试 Checklist

如果你只想快速解决,直接按顺序执行以下命令:

# 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
  • 如果上面这条命令能正常让你的窗口变透明/无撕裂:说明 Compton 本身没问题,慢慢把配置加回来即可。
  • 如果还是报错/崩溃:极有可能是显卡驱动或 CentOS 缺少依赖库(如 libconfiglibxcb),或者你当前桌面环境自带合成器冲突。

额外提示:CentOS 7 官方仓库里的 Compton 版本非常老旧(0.1-beta),建议通过 EPEL 安装其继任者 picom 以获得更好的调试支持和稳定性:

yum install -y epel-release
yum install -y picom
# 然后用 picom 替代上述命令中的 compton 即可,参数完全兼容。

0