web-dev-qa-db-ja.com

Linuxのマウスボタンをキーボードにマッピングする方法

私はDebian 9(別名 'Stretch')x86_64を使用しています。

$ uname -a:  
Linux mypc 4.9.0-8-AMD64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux  

デバイスのLogitech MU-007から追加のボタンをマップしようとしました:

$ lsusb | grep Logitech  
Bus 001 Device 023: ID 046d:c069 Logitech, Inc. M-U0007 [Corded Mouse M500]  

xinputデバイス:

$ xinput | grep Logitech  
⎜   ↳ Logitech USB Laser Mouse                  id=10   [slave  pointer  (2)]  

xinput test 10を使用した追加ボタンのテストでは、マウスの左側にある2つのボタンに対して8および9が返されます。

$ xinput -version  
xinput version 1.6.2  

簡単に試してみました:

xinput set-button-map 10 8 2 3  

または

$ xmodmap -e "pointer = 9 2 3"
Warning: Only changing the first 3 of 12 buttons.
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  116 (X_SetPointerMapping)
  Value in failed request:  0x9
  Serial number of failed request:  9
  Current serial number in output stream: 

左ボタンはまったく機能せず、左クリックなどでは選択できません。

左クリックと追加ボタンを左クリックとして維持したいと思います。
xinputコマンドが何も選択しなかった理由は何ですか?

編集する

最後に:

id=$(xinput list | grep -oP 'Logitech USB Laser Mouse.*id=\K\d+')
xinput set-button-map $id 1 2 3 4 5 6 7 1 1 10 11 12
2
Gilles Quenot

私はより良い解決策を見つけました。 これにより、他のソリューションでは不可能なテンキーを保持できます。

マウスモード を切り替えるキーボードキーがあります。そのようにして、F1を左クリック、F2を中央クリック、F3を右クリックとして使用します。次に、特別なキーを使用してキーパッドに切り替えることができます。

特別なキーがこのスクリプトをトリガーします(WMキーボードショートカットの設定を確認してください)。

#!/bin/bash

if [[ ! -s ~/.button-state ]]; then
    echo 0 > ~/.button-state
fi

state=$(<~/.button-state)

if ((state==0)); then
    xkbset m
    yad --notification xxx &
    echo 1 > ~/.button-state
Elif ((state==1)); then
    xkbset -m
    pkill -f 'yad --notification xxx
    echo 0 > ~/.button-state
else
    echo >&2 "weird error"
    exit 1
fi

マウスジェスチャーが有効な場合、システムトレイに次のアイコンが表示されます。

enter image description here

0
Gilles Quenot

このコマンドは、最初のマウスボタンの機能を物理ボタン#8にマッピングすると想定しました。

xinput set-button-map 10 8 2 3

この仮定は正しくありません。実際、コマンドはまったく逆の方法で機能します。実際にイベントを「ボタン8」の別のインスタンスとして送信するように物理ボタン#1を設定したため、「最初のマウスボタン」アクションは事実上使用できなくなりました。

物理ボタン#8を追加の「最初のマウスボタン」として機能させるには、次のようにする必要があります。

xinput set-button-map 10 1 2 3 4 5 6 7 1 9 10 11 12

デフォルトのマッピングは1 2 3 4 5 6 7 8 9 10 11 12であるため、物理ボタン#8を最初のマウスボタンと同じように動作させる場合は、マッピングの8を別の1に置き換えます。

特定のボタンを完全に無効にする場合は、その物理ボタンに対応するスロットで0を使用します。

ボタン4と5は通常、マウスホイールの上下操作に対応することに注意してください。

2
telcoM