全てのマウスボタンを動作させる

提供: ArchWiki
マウスボタンから転送)
ナビゲーションに移動 検索に移動

関連記事

この記事では 3 つ以上のマウスボタンが付いているマウスを設定する方法について説明します。

Xでマウス入力をテストする前提条件

このページでは、Waylandではなく、Xorg (X Window System) を使っていることを前提にしています。

まず、X があなたのマウスから何を見るかを確認したいと思うでしょう。X のイベントは xev ユーティリティで表示することができます。実行することでウィンドウがポップアップします。

$ xev -event button | grep button

そのウィンドウの xevents (移動、サイズ変更、クリックなど) は、xev を起動したコンソールに報告されます。"ボタン" を含む行をフィルタリングしているため、マウスのクリックとリリースのイベントが、関連するボタン番号とともに表示されます。ほとんどのマウスの場合、これは左ボタンの場合は '1'、中央のボタンは '2'、右ボタンの場合は '3' になります。他のボタンは異なります (たとえば、Logicool MX Master 3 の場合、スクロールホイールは 4 と 5、サムホイールは 6 と 7、親指の先のボタンは 9、親指の内側のボタンは 8)

出力例:

state 0x0, button 1, same_screen YES
state 0x100, button 1, same_screen YES
state 0x0, button 9, same_screen YES
state 0x0, button 9, same_screen YES

これは、マウスの左クリックとリリースに続いて親指の先でクリックとリリースに相当します。

xev を使用すると、マウスボタンの番号を確認し、X にマウスクリックが通知されていることを確認できます。

マウスとキーボードの機能の再バインド

このセクションでは、さまざまなツールを使用してマウスとキーボードの機能を再配置する方法について詳しく説明します。

マウスボタンをキーボード機能にバインドする

xte

xautomationxte は、キーボードのボタンをマウスにバインドする場合に便利です。

これは、Shift_R をマウス ボタン 3 ("右クリック") にバインドする ~/.xbindkeysrc の例です:

~/.xbindkeysrc
"xte 'mouseclick 3'"
  Shift_R

キーボードをマウスボタンにバインド

xvkbd と xbindkeys

マウスボタンをキーボードにバインドしたいとします。問題はキーの押下をエミュレートする方法がわからないということです。そこで xvkbdAUR が役に立ちます。xbindkeys と一緒に使うことができます:

$ xbindkeys --defaults >> ~/.xbindkeysrc
$ xbindkeys

xbindkeys を再起動するには以下を実行:

$ pkill -f xbindkeys
$ xbindkeys 

~/.xbindkeysrc の設定例:

"xvkbd  -text "\[F8]""
       m:0x0 + b:8
"xvkbd  -text "\[Shift]\[Left]""
       m:0x0 + b:9
"xvkbd  -text "\[Shift]\[Right]""
       m:0x0 + b:10
"xvkbd  -text 2"
       m:0x0 + b:11
"xvkbd  -text 3"
       m:0x0 + b:12

