Picom (简体中文) - ArchWiki

Jump to content

# Picom (简体中文)

From ArchWiki
翻译状态：本文是 Compton 的翻译。上次翻译日期：2017-10-04。如果英文版本有所更改，则您可以帮助同步翻译。

This article or section is out of date.

Reason: Compton was replaced by Picom. (Discuss in Talk: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

不同的桌面环境 / 窗口管理器有着不同的方式来自动启动 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 窗口，也可以用“没有名字的窗口”来判断。

注意： 某些软件每次启动后窗口 id 都会不一样，但 slock 的窗口 id 似乎是固定不变的。这里我们需要有懂得相关知识的人来提供确认，否则只能是各位用户后果自负。

下面的命令可以让 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";

### dwm 与 dmenu

虽然有时我们希望 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 可以了解到更多细节。

## 延伸阅读

- Howto: Using Compton for tear-free compositing on XFCE or LXDE

Categories:

- X server (简体中文)
- Eye candy (简体中文)

Hidden categories:

- Pages or sections flagged with Template:Out of date
- Pages with broken package links