쉘에서 윈도우 크기 가져 오기


18

쉘 스크립트에서 현재 창의 크기를 얻고 싶습니다 ...

말할 것도 많지 않습니다 ... 나는 wmctrl을 사용하는 것을 선호합니다.

답변:


23
wmctrl -lG

당신에게 다음과 같은 것을 줄 것입니다 :

oli@bert:~$ wmctrl -lG
0x0384c0d5 -1 1590 1030 330  170  bert N/A
0x01200023 -1 0    0    3840 1200 bert x-nautilus-desktop
0x01000003 -1 3840 2352 1920 24   bert Bottom Expanded Edge Panel
0x01000028 -1 0    2352 1920 24   bert Bottom Expanded Edge Panel
0x0500003e  0 676  252  1404 1015 bert Chromium
0x02e00021  0 3860 160  1361 1084 bert Liferea
0x02000047  0 6650 940  506  683  bert Social broadcast messages
0x04600004  0 4546 460  1263 833  bert oli@bert: ~

이와 함께 할 수 있습니다 grep그리고 cut당신은 지오메트리 값 (열 3-6)로 남아 있습니다 그래서이 아래로.

맨 페이지 를 인용하여 열이 무엇인지 정확히 이해 하십시오 .

-엘

창 관리자가 관리하는 창을 나열하십시오. 각 창에 대해 한 줄이 출력되며, 줄은 공백으로 구분 된 열로 나뉩니다. 첫 번째 열은 항상 창 ID를 16 진 정수로 포함하고 두 번째 열은 항상 데스크탑 번호를 포함합니다 (-1은 고정 창을 식별하는 데 사용됨). -p 옵션을 지정하면 다음 열에 창의 PID가 10 진 정수로 포함됩니다. -G 옵션이 지정 되면 x-offset, y-offset, width 및 height와 같은 4 개의 정수 열이 따라 옵니다 . 다음 열에는 항상 클라이언트 시스템 이름이 포함됩니다. 줄의 나머지 부분에는 창 제목이 포함되어 있습니다 (제목에 공백이 여러 개있을 수 있음).


나는 그것을 사용할 것이다!
Allan

1
나는 당신의 컴퓨터가 bert라고 불리는 방식을 좋아합니다 :)
drnessie

5

wmctrl에는 활성 창 ID를 직접 찾을 수있는 옵션 이 없습니다 . 누군가가 그것을하는 방법을 알고 있다면 알고 싶습니다.. 즉, 활성 창의 크기를 인쇄하는 몇 가지 스크립트가 있습니다.

wmctrl + xdotool ... (sed를 사용하지 않음)입니다.

id=$(xdotool getactivewindow)
wmctrl -lpG | while read -a a; do w=${a[0]}; if (($((16#${w:2}))==id)) ; then echo -n "${a[5]} ${a[6]}"; break; fi; done

xwininfo + xdotool + sed입니다.

xwininfo 의 일부입니다 x11-utils

set $(xwininfo -id $(xdotool getactivewindow) \
|sed -n -e "s/^ \+Width: \([0-9]\+\).*/\1/p" \
        -e "s/^ \+Height: \([0-9]\+\).*/\1/p")
echo -n "$1 $2"

2

xprop또는을 사용하십시오 xwininfo. 둘 다 기본적으로 제공되며 설치가 필요하지 않습니다.

사용 예 :

두 명령 모두 특정 창을 선택할 수 있도록 커서를 사각형 / 십자로 바꿉니다.

$ xprop _NET_WM_OPAQUE_REGION                                                          
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377


$ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}'                         
 984
 377

또는 XID 형식으로 명령 줄에서 창을 지정할 수 있습니다

$ xprop _NET_WM_OPAQUE_REGION -id 83886090                                             
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377

$ xwininfo -id 83886090 | awk -F ':' '/Width/ || /Height/{print $2}'            
 984
 377

이들이 사용 된 다른 게시물

특히 xwininfoAskUbuntu 질문과 같이 scrips에 대해 적극적으로 사용되었습니다.


그는 일반적으로, 예를 추가합니다;)
AB

1 년 후에 그것들을 추가했습니다;) 그러나 늦지 않는 것보다 낫습니다.
Sergiy Kolodyazhnyy

0

쉘 스크립트는 창을 알거나 신경 쓰지 않습니다. 기껏해야 터미널에서 실행됩니다 (이는 창에 표시되거나 표시되지 않을 수 있음). 문자의 터미널 너비와 높이를 얻으려면 stty 유틸리티를 사용하십시오.


2
분명히 쉘 스크립트가 X 클라이언트에 지오메트리를 쿼리 할 수 ​​있습니까? 그렇지 않으면 X 앱은 어떻게 작성됩니까?
djeikyb

@djeikyb X 클라이언트로 작성되어 X 서버와 통신합니다. 셸 스크립트는 셸에서 실행되며 X 서버가있는 환경에서도 실행되거나 실행되지 않을 수 있으며 X를 신경 쓰지 않아야합니다.
psusi

2
이해할 수 있습니다. 그러나 해결 방법이 있습니다! 리포지토리의 패키지 인 wmctrl을 사용하면 작업 공간을 이동, 크기 조정, 최소화 및 변경할 수 있습니다!
drnessie

@psusi의 논리에 따르면 데스크탑 환경은 존재하지 않아야합니다. 결국, 그것들은 X 용으로 작성된 소프트웨어와 상호 작용하는 방대한 스크립트 모음
일뿐

0

나는 tput cols아주 잘 작동하는 것을 발견 했다!


2
당신의 기여에 감사드립니다. 나는 당신의 대답을 향상시킬 것을 제안합니다 : 그것이 무엇을하는지 설명하고, 줄 수를 얻기 위해 명령을 수정하십시오. 쉘 스크립트에서 결과를 사용하는 방법을 보여줄 수 있습니다. -최고 등급의 답변을 예로 들어보십시오.
guntbert

OP를 언급하면서 wmctrl우리는 콘솔이 아니라 그래픽 환경 창에 대해 이야기하고 있습니다.
andyn

0

3 개의 화면이 있으며이 출력은 다음과 같은 치수의 3 줄을 출력합니다.

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.