명령 줄을 통해 화면에서 응용 프로그램의 창 크기와 위치를 설정하는 방법은 무엇입니까?


33

Firefox 창을 특정 크기로 열고 셸 명령을 사용하여 화면상의 위치를 ​​예를 들면 다음과 같습니다.

firefox myfile.html size 800x600 location bottom-left

그런 명령이 있습니까?


나는 (이 포럼의 도움으로) 이것을 할 수 있었지만, 다른 해결책을 찾으면 더 강력 할 것이라고 말해주십시오. unix.stackexchange.com/questions/40209/…
Emanuel Berg

답변:


20

다음은 Rudolf Olah가 제공 한 예제를 포함 하는 Yokai 의 답변에 대한 커뮤니티 버전입니다 .


호출 된 도구를 사용하여 xdotool창 크기와 위치를 제어 할 수 있습니다 . 뿐만 아니라를 bash사용하여 작성한 스크립트 xdotool는 완전히 최대화 된 창에서 작동하도록 설정 될 수 있으며 mousemoveclick명령 을 조작하여 창 크기 및 x : y 좌표를 설정하도록 스크립트를 작성할 수 있습니다 .

  1. 창 ID를 찾으십시오.

    xdotool search --onlyvisible --name firefox
  2. 창 크기 설정

    xdotool windowsize $WINDOW_ID_GOES_HERE $WIDTH $HEIGHT
  3. 창을 이동

    xdotool windowmove $WINDOW_ID_GOES_HERE $X $Y

예를 들어, firefox의 창 ID가 123 인 경우 다음을 수행하십시오.

xdotool windowsize 123 800 600
xdotool windowmove 123 0 1080

왼쪽 하단 위치는 화면 해상도에 따라 계산해야합니다.


1
이 버그의 xdotool, wmctrl등 .. 우분투, XFCE는 (내가 가진 것을) : 윈도우가 이미 전체 화면 모드로 시작했다, 당신은 더 이상 이동할 수 없습니다 : bugs.launchpad.net/ubuntu/+source/unity/은 + 버그 / 971147
ThePhi

19

내가 아는 한 Firefox는 창을 제어하는 ​​명령을 허용하지 않기 때문에 불가능합니다. 그것은 또한 (주로) 창 관리자의 책임이기 때문에 그렇게하는 매개 변수가 있는지 의심 스럽습니다. 그러나 wmctrl으로 창을 제어 할 수는 있지만 조금 어려울 것입니다.

#!/bin/sh

firefox -new-instance -new-window "http://www.reddit.org" &

# Process ID of the process we just launched
PID=$!

# Window ID of the process...pray that there's     
# only one window! Otherwise this might break.
# We also need to wait for the process to spawn
# a window.
while [ "$WID" == "" ]; do
        WID=$(wmctrl -lp | grep $PID | cut "-d " -f1)
done
# Set the size and location of the window
# See man wmctrl for more info
wmctrl -i -r $WID -e 0,50,50,250,250

더 영리한 방법이있을 수 있으며 Firefox와 같은 상호 운용성 문제가 있지만 (예 : 다른 인스턴스가 실행되고 있지 않음) 계속 진행해야합니다.


1
약간의 메모. 창이 최대화되면 크기 조정이 작동하지 않습니다. 따라서 다음을 사용하여이 특성을 먼저 비활성화해야합니다. wmctrl -i -r $ WID -b remove, maximized_vert; wmctrl -i -r $ WID -b 제거, 최대화 된 _horz; 그 후 Firefox 창의 크기를 조정할 수있었습니다.
ka3ak

3

과거에는 Javascript로 창 크기를 설정하고 원하는 페이지로 리디렉션하는 HTML 문서를 만들었습니다. 어리석은 해킹이지만 작동합니다.


더 이상 작동하지 않는 것 같습니다. 분명히 window.resizeTo는 window.open을 통해 생성 된 팝업 인 경우에만 효과가 있습니다.
hugomg

2

나는 이것이 쉘 명령으로 만 가능하다고 생각하지 않으므로 창 관리자와 관련이 없습니다.
나는 wmctrldevilspie에 대해 들었습니다 . 그러나 나는 당신이 당신의 모범에서 쓴 것처럼 간단하게 그것을 달성 할 수있는 방법이 있는지 의심합니다.


1

나는 항상 이것을한다. 그러나 DevilsPie2는 더 강력하기 때문에 사용합니다. LUA 스크립팅 언어를 사용하는데 그리 어렵지 않습니다.

Thunderbird 용 lua 스크립트는 다음과 같습니다.이 모니터는 맨 왼쪽 모니터 (노트북 화면)가 열릴 때 열고 싶습니다.

if (get_window_name()=="Mozilla Thunderbird") then
   pin_window()
   set_window_geometry( 50, 10, 1220, 780 )
end

where 50 = X coordinate (for upper-left corner of the window)
      10 = Y coordinate ( " " )
    1220 = window width
     780 = window height

이를 설정하기 위해 devilspie2라는 이름의 홈 구성 (우분투 유사 배포판)에 디렉토리를 만듭니다 (예 : /home/$USERNAME/.config/devilspie2).

Thunderbird의 경우 파일 이름이 중요하지 않지만 thunderbird.lua를 만들었습니다. 원하는 경우 모든 것을 하나의 스크립트 파일에 넣을 수 있지만 각 응용 프로그램마다 다른 파일 이름이 있습니다. 로그인 할 때 devilspie2가 자동으로 시작되도록 설정하십시오 (예 : /home/$USERNAME/.config/autostart/devilspie2.desktop).

다음은 루아 스크립트에서 사용할 수있는 다양한 옵션에 대한 좋은 페이지 링크입니다. https://github.com/gusnan/devilspie2/blob/master/README

참고 사항 : 스크립트를 실행할 필요는 없습니다. 광산은 664이며 잘 작동합니다. 내가 제어하는 ​​다른 프로그램 중 일부는 openconnect, pidgin, RecordMyDesktop, timeshift, xeyes, xload 및 & d입니다. 그것들은 pin_window를 사용하여 모든 데스크탑과 응용 프로그램에 따라 다른 명령에 나타납니다.


LXDE에서 작동하지 않는 것 같습니다. 창 이벤트가 인식되지 않습니다 (실행 중 아무 것도 인쇄되지 않음 devilspie2 --debug)
John Smith 선택 사항

0

이것은 위치 문제를 해결하지 못하지만 최소한 치수를 설정할 수 있습니다.

firefox -width 200 -height 500
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.