xbindkeys キーボードをマウス ボタンに固定し、押したままにするとキーの押下が繰り返されるようにするにはどうすればよいですか?

xbindkeys キーボードをマウス ボタンに固定し、押したままにするとキーの押下が繰り返されるようにするにはどうすればよいですか?

私は Logitech MX Revolution マウスを持っていますが、これには XF86Search キーボード キーが付いています。xdotool を使用して、xbindkeys ファイル内でそれをマウスの中央ボタンとしてマッピングしました。

このマウス クリックは、ボタンを 1 回押すのと同じように動作しなくなり、押し続けるとオンとオフの状態が交互に切り替わります。この望ましくない動作により、操作ができなくなります。たとえば、グラフィック プログラムでキャンバスをパンしたり、Blender のビューポートでパンしたりできなくなります。

xev を使用してボタン マッピングを読み取ると、キーボードでキーを繰り返し押したときと同様に、交互の状態が点滅します。

この問題が何なのか、誰か分かるでしょうか? Mint 18.2 の新規インストール時にこの問題が発生したことがありますが、再起動してバッテリーを再充電したら問題はなくなりました。今回はこの解決策は役に立ちません。Mint 18.2 を更新したときに再び発生し、Ubuntu の新規インストールでも再び発生したからです。

キーボードショートカットの検索キーのバインドを解除しました。

答え1

キーの繰り返し押下を停止する解決策は、xbindkeys ファイルにコマンド xset -r keycode を追加することです。これは、設定/キーボードでキーの繰り返しを無効にするのと同じように動作します。

配置されたコードは次のようになります。

"xset -r 225; xdotool mousedown 2"
    m:0x0 + c:225
    XF86Search

"xdotool mouseup 2"
    m:0x0 + c:225 + release
    XF86Search

これで問題は解決しましたが、私が抱えていた本当の問題は解決されていませんでした。それは、Blender などのプログラムで検索ボタンをマウスの中央ボタンとして完璧に機能させることでした。上記の解決策は、理解できない理由で Shift 修飾子ではうまく機能しません。

この問題の最善の解決策は、xbindkeys を完全に放棄し、代わりに次のコードを追加して中クリックのエミュレーションを有効にすることです/etc/sysctl.conf

# Enable mouse button emulation
dev.mac_hid.mouse_button_emulation = 1
# Set 2nd button to 217 - the middle button of MX Revolution mouse.
dev.mac_hid.mouse_button2_keycode = 217

この後、/etc/udev/rules.d/ドングルが差し込まれたときにスクリプトを呼び出す udev ファイルを作成する必要がありました。このスクリプトには、sysctl --systemマウス 2 エミュレーションを有効にするために必要なコマンドが含まれています。何らかの理由で、デフォルトでは有効になっていません。これについては後で調べたいと思います。

これは私のロジクール ドングルに固有の udev ファイルです:

SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="046d", RUN+="/bin/sh  /home/user/mouse-initialize-settings.sh"

関連情報