全てのマウスボタンを動作させる
この記事では 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
xautomation の xte は、キーボードのボタンをマウスにバインドする場合に便利です。
これは、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
オプションを使うことで変更するボタンの名前を表示することができます:
$ 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 /dev/input/event*
デーモンを停止するには:
$ evrouter -q $ rm -f /tmp/.evrouter*
ユーザーツール
このセクションでは、マウス設定、特にボタンの設定に役立つハードウェア固有のツールの概要を説明します。一般的なリマップツールについては、入力リマップユーティリティ を参照してください。
- Piper (piper) は、ゲーミングマウスを設定するためのグラフィカルユーザーインターフェイスであり、Wayland と連携して動作します。マウスを操作するには、そのマウスが サポートされるデバイスのリスト に含まれている必要があります。
- Logitech MX マウスの lomocoAUR は、適切な解像度の設定、スマートスクロールの有効化または無効化 (起動時のサポートも) などに役立ちます。
/etc/udev/lomoco_mouse.conf
を開き、udev によってマウスがロードされたときに自動的に適用されるオプションを設定します。 - 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
に次の変更を加えるだけで済みます。
マウスの名前を確認
まず最初にマウスの名前を確認します。次のコマンドを実行してください:
$ 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.conf
の ServerLayout
を見て下さい。
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 8 を back にバインドするには:
- マウスの設定から Application ドロップダウンを開く
- インプットカラムに、次を入力: Button 8
- アクションカラムに、次を入力: Back
Firefox
横スクロール
左と右のスクロールの代わりに、戻ると進むを有効にするには、about:config
で以下の設定を変更します:
mousewheel.default.action.override_x 2 mousewheel.default.delta_multiplier_x -100
親指ボタン - 進むと戻る
キーストロークを適当なマウスボタンにマッピングして xvkbdAUR と xbindkeys をインストールする必要があります。
戻る/進むを使用する最近のアプリケーションでは、デフォルトで 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 の調整
.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#ユニットファイルを見てください。
If Arch is a guest virtual machine
If you want to support more than two or three mouse buttons, the capability will depend on your hypervisor software.
VMware workstation
For your Arch-based guest VM, add the below lines to its .vmx configuration file:
mouse.vusb.enable = "TRUE" mouse.vusb.useBasicMouse = "FALSE"