터미널을 사용하여 다양한 창에서 "닫기"이벤트를 시뮬레이션하는 방법이 있습니까?


15

Ask Ubuntu에 대답했습니다 . 명령 을 gnome-terminal통해 모든 인스턴스를 종료하십시오. 모두 읽을 수있는 gnome-terminal것처럼 SIG이 "닫기"이벤트를 시뮬레이트하는 데 사용할 수 있는 전화 가없는 것 같습니다 . GNOME / KDE / LXDE / {창 / 데스크톱 관리자 / 환경을 여기에 넣는} 방법으로 "닫기 버튼 클릭"이벤트를 시뮬레이트하는 방법이 있습니까? 나는 이것과 관련이있을 수있는 다른 질문 을 읽었 지만 이것에 대답하지는 않습니다.

내가 찾고있는 것은 다른 시나리오 에서이 작업을 수행 하는 전역 명령 (있는 경우)입니다. 존재하지 않는 경우 "닫기"버튼의 작동 방식을 설명하십시오.

가능한 용도 :

답변:


16

관련 매뉴얼 페이지는 XKillClient 입니다. xdotool터미널에서 클릭되는 닫기 버튼을 시뮬레이션하는 데 사용할 수 있습니다 .

예

내가 gnome-terminal열려 있고 이름이 "saml @ grinchy : / home"이라고 가정합니다.

  1. 창 ID를 얻으십시오

    $ xdotool search --name "saml@grinchy:/home"
    96488188
    
  2. 보내 Alt+F4

    $ xdotool windowactivate --sync 96488188 key --clearmodifiers \
         --delay 100 alt+F4
    

첫 번째 명령을 두 번째 명령에 포함시켜 함께 묶을 수 있습니다.

$ xdotool windowactivate --sync $( ...1st command...) key --clearmodifiers \
         --delay 100 alt+F4

xdotool동시에 두 가지를 모두 수행하여 자신을 구할 수 있습니다 .

$ xdotool search --name "saml@grinchy:~" key alt+f4

전 세계적으로

동일한 이름의 창에서 실행하도록 제공 한 내용을 조정할 수 있습니다.

$ xdotool search --name "saml@grinchy:~"
96488779
96468996

또는 다른 속성으로 창에서. xwininfo특정 창에 대해 자세히 알아볼 수 있습니다 . 그것을 실행하고 관심있는 창을 클릭하십시오.

$ xwininfo

xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.

xwininfo: Window id: 0x5c04d4b "saml@grinchy:~"

  Absolute upper-left X:  14
  Absolute upper-left Y:  74
  Relative upper-left X:  14
  Relative upper-left Y:  74
  Width: 941
  Height: 361
  Depth: 32
  Visual: 0x62
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x5c00003 (not installed)
  Bit Gravity State: NorthWestGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: no
  Corners:  +14+74  -485+74  -485-465  +14-465
  -geometry 132x24+14+74

X11 창을 다룰 때 유용한 도구는 xdpyinfo& xprop입니다. xdpyinfoX 서버에 대한 정보를 찾는 데 사용할 수 있습니다. 따라서 어떤 창에 포커스가 있는지 알아낼 수 있습니다.

$ xdpyinfo |grep focus
focus:  window 0x5c00005, revert to Parent

xprop및 xwininfo테이크 수 있습니다 -id당신이 그들에게 당신이 대신 클릭해야하는에 관심이있는 창 ID를 제공 할 수 있도록 스위치를 :

$ xprop -id 0x5c00001|grep -i class
WM_CLASS(STRING) = "gnome-terminal", "Gnome-terminal"

참고 문헌


나는 우리가 더 사용하여 단순화 할 수 있다고 생각합니다 xdotool search --name "saml@grinchy:~" key alt+f4, 문제는 같은 이름을 가진 여러 개의 창으로 이것을 수행하는 방법을 찾지 못했다는 것입니다 ...
— Braiam

@Braiam-그들에 대해 독특한 것이 있습니까? 창을 호출하면 그놈이 원하는 제목을 그놈에게 알릴 수 있습니다.
— slm

@Braiam-예 :wmctrl -r :ACTIVE: -N "MyWindowTitle
— slm

