예를 들어 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-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