要するに、クリップボードを編集し、アクティブなウィンドウに変更を貼り付けるキーバインドをプログラムに追加しようとしているということです。Windowsではおそらくメッセージパッシングでできると思いますが、Xはそのようなメッセージパッシングを使用しないため、これを行うために、python-evdevを使用してctrl + vイベントをuinputに送信しています。これは、実行するだけではかなりうまく機能しますが、キーバインドで実行する必要があります。この場合は super+v. 問題は、ctrl および v イベントを uinput に送信すると、スーパー マスクがまだアクティブであるため、ウィンドウに ctrl+v を送信する代わりに、実際には何もしない ctrl+super+v を送信することです。私が話していることを正確に説明するための最小限のコードを次に示します。
import evdev,time,keybinder,gtk
def callback():
with evdev.UInput() as uinput:
uinput.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTCTRL, 1)
uinput.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_V, 1)
uinput.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_V, 0)
uinput.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_LEFTCTRL, 0)
uinput.syn()
keybinder.bind("<super>v",callback)
keybinder.bind("Escape",gtk.main_quit)
gtk.main()
非常に迅速にリリースすれば、実際に動作させることができますが、非常に高速であり、実際のアプリケーションには明らかに受け入れられません。super をリリースしようとしましたが、いくつかの問題が発生します。それは非常に一般的ではなく、後で何をすべきかという問題を引き起こします (リリースしたままにしますか? もう一度押しますか? リリースしてからもう一度押すまでの時間内にリリースされたらどうしますか?)、そして最も重要なことに、そうではありません本当にうまくいくようです。
とにかく、私は質問だと思います、これを回避する方法はありますか?おそらく、物理キーボードと結合しないキープレスイベントを送信する方法 (ありそうもない)? そうでない場合、Linuxに一般的に貼り付けるためのより良い方法はありますか?