Linux 中的合成器
皮克
康普顿
合成器是任何 Linux 桌面环境美观性的重要组成部分。在本篇博客中,我们将探讨以下内容:
什么是合成器
合成器是一种软件,它与 Linux 中的窗口系统和图形系统交互,以生成:
窗口透明度
过渡动画
窗户周围的阴影赋予它们 3D 效果
垂直同步:等待显示屏更新后再更新显示屏
使用排版器:
不含排版器:
正如你所见,在 Linux 桌面环境中使用合成器可以为界面增添美感。现在让我们看看它们是如何工作的。
排版机的工作原理
合成器会将窗口层次结构的整个子树渲染到屏幕外缓冲区。然后,应用程序可以获取该缓冲区的内容并进行任何操作。
屏幕外缓冲区可以自动合并到父窗口中,也可以由称为合成管理器的外部程序合并。维护这样的缓冲区便于在窗口状态更改期间添加额外的帧,例如淡入和淡出动画。每个运行应用程序的每一帧都会经过合成器。
何时使用合成器
如果需要透明度、过渡动画、垂直同步以及类似的视觉效果,则应使用合成器。请注意,大多数桌面环境(例如 GNOME)都自带集成合成器。甚至一些窗口管理器,例如 Compiz、Enlightenment、KWin、Marco、Metacity、Muffin、Mutter 和 Xfwm,也具备自身的合成功能。
如果您使用的是极简的桌面环境或窗口管理器,例如 dwm、i3 或 awesome,则需要单独安装合成器。在这种情况下,由于环境非常精简(大约只有 1 到 5 MB),因此不会自带合成器。此时, 可以使用 compton 或 picom等合成器。
何时不应使用合成器
合成器的工作原理是维护一个屏幕外缓冲区,并在不同的窗口之间传递该缓冲区。虽然这可能会给你的窗口管理器或桌面环境增添许多效果,但在游戏过程中却并不理想,因为它会导致延迟。
玩游戏时,不使用合成器可能会导致垂直同步失效(除非你在游戏内开启垂直同步),并出现严重的画面撕裂,但它可以消除帧间延迟。我建议在玩游戏时关闭合成器。如果使用硬件垂直同步,则可以避免这些缺点,但这需要在显卡驱动程序级别修改 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
实用链接
皮克
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
在…
康普顿
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