从 Compton 中排除没有静态 ID 的窗口

从 Compton 中排除没有静态 ID 的窗口

我使用 archlinux 和 compton。

我在维基百科上读到了这个:

使用以下选项从 compton 中排除所有没有名称的窗口:

$ compton <other arguments> --focus-exclude "! name~="

但这是行不通的。它给了我错误消息:

Pattern "!name~=" pos 8: 无效的模式类型。

我使用了两个我想要列入排除列表的程序。一个是“dmenu”,一个是“i3lock”,并且希望将其排除。我执行xwininfo来获取id:

xwininfo: Window id: 0x3e00003 "i3lock"

  Absolute upper-left X:  0
  Absolute upper-left Y:  0
  Relative upper-left X:  0
  Relative upper-left Y:  0
  Width: 3840
  Height: 1080
  Depth: 24
  Visual: 0x23
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x20 (installed)
  Bit Gravity State: ForgetGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: yes
  Corners:  +0+0  -0+0  -0-0  +0-0
  -geometry 3840x1080+0+0

不幸的是,id 发生了变化,所以我无法使用它。而且使用"class_g = 'i3lock'",也不起作用。

有任何想法吗?

我还尝试了 archwiki 中关于 dmenu 的其他示例,但这对我来说也不起作用。但尽管如此,i3lock 对我来说更为重要。

谢谢。

答案1

您必须使用xprop -id 0x3e00003来获取该窗口的所有原子。对于 dmenu 它将是:

WM_CLASS(STRING) = "dmenu", "Dmenu"

以下内容CONDITION与该原子匹配:

"class_g *?= 'dmenu'"

您可以使用多个条件:

"class_g *?= 'dmenu' && class_g *?= 'i3lock'"

但是我没有找到 wm 类或 i3lock 的任何其他原子。看来 i3lock 没有获取 windowid。所以我建议围绕 i3lock 编写一个小包装脚本:

#!/bin/sh
killall compton
i3lock -n <other arguments>
compton -b <other arguments>

相关内容