以用户身份设置 EWMH 属性,例如 _NET_WM_WINDOW_TYPE?

以用户身份设置 EWMH 属性,例如 _NET_WM_WINDOW_TYPE?

例如,rofi 运行为_NET_WM_WINDOW_TYPE_NORMAL(或者,正如我认为我从代码中理解的那样,否则从父窗口继承),但我希望它是_NET_WM_WINDOW_TYPE_POPUP_MENU为了在 i3 和 picom 配置中做一些比匹配其更通用的事情班级名称。

我知道我可以xprop -set,但是我应该如何/在哪里做到这一点?或者这完全是一种滥用,我应该采取不同的做法?

答案1

在与 Manuele Torre(emanuele6)在 Matrix/IRC 频道上交谈后,他提供了这个解决方案:

rofi -show &
rofi_pid=$! rofi_wid=$(xdo id -mp "$rofi_pid") &&
   xprop -id "$rofi_wid" \
         -f _NET_WM_WINDOW_TYPE 32a \
         -set _NET_WM_WINDOW_TYPE _NET_WM_WINDOW_TYPE_POPUP_MENU

引用埃马纽埃尔6:

所以基本上 exec rofi ... & 是你的 rofi 命令 rofi_pid=$!是新 rofi 进程的 pid rofi_wid=$(xdo id -mp "$rofi_pid") 等待直到具有该 _NET_WM_PID 的窗口存在,然后输出其 wid,最后 xprop 将原子设置为您想要的

这确实设置了_NET_WM_WINDOW_TYPE,但是(至少对我来说)picom 不会应用动画(不确定窗口是否已经映射)。

其他选项是使用 rofi 标志-normal-window

我将 bspwm 与 一起使用rofi ... -normal-window,因此在 external_rules 中我设置了:

# rofi set _NET_WM_WINDOW_TYPE
# bspwm doesn't manage these windows because rofi overrides redirect by default
case "$class" in
  (*Rofi*)
    #echo "manage=off" #this will break rofi focus don't use this
    echo "layer=above"
    echo "focus=on"
    echo "state=floating"
    xprop -id "$wid" \
          -f _NET_WM_WINDOW_TYPE 32a \
          -set _NET_WM_WINDOW_TYPE _NET_WM_WINDOW_TYPE_POPUP_MENU
  ;;
esac

相关内容