_NET_WM_WINDOW_TYPE과 같은 EWMH 속성을 사용자로 설정하시겠습니까?

_NET_WM_WINDOW_TYPE과 같은 EWMH 속성을 사용자로 설정하시겠습니까?

예를 들어 rofi는 다음과 같이 실행됩니다 (또는 코드에서 이해한 것처럼 그렇지 않으면 상위 창에서 상속됨). 하지만 i3 및 picom 구성에서 클래스 이름과 일치하는 것보다 더 일반적인 작업을 수행 _NET_WM_WINDOW_TYPE_NORMAL하고 싶습니다 ._NET_WM_WINDOW_TYPE_POPUP_MENU

할 수 있다는 것을 알고 있지만 xprop -set어떻게/어디에서 해야 합니까? 아니면 이 모든 것이 학대이고 내가 다르게 해야 할 일입니까?

답변1

Matrix/IRC 채널에서 Manuele Torre(emanuele6)와 대화한 후 그는 다음과 같은 솔루션을 제안했습니다.

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-windowexternal_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

관련 정보