web-dev-qa-db-ja.com

端末を使用してさまざまなウィンドウで「閉じる」イベントをシミュレートする方法はありますか?

私はAsk Ubuntuで答えました コマンドを使用してgnome-terminalのすべてのインスタンスを終了します しかし、すべての人がgnome-terminalを読み取ることができるので、SIGcallはできませんでしたこの「閉じる」イベントをシミュレートするために使用します。だからこれは私に尋ねるように導きました、「ここをクリックしてウィンドウ/デスクトップマネージャー/環境をここに置く} GNOME/KDE/LXDE /「閉じるボタンをクリック」イベントをシミュレートする方法はありますか?私は readdifferentquestionsthat と関係がある可能性がありますが、これには答えません。

私が探しているのは、さまざまなシナリオでこれを行うためのglobalコマンド(存在する場合)です。存在しない場合は、[閉じる]ボタンの動作を説明してください。

可能な用途:

15
Braiam

関連するmanページは 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
    

最初のコマンドを2番目のコマンドに埋め込むことで、それらをまとめることができます。

$ 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ウィンドウを扱うときに役立つその他のツールは、xdpyinfoxpropです。 xdpyinfoは、Xサーバーに関する情報を見つけるために使用できます。したがって、どのウィンドウにフォーカスがあるかを把握できます。

$ 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"

参考文献

16
slm

xdotoolが不安定/バギーであることがわかりました。閉じる必要があるウィンドウではなく、前景ウィンドウが閉じる場合があります。これは、ウィンドウイベントを直接送信するのではなく、ウィンドウをフォアグラウンドに移動した後にキーが送信される方法が原因であると思われ、非常に煩わしい問題です。キーストロークを送信せずにウィンドウを直接閉じる wmctrl の使用をお勧めします。

名前を照合することで、ウィンドウを直接閉じることができます。これらはどちらも「無題のドキュメント1-gedit」ウィンドウを閉じます。

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

-Fオプションを使用して、完全一致のみを考慮することができます。

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

または、IDを直接指定することもできます。

wmctrl -i -c "121634821"

その他の使用例/ドキュメントは here にあります。

私が非常に便利だと思うのは、--sync引数を使用して結果が得られるまでxdotoolが待機できることです。 2つを1つのコマンドに結合する方法は次のとおりです。

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

Macを使用している場合は、おそらく-I{}パラメータが必要になります。

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

複数のウィンドウをサポートする場合は、xargs-nオプションを指定して、最大で1つの引数でwmctrlを呼び出すように指示する必要があります。 wmctrlは、引数として複数のウィンドウを明示的にサポートしていません。

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

これは、そのようなウィンドウが少なくとも1つ存在するまで待機してから、それらすべてを閉じます。

1
jmiserez