web-dev-qa-db-ja.com

コマンドラインでXキーとポインターグラブを操作する

Xサーバーグラブを一覧表示および管理するためのコマンドラインツールは何ですか? (これは、キーとポインターのグラブと同じようにグラブします。つまり、特定のキーまたはマウスボタンの使用を特定のアプリケーションに制限するか、マウスポインターを特定の画面領域にとどまるように制限します。)架空のxgrab次のようなものを表示するユーティリティ

_Key     0x00f00ba5  0x123   0
Button  0x00f00ba5  2       
Pointer 0x00abcdef  
_

XGrabKey(display, 0x123, 0, 0x00f00ba5, ...)などがXGrabButtonXGrabPointerXGrabKeyboardXGrabServerで呼び出されたことを意味します(可能な場合) 。表示形式は重要ではありません。私が欲しいのは、誰が何をつかんでいるかを確認する方法と、おそらくこれらのつかみを取り消す方法です(可能であれば、X11 APIで許可されているかどうかはわかりません)。

Xの最近のバージョン(X.orgサーバー≥1.11)は、 このコミット で導入されたいくつかのデバッグキーシムをサポートしています。トリガーされると、これらはグラブに関連するアクションを実行します。

デフォルト( 少なくとも最近のバージョンでは )では、これらは無効になっています(デフォルトのキーマップにはありません)。

ただし、xdotoolがインストールされている場合は、コマンドラインで実行することにより、それらを呼び出すことができます。

xdotool key NameOfKey

ここで、NameOfKeyはアクティブにするkeysymです。たとえば、アクティブなグラブのリストをXサーバーログに出力するには、xdotool key XF86LogGrabInfoを使用します。

関連するキーシムは次のとおりです。

ご了承ください XF86LogGrabInfo 現在押されていないキーのグラブなどのパッシブグラブではなく、アクティブグラブのみを一覧表示します。パッシブグラブに関する情報を取得する場合は、グラブをアクティブにする必要があります。目的のキーコードまたはマウスボタンの組み合わせを押しながら、xdotool key XF86LogGrabInfoを実行します。次のようなことを行います。

  1. sleep 1; xdotool key XF86LogGrabInfoを実行します
  2. 1秒以内に、キーコードまたはマウスボタンの組み合わせを押します。
  3. 1秒後、キー/ボタンを離します。
  4. Xサーバーログ(多くの場合、/var/log/Xorg.0.log)の「アクティブグラブ…」情報を確認します。
23

パッシブグラブの手元にあるものは何も知りません1 存在する可能性のある単一のキーまたはボタンの例ですが、キーボードまたはマウスデバイス全体のアクティブなグラブを一覧表示する方法はいくつかあります。

  1. すべてのプラットフォームで、ただしXorg 1.11以降(またはパッチが適用された古いバージョン)でのみ、ホットキーをマップして、グラブデータをログに これらのパッチノートで説明 としてダンプします。
  2. Solaris 11(Solaris 11 Express2010.11または実際のSolaris11リリースのいずれか)では、Xからの情報の取得)で説明されているように、/usr/demo/Xserver/mdb/list_Xserver_devicegrab_clientなどのデバッガスクリプトを使用します。サーバー。 Xorg1.11ホットキーが現在カバーしていないサーバーグラブ用のものもここにあります。

1 アクティブグラブとパッシブグラブの定義については、 http://tronche.com/gui/x/xlib/input/pointer-grabbing.html を参照してください。

8
alanc

これは機械式カタツムリの答えへの追加です-

Xorgログのエントリはかなり判読できません。私はそれらを解析し、人間が扱いやすい形で提示するプログラムを書きました。

https://Gist.github.com/Cyber​​Shadow/6412d11aea64144f8905cc0b8196f38e

使用するには、最初にxdotool key XF86LogGrabInfoを実行します。機械のカタツムリの答えで説明されています。次に、上記のリンク先のプログラムを実行します。 Xorgログファイルが/var/log/Xorg.0.logにない場合は、--xorg-logオプションを使用してその場所を指定できます。詳細については、--helpを参照してください。

5