1
여기에 제공된 예제 를 사용하여 key alt+F4모든 창에 (크기 조정을 수행 할 수있는 경우 alt + F4가 아닌 이유) 전송하지만 운이없는 경우. 그리고 감사합니다 : D.
— Braiam

1
마우스가 과대 평가되었습니다 : /. 그리고 질문을 해결하고 xdotool search --name "gedit|terminal|office" key --window %@ alt+F4제목 이름에 gedit, 터미널 또는 사무실이있는 창을 찾아 alt + F4 명령을 보냅니다.
— Braiam

1

나는 xdotool색다른 / 버기 인 것을 발견 했다. 때로는 닫혀 져야하는 것이 아니라 전경 창을 닫는다. 이것은 창 이벤트를 직접 보내는 대신 창을 전경으로 가져온 후 키가 전송되는 방식으로 인한 것으로 보이며 매우 성가신 문제입니다. wmctrl키 입력을 보내지 않고 창을 직접 닫는을 사용 하는 것이 좋습니다 .

이름을 일치시켜 창을 직접 닫을 수 있습니다. 예를 들어 둘 다 "제목없는 문서 1-gedit"창을 닫습니다.

wmctrl -c "gedit"
wmctrl -c "Untitled"

이 -F옵션을 사용하면 정확히 일치하는 항목 만 고려할 수 있습니다 .

wmctrl -F -c "Untitled Document 1 - gedit"

또는 ID를 직접 제공 할 수 있습니다.

wmctrl -i -c "121634821"

더 많은 사용 예 / 문서는 여기 에서 찾을 수 있습니다 .

내가 매우 유용하다고 생각하는 것 중 하나 xdotool는 --sync인수를 사용하여 결과가 나올 때까지 기다리는 기능 입니다. 두 명령을 하나의 명령으로 결합하면 다음과 같이 수행됩니다.

xdotool search --sync --name "gedit" | xargs wmctrl -i -c

Mac을 사용하는 경우 -I{}매개 변수 가 필요할 수 있습니다.

xdotool search --sync --name "gedit" | xargs -I{} wmctrl -i -c {}

여러 창을 지원 하려면 옵션을 사용하여 매번 최대 1 개의 인수 xargs를 호출 wmctrl하도록 지시 해야합니다 -n. wmctrl여러 창을 인수로 명시 적으로 지원하지 않습니다.

xdotool search --sync --name "gedit" | xargs -I{} -n 1 wmctrl -i -c {}

이것은 적어도 하나의 그러한 창이 나타날 때까지 기다린 다음 모든 창을 닫습니다.


"확인 하시겠습니까?"프롬프트 대화 상자가 표시됩니까?
— Braiam

@Braiam 그렇습니다. 방금 테스트했습니다. top물론 프로그램이 터미널 (예 :)에서 실행중인 경우에만 닫기 버튼을 클릭 할 때와 동일합니다.
— jmiserez

xdotool search --sync --name "Software Updater" | xargs wmctrl -i -cTrusty를 실행 하고 Software Updater를 시작했습니다. 지금부터 Software Updater가 제대로 표시되지 않습니다. 제목 표시 줄 만 표시됩니다. 업데이트 관리자를 다시 설치해도 도움이되지 않았습니다.
— jarno

Xfce 세션에서 기꺼이 로그 아웃했다가 다시 도움이되었습니다.
— jarno

xdotool 또는 xprop 유틸리티를 사용하여 "gedit"를 찾을 수 없습니다. "gedit"에만 해당되며 다른 프로그램을 찾을 수 있습니다. xdotool search --sync --name "gedit"명령은 결과를 반환하지 않습니다. 누구든지 도울 수 있습니까? 우분투 17
— 곤키

-1

pkill (1)이 필요한 것이어야합니다.


3
아니요, --signal스위치를 사용하는 경우 kill또는 과 다르지 않은 경우 내 테스트 (gedit, LibreOffice 및 터미널 열기, 무언가 작성, 명령 보내기)에서 "Close"이벤트를 시뮬레이션 하지 않습니다 killall. 나는 기대하고 있습니다 저장할? 경보.
— Braiam

당신 말이 맞아요, 당신의 질문을 잘못 읽은 것 같습니다.
— schaiba
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.