Compton 可以借助 opacity-rule 对窗口透明度做更精细的控制,写法是“不透明度百分比:匹配条件”,例如 "90:class_g 'Firefox'"。不过这里有个关键前提:先用 xprop 查清窗口的真实属性,否则规则很容易写偏。与此同时,通常还要配合 focus-exclude,把 dmenu 这类覆盖层排除掉;最后别漏了,启动时需要显式指定配置文件路径。

Compton 是目前 Ubuntu 上最可靠、最灵活的窗口透明度控制工具,直接改 opacity-rule 就能对单个窗口精确设透明度,不用依赖桌面环境或 GNOME 扩展。
用 opacity-rule 匹配特定窗口并设透明度
这是最常见、也最稳妥的一种写法。规则通常写在 ~/.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,但生效范围覆盖所有窗口(包括未被 rule 显式匹配的)。
active-opacity = 0.95:激活窗口不透明度(0.0–1.0),建议 ≥0.9inactive-opacity = 0.75:非激活窗口不透明度,0.6–0.8 是较舒适区间- 注意:这两个值只影响“是否激活”这一状态,无法按程序、标题、类型做差异化
规则不生效?先查窗口属性再写条件
很多规则失效,根本原因是匹配条件写错了——你看到的窗口名不等于 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+)
真正难的不是写规则,而是确认窗口到底叫什么;一旦 xprop 抓准了 class 或 name,opacity-rule 基本一写就中。别跳过这步,否则所有调试都是盲调。