如何确定哪个组合管理器正在运行

如何确定哪个组合管理器正在运行

我使用的是 Arch Linux,并且安装了 Gnome 和 i3 窗口管理器。运行 i3 时,我尝试启动复合管理器 Compton。但尝试这样做会导致以下错误:

$ compton
[ 04/11/2019 22:32:36.443 register_cm FATAL ERROR ] Another composite manager is already running

我认为这意味着康普顿已经在运行,或者穆特正在运行,但我不确定是哪一个。

是否有一个命令可以用来确定当前正在运行哪个复合管理器?

答案1

您可以使用因西

inxi -Gxx | grep compositor

输出看起来像这样

           alternate: ati,fbdev compositor: compton resolution: <xdpyinfo missing> 

你可以看到 Compton 目前被用作合成器。如果没有合成器,就没有 grep 匹配。

开关:

  • -G显示图形信息(卡、驱动程序、显示协议(如果可用)、显示服务器、分辨率、渲染器、OpenGL 版本)。
  • -xx显示额外的额外数据。 (用-G,显示芯片供应商:每个显卡的产品 ID;OpenGL 兼容版本;合成器(实验性);备用 Xorg 驱动程序。

答案2

我没有安装 Compton 或 Mutter,但是xcompmgr示例 X 组合管理器不会费心去确定另一个组合管理器是否正在运行,而是继续调用XCompositeRedirectSubwindows()并处理它在安装的处理程序中可能生成的错误和XSetErrorHandler

static int
error (Display *dpy, XErrorEvent *ev)
{
    ...
    if (ev->request_code == composite_opcode &&
        ev->minor_code == X_CompositeRedirectSubwindows)
    {
        fprintf (stderr, "Another composite manager is already running\n");
        exit (1);

这似乎是唯一可能的方法:XCompositeGetOverlayWindow()永远会成功并且地图覆盖窗口,无论是否已在使用:

CompositeGetOverlayWindow

该请求表明客户端希望使用该屏幕的复合覆盖窗口。如果该复合覆盖窗口尚未被映射,则由该请求映射。

笔记:

Mutter 被实现为动态库(通常由 gnome-shell 加载),而不是作为单独的进程。

grep -sl mutter /proc/*/maps

在 Linux 上会找到所有正在使用它的进程。

答案3

没有命令可以知道是否任何据我所知,合成器当前正在运行。但你可以用来pgrep知道是否给定合成器当前正在运行:

$ pgrep compton
18169

pgrep将为您提供 PID,以便您可以使用以下命令终止进程kill

$ kill 18169

或者,pkill可以通过向进程提供进程名称而不是 PID 来终止进程:

$ pkill compton

某些合成器(如 Xfce 的)可能需要不同的方法来停用:

$ xfwm4 --compositor=off --replace

相关内容