如何找到哪个进程正在控制根窗口?

如何找到哪个进程正在控制根窗口?

我正在尝试使用此处描述的方法让 xscreensaver 作为我的桌面背景/壁纸运行:https://wiki.archlinux.org/index.php/XScreenSaver#Animated_wallpaper第一步是杀死控制根 X 窗口的进程,但我不知道那是什么进程。

理想情况下,我想学习如何自己获取该程序的名称(顺便说一句ps aux | grep root并没有真正帮助),并从那里找出如何阻止该程序在启动时启动或断言根 X 窗口的控制。

但是,任何立即知道 Cinnamon 中的程序是什么的人都可以帮助我解决问题,并且自然地,任何有关停止/禁用该程序或启动/启用该程序的其他信息/usr/lib/xscrensaver/glmatrix -root也将受到赞赏。

答案1

根Window是X服务器的一个特殊Window。它没有关联的应用程序。

维基百科不正确地引用了根窗口这里。他们的意思是一个窗口,它屏蔽/隐藏根窗口,就像现代桌面环境中常见的那样(通常称为桌面,并且通常由显示文件夹内容的文件管理器实现~/Desktop)。

这些xscreensaver小部件实际上是通过更新根窗口的内容来工作的。所以你需要删除它桌面将隐藏它的窗口以及显示在根窗口顶部的任何其他窗口。

您可以尝试查找向窗口管理器注册“桌面”“窗口类型”的窗口的进程 ID。你可以这样做:

xwininfo -tree -root |
  pcregrep -o '^\s+\K0x\S+' |
  xargs -n1 xwininfo -wm -id |
  pcregrep -Mo '(?s)Window type:\s+Desktop.*?Process id: \K\d+' |
  sort -u

xwininfo -tree列出所有窗口,第一个pcregrep提取它们的窗口 id,第二个 xwininfo 检索每个窗口的 WM 属性(包括窗口类型和 pid),然后第二个pcregrep提取这些窗口的 PID桌面视窗)。

您还可以运行:

xprop _NET_WM_PID

然后点击桌面。甚至:

xkill

然后单击桌面以杀死该窗口。

无论如何,请注意,终止该窗口/进程可能并不安全,因为它很可能由某些基本进程(例如窗口管理器)处理。

就 而言cinnamon,至少在 Linux mint 18.1 cinnamon 版本的默认桌面环境中,它似乎是nemo(cinnamon 文件管理器),所以杀死它没什么坏处。

答案2

您的标题具有误导性,要找到根窗口,您可以执行以下操作:

xprop -root | grep PID

使用该-root标志,您可以省略在桌面上的单击,并且grep PID可以找到根窗口的 PID,即使您使用不起眼的 WM 也是如此。嗯,它可能不适用于 TWM。

在我看来,输出看起来像这样:

xprop -root | grep PID
I3_PID(CARDINAL) = 3134

但此过程不会设置您的壁纸。您无法终止设置壁纸的程序,因为它只会执行此操作然后退出。 (你不应该杀死你的窗口管理器,但杀死 nemo 没有什么坏处。)

我建议你尝试禁用肉桂中的壁纸:

这就是答案Linux问题可能有帮助:System Settings > Backgrounds > Settings > Picture Aspect 'No Picture'

如果这不起作用,您必须禁用桌面:

man nemo说:

   --no-desktop
          Do  not  manage  the desktop — ignore the preference
          set in the preferences dialog.

并且在i3 常见问题解答您会发现此命令将禁用 nemo 的桌面窗口:

gsettings set org.nemo.desktop show-desktop-icons false

相关内容