Compton 是一个轻量级的 X11 合成管理器,用于提供窗口透明、阴影、淡入淡灭等视觉效果。以下是对 Compton 配置文件的详细解析和自定义设置方法。
Compton 的配置文件通常位于 ~/.config/compton.conf
或 /etc/xdg/compton.conf
。基本结构如下:
# 后台运行
backend = "glx";
paint-on-overlay = true;
glx-no-stencil = true;
glx-no-rebind-pixmap = true;
# 阴影设置
shadow = true;
shadow-radius = 12;
shadow-offset-x = -15;
shadow-offset-y = -15;
shadow-opacity = 0.75;
shadow-exclude = [ ... ];
# 透明度设置
inactive-opacity = 0.8;
active-opacity = 1.0;
frame-opacity = 1.0;
inactive-opacity-override = false;
opacity-rule = [ ... ];
# 淡入淡出效果
fading = true;
fade-delta = 10;
fade-in-step = 0.03;
fade-out-step = 0.03;
# 可选值: xrender, glx
backend = "glx";
# 使用GLX后端时的优化选项
glx-no-stencil = true;
glx-no-rebind-pixmap = true;
glx-copy-from-front = false;
glx
通常性能更好,但 xrender
兼容性更广shadow = true; # 启用阴影
shadow-radius = 12; # 阴影模糊半径
shadow-offset-x = -15; # 阴影水平偏移
shadow-offset-y = -15; # 阴影垂直偏移
shadow-opacity = 0.75; # 阴影不透明度
# 排除不需要阴影的窗口
shadow-exclude = [
"name = 'Notification'",
"class_g = 'Conky'",
"class_g ?= 'Notify-osd'",
"class_g = 'Cairo-clock'",
"_GTK_FRAME_EXTENTS@:c"
];
inactive-opacity = 0.8; # 非活动窗口透明度
active-opacity = 1.0; # 活动窗口透明度
frame-opacity = 1.0; # 窗口边框透明度
inactive-opacity-override = false; # 是否覆盖窗口自身设置的透明度
# 特定窗口的透明度规则
opacity-rule = [
"90:class_g = 'Alacritty'",
"85:class_g = 'Termite'",
"80:class_g = 'URxvt'"
];
fading = true; # 启用淡入淡出
fade-delta = 10; # 淡入淡出时间(毫秒)
fade-in-step = 0.03; # 淡入步长
fade-out-step = 0.03; # 淡出步长
fade-exclude = []; # 排除淡入淡出的窗口
# 排除特定窗口的合成效果
unredir-if-possible-exclude = [
"class_g = 'Firefox'"
];
# 不绘制特定窗口
no-dnd-shadow = true;
no-dock-shadow = true;
clear-shadow = true;
# 启用vsync防止屏幕撕裂
vsync = true;
# 降低刷新率以节省资源
refresh-rate = 60;
# 禁用某些特效以提高性能
detect-rounded-corners = false;
detect-client-opacity = false;
Compton 使用与 xprop 相同的语法来匹配窗口:
# 匹配窗口类名
"class_g = 'Firefox'"
# 匹配窗口实例名
"class_i = 'firefox'"
# 匹配窗口标题
"name = 'Google Chrome'"
# 组合条件
"class_g = 'Termite' && !_NET_WM_STATE@:32a"
# 为不同显示器设置不同参数
shadow-red = 0.0;
shadow-green = 0.0;
shadow-blue = 0.0;
# 主显示器设置
shadow-radius = 12;
shadow-offset-x = -15;
shadow-offset-y = -15;
# 副显示器设置
shadow-radius-secondary = 8;
shadow-offset-x-secondary = -10;
shadow-offset-y-secondary = -10;
屏幕撕裂问题:
vsync = true;
backend = "glx";
glx-swap-method = "buffer-age";
性能问题:
backend = "xrender";
paint-on-overlay = true;
glx-no-stencil = true;
特定应用程序显示异常:
shadow-exclude = [ "class_g = 'ProblematicApp'" ];
unredir-if-possible-exclude = [ "class_g = 'FullscreenApp'" ];
以下是完整的配置文件示例:
#################################
# Shadows #
#################################
shadow = true;
shadow-radius = 12;
shadow-offset-x = -15;
shadow-offset-y = -15;
shadow-opacity = 0.75;
shadow-exclude = [
"name = 'Notification'",
"class_g = 'Conky'",
"class_g ?= 'Notify-osd'",
"class_g = 'Cairo-clock'",
"_GTK_FRAME_EXTENTS@:c"
];
#################################
# Opacity #
#################################
inactive-opacity = 0.8;
active-opacity = 1.0;
frame-opacity = 1.0;
inactive-opacity-override = false;
opacity-rule = [
"90:class_g = 'Alacritty'",
"85:class_g = 'Termite'",
"80:class_g = 'URxvt'"
];
#################################
# Fading #
#################################
fading = true;
fade-delta = 10;
fade-in-step = 0.03;
fade-out-step = 0.03;
fade-exclude = [];
#################################
# Transparency / Compositing #
#################################
backend = "glx";
paint-on-overlay = true;
glx-no-stencil = true;
glx-no-rebind-pixmap = true;
vsync = true;
#################################
# Corners #
#################################
corner-radius = 10;
rounded-corners-exclude = [
"window_type = 'dock'",
"window_type = 'desktop'"
];
测试配置:
compton --config ~/.config/compton.conf --backend glx --shadow
作为守护进程运行:
compton --config ~/.config/compton.conf -b
重新加载配置(需要杀死并重新启动 Compton):
pkill compton && compton --config ~/.config/compton.conf -b
通过合理配置 Compton,您可以在保持系统性能的同时获得美观的视觉效果。根据您的硬件和需求调整参数,找到最适合您的平衡点。