キーボードとマウスを通常の操作モード(例:QEMU)として取得するXアプリケーションがありますが、どこかにバグがあるため、非常にハングします(例:ディスクスリープでスタックする)。通常、リモートターミナルからkill(1)
を使用してアプリを強制終了しますが、アプリがディスクスリープモードの場合、実際には強制終了できません。 xkill
ユーティリティを使用して、このアプリのXサーバーへの接続を強制終了することもできますが、今回はマウスをつかんでいるため、これを行うことができず、xkill
は実行できません。
それで、このクライアントを犠牲にしても、OSの手段でクライアントを強制終了できない場合、Xクライアントによってキーボードとマウスをグラブから解放するにはどうすればよいですか?
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のグラブを削除しようとしたときに実際に機能しました。
あなたは標準を試すことができます SysRq+R Xサーバーからキーボードを解放するトリック、または Ctrl+Alt+1-6 現在のコンソールを変更する組み合わせで、端末を実行して障害のあるプログラムを強制終了できるようにする可能性があります。