在 Ubuntu 中,Compton 可以通过 opacity-rule 对窗口透明度进行更精准的单独控制,规则格式通常写成“不透明度百分比:匹配条件”,例如 "90:class_g 'Firefox'"。但想让规则准确生效,有一个非常重要的前提:先使用 xprop 查清目标窗口的真实属性,否则透明度匹配规则很容易写错。同时,实际配置时通常还需要结合 focus-exclude,把 dmenu 这类覆盖层窗口排除在外;另外也不要忽略启动参数,运行 Compton 时必须显式指定配置文件路径。

Compton 依然是 Ubuntu 上设置窗口透明度最稳定、最灵活的实用工具之一。只需调整 opacity-rule,就能为指定窗口精确设置透明效果,无需依赖桌面环境本身或额外的 GNOME 扩展。
使用 opacity-rule 匹配指定窗口并设置透明度
这是 Ubuntu 设置单个窗口透明度时最常用、也最可靠的一种方法。规则一般写在 ~/.config/compton.conf 的 [opacity] 段中,也可以直接放在顶层位置(不带 section),统一格式都是:"百分比:匹配条件"。这里有个特别容易混淆的细节:这个数值表示的是“不透明度百分比”,并不是透明度本身。也就是说,90 实际表示 10% 透明,而 100 表示完全不透明。
class_g用于匹配窗口类名,稳定性高,实际使用中更推荐,例如"95:class_g 'Firefox'"—— 表示所有 Firefox 窗口默认设置为 95% 不透明name用于匹配窗口标题,但窗口标题容易变化,例如"85:name 'Terminal'"—— 标题包含“Terminal”的窗口会被设置为 85% 不透明- 支持逻辑条件组合,例如
"100:class_g 'dmenu' && override_redirect true",可用于排除 dmenu 这类无边框覆盖层窗口 - 还可以按焦点状态分别设置透明度:
"100:class_g 'Alacritty' && focused"和"80:class_g 'Alacritty' && !focused"
active-opacity 与 inactive-opacity 更简单,但控制精度较低
如果你不想单独为每个程序编写规则,只是希望当前激活窗口更清晰、其他窗口稍微透明一些,那么直接在 [core] 下配置这两个参数会更方便。它们的优先级低于 opacity-rule,但会影响所有没有被规则明确匹配到的窗口。
active-opacity = 0.95:设置激活窗口的不透明度(取值范围 0.0–1.0),通常建议不低于 0.9inactive-opacity = 0.75:设置非激活窗口的不透明度,0.6–0.8 一般是比较舒适的视觉区间- 需要注意的是:这两个参数只能区分窗口是否处于激活状态,无法根据程序、标题或窗口类型做更细致的透明度控制
规则没有生效?先确认窗口属性再写匹配条件
很多人在 Ubuntu 下配置 Compton 窗口透明度失败,根本原因不是 Compton 本身有问题,而是匹配条件写错了——你肉眼看到的窗口名称,并不一定等于 Compton 实际识别到的 class 或 name。因此,必须先用 xprop 获取真实窗口属性:
- 在终端执行
xprop | grep -E "(class|name)",然后用鼠标点击目标窗口 - 典型输出例如:
WM_CLASS(STRING) = "firefox", "Firefox"→ 这时class_g应该使用'Firefox'(第二个值) - 如果输出中包含
WM_NAME(STRING) = "https://example.com - Firefox"→ 那么name匹配时可以写'Firefox'或'https',但不要直接写完整标题,否则空格和特殊字符可能导致规则失效 - 如果遇到
override_redirect = true的窗口(例如dmenu、rofi),必须手动排除,否则透明设置可能让整个覆盖层显示异常,甚至看起来像“糊屏”
启动与重载时必须带上完整配置文件路径
Compton 不会自动读取默认配置路径,因此每次启动时都要明确指定配置文件,否则即使规则写对了也不会生效:
- 正确启动方式:
compton -c ~/.config/compton.conf -b(其中-b表示后台运行) - 修改配置后重载:
killall compton && compton -c ~/.config/compton.conf -b - 不要把参数写成错误的
compton --config,也不要漏掉-c—— 这是最常见的问题之一 - 如果系统已经启用了 GNOME 自带合成器(Mutter),Compton 可能会被静默禁用,此时需要先关闭 GNOME 合成相关设置:
gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"(仅适用于 GNOME 40+)
真正最关键的步骤,其实不是写透明度规则本身,而是先确认目标窗口到底对应什么 class 或 name。只要通过 xprop 准确拿到窗口属性,Compton 的 opacity-rule 基本都能一次写对。不要省略这一步,否则后面的调试往往只能靠猜,效率很低。
