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


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

xpropxwininfo테이크 수 있습니다 -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.