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


15

私はUbuntuはASKに答えのすべてのインスタンスを終了し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
    

最初のコマンドを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です。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

@ブライアム-それらについてユニークなものはありますか?ウィンドウを起動すると、GNOMEにタイトルを指定できます。
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"

より多くの使用例/ドキュメントはこちらにあります

私が非常に便利だと思うことの1つxdotoolは、--sync引数を使用して結果が出るまで待つ機能です。2つのコマンドを1つのコマンドに結合するには、次のようにします。

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 {}

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


「よろしいですか」というプロンプトダイアログボックスが表示されますか?
-Braiam

@Braiamはい、そうです、私はそれをテストしました。プログラムがターミナルで実行されている場合のみ(topもちろん)、閉じるボタンをクリックしたときと同じです。
jmiserez

xdotool search --sync --name "Software Updater" | xargs wmctrl -i -cTrusty を実行し、Software Updaterを開始しました。今後、Software Updaterは正しく表示されません。タイトルバーのみが表示されます。update-managerの再インストールは役に立ちませんでした。
ジャーノ

喜んでログアウトしてからXfceセッションに再度ログインしてください。
ジャーノ

xdotoolまたはxpropユーティリティで「gedit」が見つかりません。「gedit」にのみ当てはまります。他のプログラムを見つけることができます。コマンドxdotool search --sync --name "gedit"は結果を返しません。誰でも助けることができますか?Ubuntu 17
Gonki

-1

pkill(1)は必要なものでなければなりません。


3
私が使用している場合いいえ、それは(コマンドを送信し、LibreOfficeの、端子、書き込み何かをgeditのを開く)私のテストのいずれかに「閉じる」イベントをシミュレートしていないだろう、--signalスイッチの違いはありませんkillkillall。私はあなたが救いたいと思っていますか?アラート。
Braiam

あなたは正しい、私はあなたの質問を読み違えているようだ。
シャイバ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.