현재 활성화 된 창 감지


52

Linux 명령 줄 도구를 wmctrl사용하면 무엇보다도 모든 창 또는 모든 데스크탑을 나열 할 수 있습니다. 데스크탑 목록 모드에서 현재 데스크탑은 별표로 표시됩니다.

현재 활성화 된 창의 제목을 알아낼 수있는 도구가 필요합니다. 불행히도 wmctrl현재 활성화되어있는 창을 알고 있지만 도우미는 없습니다 ( :ACTIVE:마커 참조 ).

현재 창의 창 ID 및 / 또는 창 제목을 제공 할 수있는 다른 명령 줄 도구가 있습니까?

답변:


56

설치 xdotool후 실행

xdotool getwindowfocus getwindowname

예를 들어 Firefox에서 열린 현재 웹 페이지를 제공합니다.

linux - Detecting currently active window - Super User - Mozilla Firefox

강력한 도구! 현재 활성 창을 얻는 것 외에도 다른 유용한 기능이 많이 있습니다.
Searene

Jim Paris의 답변과 비교할 때 이는 설치 종속성의 단점이 있지만 특히 xdotool이 이미 디스크 캐시에있는 경우 더 빠르게 실행되는 것 같습니다.
mc0e

1
을 사용하여 현재 창을 조작하려면 wmctrl다음을 수행하십시오.. wmctrl -i -r `xdotool getwindowfocus` -e 0,10,10,-1,-1여기서 -iwmctrl은 창 제목이 아닌 창 ID를 예상하도록 지시합니다.
fiedl

34

이것은 더 직접적이고 사용 xprop하며 cut:

xprop -id $(xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2) _NET_WM_NAME

이 명령은 루트 창과 응용 프로그램 창에서 속성을 추출한 것이지만 Lorenzo von Matterhorn의 요청에 따라 다음과 같습니다.

  • 먼저,

    xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW
    

    _NET_ACTIVE_WINDOW루트 에서 특성을 추출하여 활성 창의 XID를 제공합니다. 는 32x '\t$0'알 수 xprop있는 방식으로 출력 형식을 cut나중에 쉽게 분석 할 수 있습니다.

  • 그런 다음 출력에서 ​​XID 만 추출하십시오. cut -f 2

  • 그런 다음 XID를 매개 변수로 전달하여

    xprop -id XID _NET_WM_NAME
    

해당 창의 이름을 인쇄합니다.


1
안녕하세요, 인수와 구문에 대해 설명해 주시겠습니까? 품질 관리 및 향후 독자에게 도움이 될 수 있습니다.
Lorenzo Von Matterhorn

9

짧은 대답이나 해결책이 없습니다.

$ wmctrl -lp | grep $(xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | \
    awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/')

결과:

0x03800004  0 16459  xxxxxxxxxx /bin/bash

사용:

$ for x in $(seq 1 10); do sleep 5; wmctrl -lp | grep $(xprop -root | \
    grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | \
    sed 's/^0x/0x0/'); done

0x03800004  0 16459  xxxxxxxxxx /bin/bash
0x020000a4  0 13524  xxxxxxxxxx linux - Detecting currently active window - Super User - Mozilla Firefox (Build 20120129142219)

1
이것은 xprop 유틸리티에 대해 알지 못하는 좋은 해결책처럼 보입니다. 그 동안 wmctrl을 패치하여 그러한 옵션을 제공하고 저자에게 보냈습니다. 불행히도 아직 답변을받지 못했습니다.
Dave Vogt

1
코드의 효율성과 "단순성"+1
Lorenzo Von Matterhorn

5

이것이 나를 위해 일한 것입니다.

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME

제공합니다 :

WM_NAME(STRING) = "~"

따라서 이름 자체를 얻기 위해 약간의 추한 추함을 할 수도 있습니다.

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | sed -e 's/.*"\(.*\)".*/\1/'

제공합니다 :

~

내 현재 중점을 둔 창 이름은 모두 그 자체입니다.

또는 약간 덜 추한 sed를 사용하지 마십시오.

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | awk -F '"' '{print $2}'


1
또는 컷이 이미 도입되었으므로 다시 사용할 수 있습니다.xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | cut -d '"' -f 2
mc0e

3

상대적으로 짧고 따옴표가 포함 된 창 이름을 올바르게 처리합니다.

xprop -id $(xprop -root _NET_ACTIVE_WINDOW | cut -d ' ' -f 5) WM_NAME | 
sed -nr 's/.*= "(.*)"$/\1/p'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.