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


20

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

Key     0x00f00ba5  0x123   0
Button  0x00f00ba5  2       
Pointer 0x00abcdef  

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

回答:


21

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

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

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

xdotool key NameOfKey

NameOfKeyアクティブにするキーシムはどこですか。たとえば、アクティブなグラブのリストを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)の「Active grab…」情報を確認します。

2
現在、Xorg 1.12.4を使用したDebian wheezyでのテストxdotool key XF86LogGrabInfoでは、Xログに「現在アクティブなすべてのデバイスグラブの印刷:」の直後に「アクティブなデバイスグラブのリストを終了」という2つのエントリのみがトリガーされます。しかし、私のウィンドウマネージャーはたくさんのキーを取得します。グラブされたキーのこの作品を見ましたか?
ジル 'SO-悪であるのをやめる' 14年

4
@Gilles-いいえ、そのように実行すると出力は得られません...実行してみてsleep 2; xdotool key "XF86LogGrabInfo"、すぐにキー(たとえば「Win」キー)を押し始めると、いくつかの出力が表示されますXorg.log。または利用xdotool押しキー+までXF86LogGrabInfoのように、同時に、ここに
don_crissti

@don_crisstiああ、なるほど、XF86LogGrabInfo現在押されているキーに関する情報だけを表示するのですか?それはその有用性を制限します。用語を正しく理解していれば、すべてのグラブ(すべての受動グラブ)をリストしたいと思います。
ジル「SO-悪であるのをやめる」14年

仮想キーボードを使用せずに、キーの組み合わせのスクリプトによる網羅的な検索とこれを組み合わせる巧妙な方法がおそらくあります。確かに私の知識の範囲外です。
アダム・カッツ

ありがとう!これは私がいることがわかりましたxfsettingsd私の盗みましたWin+ Lショートカットを。
ミケル

8

存在する可能性のある単一のキーまたはボタンの受動的なグラブ1について、手に負えないものは知りませんが、キーボードまたはマウスデバイス全体の能動的なグラブをリストする方法はいくつかあります。

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

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


4

これは、メカニカルカタツムリの答えに追加されます-

Xorgログのエントリはかなり判読できない場合があります。それらを解析し、人間が理解できる形式で表示するプログラムを作成しました。

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

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


1
ここで述べた要点は言語Dでプログラムされています。実行可能ファイルを取得するには、パッケージgdc(GNU Dコンパイラー)をインストールしてlibx11-devから実行しgdc -o xorg-show-grabs xorg-show-grabs.d -lX11ます。
ステファンゴーリチョン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.