web-dev-qa-db-ja.com

ハングアップした不死のアプリでキーボードとマウスをグラブから解放する方法は?

キーボードとマウスを通常の操作モード(例:QEMU)として取得するXアプリケーションがありますが、どこかにバグがあるため、非常にハングします(例:ディスクスリープでスタックする)。通常、リモートターミナルからkill(1)を使用してアプリを強制終了しますが、アプリがディスクスリープモードの場合、実際には強制終了できません。 xkillユーティリティを使用して、このアプリのXサーバーへの接続を強制終了することもできますが、今回はマウスをつかんでいるため、これを行うことができず、xkillは実行できません。

それで、このクライアントを犠牲にしても、OSの手段でクライアントを強制終了できない場合、Xクライアントによってキーボードとマウスをグラブから解放するにはどうすればよいですか?

13
Ruslan

xkillの最もよく知られている使用モードは「クリックして殺す」ですが、オプション-id。Xサーバーから切断するクライアントのウィンドウIDを指定できます。次に、リモートターミナル/ VTからXセッションにアクセスできる場合は、xpropまたはその他の手段を使用してIDを取得し、xkillに渡すことができます。

現在アクティブなウィンドウがキーとマウスを取得したXクライアントに属しているとします。次に、このクライアントのXサーバーへの接続を強制終了し、キーボードとマウスをグラブから解放します。

winid=$(xprop -root _NET_ACTIVE_WINDOW | cut -d# -f2)
xkill -id $winid

これは、QEMUがディスクスリープ状態のままになっているときにQEMUのグラブを削除しようとしたときに実際に機能しました。

14
Ruslan

あなたは標準を試すことができます SysRq+R Xサーバーからキーボードを解放するトリック、または Ctrl+Alt+1-6 現在のコンソールを変更する組み合わせで、端末を実行して障害のあるプログラムを強制終了できるようにする可能性があります。

2
zdimension