发布于 2026-01-06 8 阅读
0

Linux picom Compton 中的合成器

Linux 中的合成器

皮克

康普顿

合成器是任何 Linux 桌面环境美观性的重要组成部分。在本篇博客中,我们将探讨以下内容:


什么是合成器

合成器是一种软件,它与 Linux 中的窗口系统和图形系统交互,以生成:

  • 窗口透明度
  • 过渡动画
  • 窗户周围的阴影赋予它们 3D 效果
  • 垂直同步:等待显示屏更新后再更新显示屏

使用排版器:

替代文字

不含排版器:

替代文字

正如你所见,在 Linux 桌面环境中使用合成器可以为界面增添美感。现在让我们看看它们是如何工作的。


排版机的工作原理

合成器会将窗口层次结构的整个子树渲染到屏幕外缓冲区。然后,应用程序可以获取该缓冲区的内容并进行任何操作。

替代文字

屏幕外缓冲区可以自动合并到父窗口中,也可以由称为合成管理器的外部程序合并。维护这样的缓冲区便于在窗口状态更改期间添加额外的帧,例如淡入和淡出动画。每个运行应用程序的每一帧都会经过合成器。

替代文字


何时使用合成器

如果需要透明度、过渡动画、垂直同步以及类似的视觉效果,则应使用合成器。请注意,大多数桌面环境(例如 GNOME)都自带集成合成器。甚至一些窗口管理器,例如 Compiz、Enlightenment、KWin、Marco、Metacity、Muffin、Mutter 和 Xfwm,也具备自身的合成功能。

如果您使用的是极简的桌面环境或窗口管理器,例如 dwm、i3 或 awesome,则需要单独安装合成器。在这种情况下,由于环境非常精简(大约只有 1 到 5 MB),因此不会自带合成器。此时,可以使用comptonpicom等合成器。


何时不应使用合成器

合成器的工作原理是维护一个屏幕外缓冲区,并在不同的窗口之间传递该缓冲区。虽然这可能会给你的窗口管理器或桌面环境增添许多效果,但在游戏过程中却并不理想,因为它会导致延迟。

玩游戏时,不使用合成器可能会导致垂直同步失效(除非你在游戏内开启垂直同步),并出现严重的画面撕裂,但它可以消除帧间延迟。我建议在玩游戏时关闭合成器。如果使用硬件垂直同步,则可以避免这些缺点,但这需要在显卡驱动程序级别修改 X11 配置以进行同步。具体来说,对于 NVIDIA 显卡,需要启用ForceFullCompositionPipeline选项(对于 Intel 显卡,则需要启用 TearFree选项)。在这种情况下,游戏时无需关闭合成器,因为垂直同步将由显卡驱动程序处理,而不是由合成器本身处理。当然,这需要关闭合成器中的垂直同步功能。


康普顿

Compton 是一个轻量级的独立 X Window 系统合成器。它是xcompmgr-dana合成器的分支,而 xcompmgr-dana 合成器又是xcompmgr合成器的分支

替代文字

除了 xcompmgr-dana,它还支持 OpenGL 后端以及彩色阴影。您可以使用官方软件仓库轻松地将其安装到您的发行版中。对于 Debian 系统,可以这样安装:



# install comption
sudo apt install compton

# run compton in the background
compton &


Enter fullscreen mode Exit fullscreen mode

您可以将 Compton 添加为您选择的窗口管理器的启动脚本。


皮科姆

虽然 Compton 是一个相当不错的独立 X11 合成器,但可惜的是它已经停止定期维护了。Picom 是 Compton 的一个活跃分支,旨在解决 Compton 代码的复杂性问题,从而吸引更多开发者参与到项目中来。

替代文字

要开始使用 picom,我建议从源代码构建。对于基于 Debian 的系统,需要安装以下依赖项,然后可以使用以下命令构建 picom:



# Debian specific command. The next few commands are for all distros
sudo apt install libxext-dev libxcb1-dev libxcb-damage0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-render-util0-dev libxcb-render0-dev libxcb-randr0-dev libxcb-composite0-dev libxcb-image0-dev libxcb-present-dev libxcb-xinerama0-dev libxcb-glx0-dev libpixman-1-dev libdbus-1-dev libconfig-dev libgl1-mesa-dev  libpcre2-dev  libevdev-dev uthash-dev libev-dev libx11-xcb-dev