マウスボタンの番号を確認したいときは xev を使ってください。xvkbd -text では必ず大文字を入力して、括弧開き ([) を \ でエスケープしてください。

以下は xbindkeys で X のセレクションの貼り付け (中クリックのペースト) を有効にする例です。xsel と xvkbd のインストールが必要で、マウスのボタン 13 が押されたときにコマンドを実行します (~/.xbindkeysrc):

"xvkbd -no-jump-pointer -text "\D1$(xsel)" 2>/dev/null"
b:13

以下は Meta+M のキーバインドの例です:

"xvkbd  -text "\{+Super_L}m\{-Super_L}""
b:10

evrouter

プログラム (特にゲーム) によっては別の方法で入力を読み込むため、もう一つのプログラムが必要になります: evrouterAUR

evrouter コマンドで入力デバイスを読み込むには、input グループのユーザー (あるいは root) でコマンドを実行しなければなりません。ユーザーをグループに追加するには:

# gpasswd -a user input

--dump オプションを使うことで変更するボタンの名前を表示することができます:

ヒント: USB デバイスであれば udev は通常 /dev/input/by-id/ にシンボリックリンクを作成するので、それを使って特定のデバイスを指定できます。
$ evrouter --dump /dev/input/event*
device  0: /dev/input/event0: AT Translated Set 2 keyboard
device  1: /dev/input/event1: Microsoft Microsoft Trackball Explorer®
device  2: /dev/input/event2: Sleep Button
device  3: /dev/input/event3: Power Button
device  4: /dev/input/event4: Power Button
device  5: /dev/input/event5: PC Speaker
Display name: :0.0

それから変更したいボタンを押してください:

Window "(null)": # Window title
# Window "(null)": # Resource name
# Window "(null)": # Class name
"Microsoft Trackball Explorer®" "/dev/input/event1" none key/275 "fill this in!"

Window "(null)": # Window title
# Window "(null)": # Resource name
# Window "(null)": # Class name
"Microsoft Trackball Explorer®" "/dev/input/event1" none key/276 "fill this in!"

文末が "fill this in!" になっている行を設定ファイル (デフォルトでは ~/.evrouterrc) にコピーできます。例えば、evrouter に組み込まれている X11 のキーイベントエミュレータを使用して:

~/.evrouterrc
"Microsoft Trackball Explorer®" "/dev/input/event*" any key/275 "XKey/1"
"Microsoft Trackball Explorer®" "/dev/input/event*" any key/276 "XKey/2"

起動時に udev が別のデバイス番号を付与した場合を想定して 'event1' は 'event*' に変更してあります。また、'none' を 'any' に変更することで、ボタンが押されたときに修飾キーが押されていても、ルールが適用されるようにしています。フィールドの詳しい説味は evrouter(1) を見てください。

ヒント: ルールは特定のウィンドウだけに適用させることもできます。詳しくは evrouter(1) を参照。

設定ファイルの作成後、デーモンとして実行:

$ evrouter /dev/input/event*

デーモンを停止するには:

$ evrouter -q
$ rm -f /tmp/.evrouter*
ノート: /tmp/.evrouter:0.0 ファイルが存在すると evrouter は起動に失敗します。手動で削除してください。

ユーザーツール

このセクションでは、マウス設定、特にボタンの設定に役立つハードウェア固有のツールの概要を説明します。一般的なリマップツールについては、入力リマップユーティリティ を参照してください。

  • Piper (piper) は、ゲーミングマウスを設定するためのグラフィカルユーザーインターフェイスであり、Wayland と連携して動作します。マウスを操作するには、そのマウスが サポートされるデバイスのリスト に含まれている必要があります。
  • Logitech MX マウスの lomocoAUR は、適切な解像度の設定、スマートスクロールの有効化または無効化 (起動時のサポートも) などに役立ちます。/etc/udev/lomoco_mouse.conf を開き、udev によってマウスがロードされたときに自動的に適用されるオプションを設定します。
    ノート: lomoco パッケージが古い可能性があります。新しい Logitech マウス用のハックがあります: [1]
  • logiopsAUR は、Logicool マウスを設定するためのツール (Logicool Options for Linux) です。ボタンをアクションに再マップしたり、ジェスチャー、スマート シフトなどをサポートしたりできます。

evdev Xorg.conf のセットアップ

このセクションでは、evdev を使用して 3 つ以上のボタンを備えたマウスをセットアップする方法について説明します。これを実現する方法は他にもありますが、ここで説明するメモやツールの一部は、他のニーズを持つ人にとって役立つかもしれません。一部のパーツは、他のドライバーを使用して追加のマウス ボタンを機能させるのに役立つ場合があります。

Xorg の evdev ドライバーを使用します。EVentDEVice は、標準の Xorg mouse ドライバーよりもはるかに優れた能力を提供する USB 入力デバイス用の高度なドライバーです。また、mouse ドライバーよりも 直接的 であるため、待ち時間が短くなり、変換の問題も少なくなります。

  • evdev はカーネルモジュールと Xorg 入力ドライバーの両方であることに注意してください。すべての Arch カーネルには、evdev モジュールが付属しています。

Xorg 11R7.0 以降では、/etc/X11/xorg.conf に次の変更を加えるだけで済みます。

マウスの名前を確認

ノート: 正確な情報を得るために、Xorg やマウスのドライバーをロードする前にコマンドを実行する必要がある場合もあります。

まず最初にマウスの名前を確認します。次のコマンドを実行してください:

$ egrep "Name|Handlers" /proc/bus/input/devices | egrep -B1 'Handlers.*mouse'

以下のような出力がされます:

N: Name="Logitech USB Gaming Mouse"
H: Handlers=mouse0 event0 ts0 

もしくはマウスが複数ある場合:

N: Name="Kensington Kensington Expert Mouse Wireless"
H: Handlers=event0 mouse0 
--
N: Name="Logitech USB Receiver"
H: Handlers=kbd event2 mouse1

Handlers=mouse0 というのがマウスであり、デバイスの名前は Logitech USB Gaming Mouse です。名前はマウスによって異なります。

デバイスの名前をコピーしたら、/etc/X11/xorg.conf を開いて下さい。

Xorg の設定

X がマウスを使う方法を設定するため xorg.conf にエントリを記述します。エントリは以下のようになります:

Section "InputDevice"
  Identifier      "Evdev Mouse"
  Driver          "evdev"
  Option          "Name" "Logitech USB Gaming Mouse"
  Option          "evBits"  "+1-2"
  Option          "keyBits" "~272-287"
  Option          "relBits" "~0-2 ~6 ~8"
  Option          "Pass"    "3"
  Option          "CorePointer"
EndSection

Name オプションは先にコピーした名前に置き換えて下さい。マウスを複数使う場合や Xorg をロードしたときにエラーが発生する場合は CorePointer オプションは外して下さい。他のオプションはどれも evdev の基本的なマウス設定で、ほとんどのマウスで機能します。

次に、マウスを使うように X を設定します。xorg.confServerLayout を見て下さい。

ServerLayout セクションを修正してデバイスとして "Evdev Mouse" を使うようにしてください。設定したら、以下のようになります:

Section "ServerLayout"
  Identifier     "Default Layout"
  Screen 0       "Monitor0" 0 0
  InputDevice    "Keyboard0" "CoreKeyboard"
  InputDevice    "Evdev Mouse" "CorePointer"
EndSection

レイアウトで変更する必要があるのは (マウスを示す) InputDevice 行だけです。

Logitech G5 マウスを使っていてマウスが動作しない場合、InputDevice セクションに以下を記述してみてください ([#] は egrep 'Name|Handlers' /proc/bus/input/devices で確認できる数字に置き換えて下さい)。必要ない場合は、記述しないでください。

Option "Device" "/dev/input/event[#]"

上記の方法で、再起動後にマウスが動作しなくなる場合、/dev/input/by-id にシンボリックリンクを作成してみてください。例:

Option      "Device" "/dev/input/by-id/usb-Logitech_USB_Receiver-event-mouse"

適当な ID は、次を実行することで確認できます:

$ ls /dev/input/by-id/

evdev Xorg.conf 設定後

Google Chrome

動作します。横スクロールは何も設定しなくても動作します。スクロールホイールを左右に押して下さい。親指ボタンで次/前のページに移動します。

Opera

動作します。ボタンのマッピングは Preferences > Advanced > Shortcuts > Mouse set-up で簡単に変えられます。例えば、button 8back にバインドするには:

  1. マウスの設定から Application ドロップダウンを開く
  2. インプットカラムに、次を入力: Button 8
  3. アクションカラムに、次を入力: Back

Firefox

横スクロール

左と右のスクロールの代わりに、戻ると進むを有効にするには、about:config で以下の設定を変更します:

mousewheel.default.action.override_x         2
mousewheel.default.delta_multiplier_x       -100

親指ボタン - 進むと戻る

ノート: 以下は、xev がすべてのマウスボタンを正しく検出する (アプリごとに機能をマッピングできる) か、それともデフォルトの動作を変更するかによって、冗長になる可能性があります。

キーストロークを適当なマウスボタンにマッピングして xvkbdAURxbindkeys をインストールする必要があります。

戻る/進むを使用する最近のアプリケーションでは、デフォルトで XF86Back が戻るに、XF86Forward が進むにマッピングされています。ほとんどの MX マウスでは親指ボタンは 8 や 9 と認識されます。使用しているボタンで番号が異なっている場合、xev を使ってボタンの番号を確認して例で使われている番号を置き換えて下さい (b:8 & b:9)。

MX マウスを使っている場合、以下の内容で ~/.xbindkeysrc ファイルを作成します:

# Mouse Buttons
"xvkbd -xsendevent -text "\[XF86Back]""
m:0x0 + b:8 
"xvkbd -xsendevent -text "\[XF86Forward]""
m:0x0 + b:9

次にテストです。以下のコマンドを実行してください。問題ないようでしたら xbindkeys を .xinitrc など (X が起動するたびに読み込まれるファイル) に追加してください。また、Epiphany や Konqueror では特別な設定をしたり Imwheel を使用しなくとも機能します。

xbindkeys

詳しい情報は Logitech MX1000 にあります。

xmodmap の調整

ノート: evdev では以下のどれも必要ありませんが、evdev 以外のユーザーのためにここにあります。マウスで問題が発生しない限り、このセクション全体を無視してください。

.xinitrc を使って X をロードしている場合、以下を .xinitrc に追加してください (ボタンの数字は必要に応じて変更してください):

xmodmap -e "pointer = 1 2 3 6 7 8 9 10 11 12 4 5" &

ボタン 4 と 5 は一番最後に置いて下さい。そうしないとスクロールホイールが動作しません。

.xinitrc ではなく GDM/XDM/KDM を使っている場合、~/.Xmodmap ファイルを作成して以下を追加します (ボタンの数字は必要に応じて変更してください):

pointer = 1 2 3 6 7 8 9 10 11 12 4 5
  • GDM/XDM/KDM は ~/.Xmodmap ファイルが存在すると読み込みますが、startx は読み込みません。~/.xinitrc に次のコマンドを追加して読み込ませることもできます: xmodmap ~/.Xmodmap。何か変更が必要になったときに *DM と startx のどちらを使っている場合でも ~/.Xmodmap を編集すれば良くなります。

望み通りの動作をさせるために数字を多少弄る必要があるかもしれません。マウスによってはボタン 6 と 7 がスクロールホイールだったりします。その場合は 6 と 7 を最後の数字にしてください。上手く行くまで弄り続けて下さい。

Xorg に含まれている 'xev' というプログラムを使ってボタンを確認することもできます。xev を実行すると、デスクトップに小さなボックスが表示されるので、カーソルを合わせてボタンをクリックすることで、ボタンのマッピングがわかります。

xinput の調整

デバッグ時は xinput を使うことでユーザー空間で即座にボタンマップを変更できます。Logitech M505/B605 マウスの場合の実行例:

$ xinput set-button-map "$(xinput | awk -F'[=]' '/Logitech M505\/B605/ {print $2}' | awk '{print $1}')" 1 2 3 4 5 8 9

デバイスごとの設定ファイル

Logitech G600

xorg-server 1.18.0-3 では G600 のサイドボタンはキーボードデバイスとして認識されず、おかしな挙動が発生することがあります (マウスボタンをクリックするとマウスカーソルが画面の端に飛ばされる)。強制的にキーボードボタンとして認識させるために、以下のセクションを /etc/X11/xorg.conf に追加してください:

Section "InputClass"
    Identifier "G600 misconfiguration fix"
    MatchProduct "G600"
    # Match just the keyboard section of the G600
    MatchIsKeyboard "true"
    # evdev assumes it's a mouse when it sees the absolute axis. Stop that from happening. 
    Option "IgnoreAbsoluteAxes" "on"  
EndSection

Mad Catz

Mad Catz を見てください。

Logitech M560/M545/M546

これらのマウスは Windows 8 用に設計されており、通常通りの挙動を示しません: マウスとキーボードのペアとして認識され、ボタンによっては通常のマウスボタンのイベントが発火せず、キーボードとマウスボタンのコンビネーションと認識されます。そのため Linux で"快適"なマウスとして使うのは厳しくなっています。

ドライバーを使うことで通常のマウスのように使うことができます:

M560 のカーネルモジュール (カーネル v4.2 でマージされています), M545/M546 のカーネルモジュール

また、xbindkeys でボタンをマッピングすることを推奨します。

Logitech G5 マウスの + と - のバインド

G5/7 マウスに付いているボタン +- をバインドしたい場合 (通常は DPI を変更します)、lomoco の作者によって作成された g5hack [2] を使う必要があります。

$ wget http://piie.net/temp/g5_hiddev.c
$ gcc -o g5hack g5_hiddev.c
$ ./g5hack /dev/usb/hiddev0 3

上記のコマンドで DPI が2000に変更され、1番目の LED が点灯して DPI の動的な変更が無効化され evrouter で使えるようになります。コマンドを頻繁に実行する場合は /usr/bin ディレクトリにコピーすると良いでしょう:

# cp g5hack /usr/bin/

+- ボタンをバインドしたい場合、ファイル内の末尾付近の行 ('"-" button does not function anymore' というコメントが上にある行) を使用したいモードのところにコピーしてください。

product 0xc049 と認識される最新の G5 マウスではオリジナルのソースは使えません。#define MOUSE_G5 0xc041#define MOUSE_G5 0xc049 に変更してコンパイルしてください。

systemd ユニットを使うことで起動時に g5hack ツールを実行できます。詳しくは Systemd#ユニットファイルを見てください。

Arch がゲスト仮想マシンの場合

2 つまたは 3 つを超えるマウス ボタンをサポートしたい場合、その機能はハイパーバイザーソフトウェアによって異なります。

VMware ワークステーション

Arch ベースのゲスト VM の場合、その .vmx 設定ファイルに以下の行を追加します:

mouse.vusb.enable = "TRUE"
mouse.vusb.useBasicMouse = "FALSE"