web-dev-qa-db-ja.com

グラフィックタブレットボタンのキーボードショートカットへの再マッピングに関する問題

8つの追加ボタンが付いた安価なXP-Penタブレットを持っています。それらをCtrl-Zなどのキーボードショートカットにマッピングして、Krita/Gimp/etcで使用したいのですが、ベンダーの tility は概念実証のように見えます。

私は提案されたようにEasyStrokeも使用しようとしました here が、ええと。

Xinputが12個のボタンを持つマウスとして認識するパッド。私の計画は:

  • 説明に従ってタブレットボタンを100〜107に再マッピングします there
  • xbindkeysによるイベントのキャプチャ
  • アクティブなウィンドウに基づいて現在のプロファイルを決定する
  • xevまたはxdotoolでキーストロークをシミュレート
  • [追加] udevルールまたは次のようなsmthによってこの自転車をアクティブ化/非アクティブ化します

キー番号を入力するなどの単純なケースではすべてが正常に機能しますが、より複雑なケースではキーを「固定」すると失敗します。

作品をgit repo にアップロードしました。デフォルトプロファイルはxdotoolおよびxteバリアントで正常に機能し、kritaおよびgimpプロファイルはどちらの場合でも機能しません。

イベントをhandler.shに記録して、xbindkeysがkritaまたはgimpプロファイルの実行後に一部のリリースイベントを「失う」が、デフォルトではNiceであることを発見しました。これはハンドラーの実行が長すぎることが原因であると考え、別のプロセスで開始しましたが、何も変更されませんでした。

さて..この問題の原因は何でしょうか?

1
sleeply4cat

原因はかなり単純です。gimpのプロファイルによると、xevプレスコントロール/シフトボタン、およびシフトがまだ押されているため、xbindkeysはリリースイベントをスキップします。このような状況を処理するために、configの各セクションを次のように複製できます。

"/opt/xp-pen/handler.sh 1 1"
  b:100
"/opt/xp-pen/handler.sh 1 1"
  b:100 + shift
"/opt/xp-pen/handler.sh 1 1"
  b:100 + control
...
1
sleeply4cat