サイドボタン(通常はページフォワード)をミドルクリックボタンにバインドするLogitech M720マウスを持っています。これは、WindowsでLogitechオプションを使用して実行したものです。
調査の結果、xbindkeys
とxautomation
を使用する必要があることがわかりました。
キープレスをxev
でテストしたところ、サイドボタンはbutton 9
、中央のスクロールホイールボタンはbutton 2
であることがわかりました。
次に、.xbindkeysrc
ファイルを次のように作成しました。
"xte 'mouseclick 2'"
b:9
ただし、xbindkeys
でrcファイルを再ポーリングした後、キーバインドがシステムのどこにも認識されず、xev
テストを実行すると奇妙な結果が返されます。
ボタン9を押すと通常の結果
ButtonPress event, serial 37, synthetic NO, window 0x4a00001,
root 0x1dd, subw 0x0, time 38400097, (160,106), root:(160,169),
state 0x0, button 9, same_screen YES
ButtonRelease event, serial 37, synthetic NO, window 0x4a00001,
root 0x1dd, subw 0x0, time 38400237, (160,106), root:(160,169),
state 0x0, button 9, same_screen YES
XBINDKEYSRCファイル変更後の結果(ボタン9)
KeymapNotify event, serial 37, synthetic NO, window 0x0,
keys: 4294967261 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
.xbindkeysrc
ファイルを消去した後でも、出力は同じであり、i killall xbindkeys
の後で通常に戻り、ターミナルでxbindkeys
と入力して再起動します。
私はこれ this thread を潜在的な解決策で見つけましたが、残念ながら私にはうまくいきませんでした。
ボタンプレスを他の何かにバインドすると、たとえば"xte 'key a'"
は期待どおりに機能します。
私が間違っているかもしれない何かポインタを持っている人は誰ですか?
乾杯。
ショートカットごとに3行目が必要だと思います。多分それは必須ではありませんが、私は私が設定した例を見ています:
"pactl set-sink-volume @DEFAULT_SINK@ +5%"
m:0x4 + c:112
Control + Prior
"pactl set-sink-volume @DEFAULT_SINK@ -10%"
m:0x4 + c:117
Control + Next
# xautomation package
# Print Date
'"xte "keyup Super_L" "keyup Insert" "str `date +%Y.%m.%d`" "usleep 10" "keydown Super_L""'
m:0x40 + c:118
Mod4 + Insert
したがって、各エントリには3行目があり、ショートカットを定義しています。また、押されたキーを自分で解放する必要があり、通常はコマンドを実行する前に解放します。 Shiftを解放すると問題が発生することがわかったので、これはShiftでさらに複雑になります。
通常、xbindkeys
は複雑なバインディング、またはスクリプト/コマンドの実行に使用されます。 modmap
を試してみると、達成しようとしていることの中心に近い可能性があります。 xev
、またはevtest
を使用して、マウスで使用されるキーコードを判別し、Xにそれを別のキーコードとして解釈するように指示できます。
~/.Xmodmap
keycode 97 = Control_R NoSymbol Control_R
~/.xinitrc
[[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap
これは、通常に、または修飾キー(Shift、Altなど)を使用してキーコード97(ランダム、非マウス)を処理する方法をXに指示します。マッピングは~/.Xmodmap
にあり、$ modmap ~/.Xmodmap
を介して、通常はXと一緒に~/.xinitrc
にロードします。 evtest
はxev
より「優れている」ので、テストしたいデバイスを見つけるのに役立ちますが、/dev
リストでシステムを探すのに役立ちます。
別の解決策は、udev
/evdev
を使用し、システムがこの変換を実行するようにすることです。Xを起動するかどうかに関係なく、いつ起動するか、およびデバイスの接続ごとに実行されます。これは少し複雑ですが、いくつかの設定に慣れたら、ここでそれらを移行するように作業できます。
カスタムルールは/etc/udev/hwdb.d/
にあります。これはハードウェアデータベースの[構成]ディレクトリです。これらは順番に読み込まれるため、ファイルには通常2桁のプレフィックスが付きますが、これは、後のルールが前のルールを上書きする場合にのみ問題になります。これは、USBバス、デバイス、ベンダーID別のデバイスのリストです。すべてのキーボードではなく、特定のキーボードのキーを再マップできるため、この方法は理想的です。
/etc/udev/hwdb.d/99-myMouse.hwdb
evdev:input:bIDvIDpID1*
KEYBOARD_KEY_210=menu
evdev:input:bIDvIDpID2*
KEYBOARD_KEY_210=menu
この例では、同じUSBバス上で、同じベンダーから、IDが異なる2つの入力デバイスを検出します。どちらもキーコード210をメニューボタンにマップします。このようにして、マウスのキーを再マップする方法を学ぶこともできます。
システムの別のディレクトリ/usr/lib/udev/hwdb.d
にhwdb
ファイルがあります。これらのファイルは編集しないでください。ただし、これらのファイルを例として使用して、作業を進めることができます。
変更後、データベースを更新する必要があります。
Sudo systemd-hwdb update