창 관리자 외에 열려 있는 활성 창 수를 계산하는 방법은 무엇입니까?

창 관리자 외에 열려 있는 활성 창 수를 계산하는 방법은 무엇입니까?

내가 사용하고 있는 창 관리자 외에 열려 있는 활성 창의 수를 계산하고 싶습니다. 나는 그것을 알고 있다wmctrl그러나 다음을 수행하면 이 작업을 수행할 수 있습니다.

wmctrl -l

Unity를 창 관리자로 사용하는 Ubuntu 14.04 64비트 데스크탑에서 결과는 다음과 같습니다.

0x03c00002  0 stepup XdndCollectionWindowImp
0x03c00005  0 stepup unity-launcher
0x03c00008  0 stepup unity-panel
0x03c0000b  0 stepup unity-dash
0x03c0000c  0 stepup Hud
0x02c0000a  0 stepup Desktop
0x02e000b3  0 stepup How to count the number of active windows open irrespective of window manager? - Unix & Linux Stack Exchange - Mozilla Firefox
0x0340000c  0 stepup Terminal

그러나 나는 unity/gnome/KDE 등이 사용하는 창을 무시하고 사용자가 스스로 연 창만 계산하고 싶습니다. 어떻게 해야 하나요?

답변1

창 관리자에 속한 창 또는 "스스로 열림"에 대한 공식적인 정의는 없습니다. 기술적으로 창 관리자 역할은 창을 호출하지 않습니다. 창을 포함하는 데스크탑 환경(일반적으로 위젯이라고 함)의 다른 부분입니다. 창이나 응용 프로그램에는 "이것은 데스크탑 환경의 일부입니다"라는 속성이 없습니다.

wmctrl -lx클래스별로 신경 쓰지 않는 창을 실행하고 식별할 수 있습니다 . 다양한 일반 데스크탑 환경에서 어떤 클래스를 사용하는지 확인하지 않았으니 원하는 대로 목록을 채워주세요.

wmctrl -lx | awk '$3 !~ /^(Unity-.*|Kwin|Boringstuff)$/'

또는 끈적이지 않은 창을 감지하는 것이 청구서에 적합할 수도 있습니다. 고정 창은 모든 작업 공간에 표시되는 창입니다. 이것이 모든 창 관리자에서 작동하는지 모르겠습니다.

for w in $(wmctrl -l | awk '{print $1}'); do
  if ! xprop -id $w _NET_WM_STATE | grep -q _NET_WM_STATE_STICKY; then
    wmctrl -l -i $w
  fi
done

관련 정보