# clone the project and go into it
git clone https://github.com/yshui/picom && cd picom

# Use the meson build system (written in python), to make a ninja build 
meson --buildtype=release . build

# Use the ninja build file to proceed
ninja -C build

# Copy the resultant binary into PATH
cp build/src /usr/local/bin

# Run picom in the background (this command can be added to the autostart)
picom & 


Enter fullscreen mode Exit fullscreen mode

配置合成器

像compton和picom这样的合成器具有高度可配置性。从自定义彩色阴影到透明度,都可以进行全局设置,也可以针对特定窗口进行设置。

picom 的示例配置位于 [此处] /etc/xdg/picom.conf这里是该配置的副本。要开始使用,只需将此配置复制到 [此处] ~/.config/picom/picom.conf



cp /etc/xdg/picom.conf ~/.config/picom/
vim ~/.config/picom/picom.conf


Enter fullscreen mode Exit fullscreen mode

所有可用选项均已在注释中列出。更改后,只需编辑配置并保存即可。合成器将自动重新加载。

要向窗口管理器添加合成器,只需将以下代码添加到您的配置文件中~/.xsession



# Start compositor in the background
picom & # or compton & (in case you want to use compton)

# Execute window manager
exec awesome


Enter fullscreen mode Exit fullscreen mode

实用链接

GitHub 标志 yshui / picom

一款支持动画的轻量级 X11 合成器

皮克

circleci 代码发现 在 Discord 上聊天

picom是 X 的一个合成器,也是Compton 的一个分支

这是一个开发分支,出现 bug 在所难免。

您可以在讨论区留下您的反馈或想法,或者在Discord上与其他用户聊天!

变更日志

查看版本

建造

依赖关系

假设您已经安装了所有常用的构建工具(例如 gcc、python、meson、ninja 等),您仍然需要:

  • libx11
  • libx11-xcb
  • xproto
  • xcb
  • xcb-util
  • xcb-伤害
  • xcb-xfixes
  • xcb形状
  • xcb-renderutil
  • xcb渲染
  • xcb-randr
  • xcb复合材料
  • xcb-图像
  • xcb-present
  • xcb-glx
  • 皮克斯曼
  • libconfig
  • libdbus(可选,可通过-Ddbus=falsemeson 配置标志禁用)
  • libGL、libEGL、libepoxy(可选,可通过-Dopengl=falsemeson 配置标志禁用)
  • libpcre2(可选,可通过-Dregex=falsemeson 配置标志禁用)
  • 利贝夫
  • 乌塔什

在基于 Debian 的发行版(例如 Ubuntu)上,所需的软件包是:

libconfig-dev libdbus-1-dev libegl-dev libev-dev libgl-dev libepoxy-dev libpcre2-dev libpixman-1-dev libx11-xcb-dev libxcb1-dev libxcb-composite0-dev libxcb-damage0-dev libxcb-glx0-dev libxcb-image0-dev libxcb-present-dev libxcb-randr0-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-shape0-dev libxcb-util-dev libxcb-xfixes0-dev meson ninja-build uthash-dev

在…

GitHub 标志 chjj /康普顿

X11 合成器。

康普顿

加入聊天:https://gitter.im/chjj/compton

Compton是 X 的一个合成器,也是xcompmgr-dana的一个分支

我一直对独立轻量级合成器的数量少感到沮丧。Compton 是从 Dana Jansens 的 xcompmgr 分支上 fork 出来的,并进行了重构。我修复了所有发现的 bug,并添加了我想要的功能。目前看来运行稳定,但这只是我的猜测。我可能会持续开发,直到实现我想要的功能。这对我来说也是一次学习经历。也就是说,我做这个项目的部分原因是出于学习 Xlib 的愿望。

来自 xcompmgr 的更改:

  • --backend glx除了旧的 X Render 后端之外,还新增了 OpenGL 后端( )。
  • 非活动窗口透明度(-i)/变暗(--inactive-dim)。
  • 标题栏/框架透明度(-e)。
  • 菜单透明度(-m,感谢 Dana)。
  • 现在 argb 窗口(例如带有透明效果的终端)已启用阴影效果。
  • 移除了服务器端阴影(以及简单的合成)……

Picom 配置

将垂直同步卸载到NVIDIA显卡

文章来源:https://dev.to/l04db4l4nc3r/compositors-in-linux-1hhb