我使用的是 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