LoginSignup
0
0

More than 5 years have passed since last update.

Gtk+ 3アプリケーションがXSendEvent(3)による入力を受け付けない時は

Posted at

TL; DR

Gtk+ 3アプリケーションがXSendEvent(3)による入力を受け付けない時は環境変数GDK_CORE_DEVICE_EVENTS=1をセットすればよい。

詳細

XSendEvent(3)はXlibの関数で、X Window Systemのイベントメッセージを指定のウィンドウに送りつける関数です。これを使うとキーボード入力のエミュレーションを(ある程度)実現できます。例えば、xvkbdxdotoolといったエミュレーションツールは裏でこの関数を使う場合があります1

が、Evinceなど一部のGtk+ 3アプリケーションではXSendEvent(3)によるキーボード入力を受け付けません。

これはGtk+ 3の入力バックエンドがデフォルトでXInput2というX Window System拡張を使うからです。GDK_CORE_DEVICE_EVENTS=1環境変数をセットすると、イベントメッセージによる入力を受け付けるようになり、XSendEvent(3)も効くようになります。

参考


  1. ただし、これらのツールは可能ならばXTest拡張の関数を使うようになっています。これは、XSendEvent(3)で送るイベントメッセージは人工的な(synthesized)イベントであることが分かるフラグが付けられており、アプリケーションによってはそれを無視する場合があるためです。XTestによる入力はアプリケーションからは物理デバイスからの入力と区別できず、エミュレーションとしてより信頼性が高いと考えられます。 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0