Picom (简体中文)
Compton 是一个独立的合成管理器,可以给不带合成功能的窗口管理器(例如 i3)带来淡入淡出、半透明、阴影等视觉效果。Compton 是 xcompmgr-dana 的分支,而后者又是 xcompmgr 的分支。欲了解更多,可查看 GitHub 上的 compton 项目。
安装
安装包 compton[损坏的链接:replaced by picom] 。 如果要使用 git 版本,可安装 compton-gitAUR[损坏的链接:package not found]。
若想用 GUI 修改 compton 的配置,可安装 compton-confAUR 或 compton-conf-gitAUR。
使用
登录 X 会话后,用户可以随时手动启动 / 终止 compton。也可以将其设置为自动启动(例如从 自动启动)。下面的选项可以帮你细化配置:
-
-b
: 以后台进程(Daemon)的形式运行 -
-c
: 启用阴影效果 -
-C
: 禁用面板和 Docks 的阴影效果 -
-G
: 禁用应用程序窗口和拖放对象的阴影效果 -
--config
: 使用指定的配置文件
除此之外 compton 还支持很多选项。包括动画时间,指定待管理的 X 显示,指定窗口的菜单、边框、失焦窗口菜单的不透明度等。详细信息请参阅 Compton Man Page。
开机时自动启动 Compton
不同的桌面环境 / 窗口管理器有着不同的方式来自动启动 compton。例如,Openbox 的自动启动项目在配置文件 ~/.config/openbox/autostart
里管理。而 i3-wm 的用户需要去修改 ~/.config/i3/config
文件。必要时,compton 也可以从 xprofile 或 Xinitrc 自动启动。有关更多信息,请参阅 startup files 一文。
手动运行
于终端运行:
compton
可以手动启动 compton 进程。
若要禁用所有的阴影特效,需要加上 -C
和 -G
这两个参数:
compton -CG
若要在登录 X 会话的过程中,以后台进程(Daemon)的形式自动运行 compton,必须加上 -b
参数:
compton -b
将前面的参数一起用,效果也就一起有了:
compton -CGb
最后这个例子演示了如何使用需要指定数值的参数:
compton -cCGfF -o 0.38 -O 200 -I 200 -t 0 -l 0 -r 3 -D2 -m 0.88
配置文件
默认的配置文件放在 /etc/xdg/compton.conf
。若要修改配置,需要先把默认配置拷贝一份到 ~/.config/compton.conf
。再运行 compton 时就会从这里读取配置。
若要在运行时手动指定配置文件,可以用 --config
参数:
compton --config path/to/compton.conf
专为某些窗口禁用阴影效果
Compton 绘制阴影的方法可能会使某些软件的窗口的外观出现异常。用 shadow-exclude
配置选项即可为这些软件禁用阴影。
例如:若要让 compton 不给 GTK +3 窗口绘制阴影,可以在 compton.conf
文件的 shadow-exclude
部分里加入:
"_GTK_FRAME_EXTENTS@:c"
若要让 conky 窗口不绘制 compton 阴影,首先修改 conky 的配置文件 ~/.conkyrc
:
own_window_class conky
然后如下修改 compton.conf:
shadow-exclude = "class_g = 'conky'";
在这里可以看到完整的默认禁用阴影的窗口名单。
多显示器
如果你在用 多个显示器 但没有使用 xinerama,那么 X server 会自动以多个 screen 的模式运行,然而 compton 默认只会接管一个 screen 的合成。解决办法是启动多个 compton 进程,并以 -d
参数来逐个指定要负责的 screen。下面这个范例命令是给四个 screen 用的:
seq 0 3 | xargs -l1 -I@ compton -b -d :0.@
故障排除
如若配置不当,合成特效可能会使某些软件产生外观异常。
标签页式窗口
某些自带标签页功能的软件,当它们的窗口被设置成半透明时,可能会因为顶层标签窗口是半透明的而露出底层标签窗口的内容。而且由于每个标签窗口都要绘制阴影,整体看上去就会出现浓重的多重阴影。
这类多重阴影的问题可以通过向配置文件中的 shadow-exclude
添加规则来解决:
"_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'"
加入下面的配置可以避免看到底层的标签窗口内容:
opacity-rule = [ "95:class_g = 'URxvt' && !_NET_WM_STATE@:32a", "0:_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'" ];
这里 URxvt 指代的是你在用的终端模拟器的 X 窗口 class 属性。如果你要为别的终端指定渲染规则,可以自行相应改动。
slock
如果通过 compton 的 -i
选项启用了失焦窗口的透明度,再配合使用 slock,就可能出现你不想看到的结果。把透明度改成 0.2
可以解决这一问题。如果用命令行参数来指定的话:
$ compton <any other arguments> -i 0.2
也可以在配置文件里写这一行:
inactive-dim = 0.2;
还有一个办法是,让 compton 认为 slock 的窗口一直是获得了焦点的。可以通过其窗口 id 来识别 slock 窗口,也可以用“没有名字的窗口”来判断。
下面的命令可以让 compton 忽略所有 name 属性为空的窗口的焦点获取状态:
$ compton <原有的参数> --focus-exclude "! name~=''"
用这个命令找到 slock 的窗口 id:
$ xwininfo & slock
在 slock 退出之前,尽快在屏幕上任意位置单击鼠标,然后输入你的用户密码来解锁。这样你就能看到输出的窗口 ID:
xwininfo: Window id: 0x1800001 (has no name)
把这个窗口 ID 拿给 compton,让它忽略这个窗口的焦点获取状态:
$ compton <原有的参数> --focus-exclude 'id = 0x1800001'
或者把这一行写进配置文件:
focus-exclude = "id = 0x1800001";
虽然有时我们希望 compton 不要为 dwm 状态栏渲染窗口失焦特效,但 dwm 状态栏没法轻易地被 compton 的规则匹配到。而且 dwm 状态栏和 dmenu 都没有静态的 window id。要实现这一效果,你只能尝试给这两个项目打补丁,给这些窗口加上 class 属性用于规则匹配。或者采用宽泛的规则去匹配。
下面这个方法适用于 dmenu 和 dwm 状态栏总是出现在屏幕顶端(从左上角顶点起绘制)的情况:
$ compton <别的参数> --focus-exclude "x = 0 && y = 0 && override_redirect = true"
如果要写进配置文件的话,要这么写:
focus-exclude = "x = 0 && y = 0 && override_redirect = true";
override_redirect
这个属性在绝大多数窗口上的值似乎都是 false
。在匹配规则里写 override_redirect = true
可以避免这条规则误伤到位置一样的应用程序窗口。
用 xsetroot 无法设置桌面背景颜色
目前 compton 与 xsetroot
的 -solid
功能还无法兼容。不过你可以试试用 hsetroot 这个替代方案:
$ hsetroot -solid '#000000'
在 https://github.com/chjj/compton/issues/162 可以了解到这一问题背后的具体细节。
Intel 显卡渲染出错
已知某些 Intel 芯片在启用 DRI3 后,如果调节分辨率或者接入新显示器,compton 的渲染就会产生问题。intel
与 modesetting
两种驱动都受到这一问题的影响。禁用 DRI3 可以绕过这一问题。
使用 AMD Catalyst 驱动时出现的花屏 / 截屏问题
尝试在 compton 启动时加上参数
--backend xrender
或者把下面这一行写入 compton.conf 配置文件
backend = "xrender";
在 https://github.com/chjj/compton/issues/208 可以了解到更多细节。
使用 NVidia 驱动时出现高 CPU 占用
如果在使用参数 --backend glx
时发现 CPU 占用很高,或者使用 --vsync
时出现画面撕裂,应按照 NVIDIA 的指示安装上 nvidia-utils。
使用 NVidia 驱动时,进程后台化会报错
如果以后台进程启动 compton 时出现错误信息:main(): Failed to create new session.
,可以装这个版本试试:compton-garnetius-gitAUR[损坏的链接:package not found]。这个版本还包含了若干个上游未能合入的补丁。
使用 Xft 字体会导致卡顿
如果使用了 Xft 字体会导致 xterm 和 urxvt 之类的软件严重卡顿,尝试给 compton 加上如下参数:
--xrender-sync --xrender-sync-fence
或者改用 xrender 渲染方式。
在 https://github.com/chjj/compton/issues/152 可以了解到更多细节。
屏幕闪烁
在无任何 panel 的桌面环境中将窗口最大化,可能会出现这一问题。解决办法是在配置文件中加入:
unredir-if-possible = false;
在 https://github.com/chjj/compton/issues/402 可以了解到更多细节。