全てのマウスボタンを動作させる
この記事では7つ以上のマウスボタンが付いているマウスを使っているユーザーに全てのボタンを使用する方法を説明します。そうしたマウスは Logitech (Logitech Marble® Mouse) や Microsoft などが製作しています。
要件
Xorg では evdev
ドライバーを使います。EVentDEVice は USB 入力デバイス用の先進的なドライバーで、Xorg 標準の mouse
ドライバーよりも強力です。また、mouse
ドライバーよりも"ダイレクト"に制御することができ、遅延が抑えられます。
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/
設定後
Google Chrome
動作します。横スクロールは何も設定しなくても動作します。スクロールホイールを左右に押して下さい。親指ボタンで次/前のページに移動します。
Opera
動作します。ボタンのマッピングは Preferences > Advanced > Shortcuts > Mouse set-up
で簡単に変えられます。例えば、button 8 を back にバインドするには:
- マウスの設定から Application ドロップダウンを開く
- インプットカラムに、次を入力: Button 8
- アクションカラムに、次を入力: Back
Firefox
横スクロール
Firefox 20 以上
左と右のスクロールの代わりに、戻ると進むを有効にするには、about:config
で以下の設定を変更します (バージョン 32 で確認済み):
mousewheel.default.action.override_x 2 mousewheel.default.delta_multiplier_x -100
古いバージョン
デフォルトでは、FX/MX マウスの左右スクロールは戻ると進むに翻訳されます。スクロールのままにしたい場合、about:config
を開いて以下の値を変更してください:
mousewheel.horizscroll.withnokey.action 0 mousewheel.horizscroll.withnokey.numlines -3
もしくは (Logitech G5 で確認):
mousewheel.horizscroll.withnokey.action 2 mousewheel.horizscroll.withnokey.numlines 2
親指ボタン - 進むと戻る
To do this we need to map keystrokes to the desired mouse buttons and install xvkbd and xbindkeys.
In most modern applications which use back/forward features, XF86Back is mapped to back and XF86Forward is mapped to forward by default. On most MX mice the thumb buttons resolve to 8 & 9. If your mouse is different, check button numbers using xev and replace the numbers used in the example (b:8 & b:9).
So if you have an MX mouse you would create the file ~/.xbindkeysrc, containing:
# Mouse Buttons "xvkbd -xsendevent -text "\[XF86Back]"" m:0x0 + b:8 "xvkbd -xsendevent -text "\[XF86Forward]"" m:0x0 + b:9
Now to test... Run the following command and if it works as expected remember to add xbindkeys to .xinitrc
or somewhere where it will be executed each time X starts. Also, this should work with Epiphany and Konqueror without any additional configuration or use of Imwheel.
xbindkeys
詳しい情報は Logitech MX1000 にあります。
xmodmap の調整
If you use .xinitrc to load X, then add this to .xinitrc
(change for the number of buttons you have):
xmodmap -e "pointer = 1 2 3 6 7 8 9 10 11 12 4 5" &
Note that buttons 4 and 5 must go on the end or else your scroll wheel will not work.
If you use GDM/XDM/KDM instead of .xinitrc, then create the file ~/.Xmodmap
and add this to it (change for the number of buttons you have):
pointer = 1 2 3 6 7 8 9 10 11 12 4 5
- GDM/XDM/KDM read the
~/.Xmodmap
file if it's present, whereasstartx
does not. Another solution would be to add this to your ~/.xinitrc:xmodmap -e $(cat ~/.Xmodmap)
. This would allow you to use *DM andstartx
while only having to edit~/.Xmodmap
when you need to make changes.
You may have to play with these numbers a bit to get your desired behavior. Some mice use buttons 6 and 7 for the scroll wheel, in which case those buttons would have to be the last numbers. Keep playing with it until it works!
You can also check to see which buttons are being read with a program called 'xev', which is part of XOrg. When xev is run, it will show a box on your desktop that you can put the cursor into and click buttons to find out what buttons have been mapped.
他の方法
The following methods use standard X.org mouse input driver (xf86-input-mouse) instead of using the evdev driver. It works on mice up to 7 buttons. Edit /etc/X11/xorg.conf
InputDevice section for your mouse to reflect the changes shown below. Then restart X and you are done.
IMPS/2
This has been tested on an IntelliMouse Explorer 3.0. Your mileage may vary, as this does not seem to work for all said mice.
Driver "mouse" Option "Protocol" "IMPS/2" Option "Device" "/dev/input/mice" Option "ZAxisMapping" "4 5 6 7"
ExplorerPS/2
This has been tested on a Logitech MX400 and MX518 and should work on any mx series mouse with up to 7 buttons.
Driver "mouse" Option "Protocol" "ExplorerPS/2" Option "Device" "/dev/input/mice" Option "Buttons" "7" Option "ZAxisMapping" "4 5" Option "ButtonMapping" "1 2 3 6 7"
Settings from above also works for Microsoft InteliMouse Explorer 3.0 that connects through USB.
Auto
This has been tested on a Logitech MX400 and should work on most mice with up to 7 buttons.
Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/input/mice" Option "Buttons" "7" Option "ZAxisMapping" "4 5" Option "ButtonMapping" "1 2 3 6 7"
This has been tested to work with Logitech MX1000.
Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/input/mice" Option "Emulate3Buttons" "no" Option "Buttons" "12" Option "ZAxisMapping" "4 5 7 6 8 9"
easystroke
easystroke は X11 用のジェスチャー認識アプリケーションです。
easystroke is a mouse gesture application, but it can be used to manage mouse buttons as well. It's main advantage o-ver btnx is that it's more versatile. On the other hand, it's user-based, so any user has to configure it to reflect his own needs.
In order to set up easystroke to manage your extra mouse buttons, you will need to do this (example features Back/Forward mouse buttons) : run:
easystroke -g
Go to Preferences tab > Additional buttons > Add, and add any special button.
Go to Action tab > Add action, give the new action a name, as Type choose "Key", as Details set "Alt+Left" for Back button, "Alt+Right" for Forward button, as Stroke click the proper mouse button (confirm if a warning is displayed), and voilà! Your mouse button is configured.
キーボードをマウスボタンにバインド
xvkbd と xbindkeys
Let us say we want to bind some mouse buttons to keyboard ones. The problem we will encounter is that we do not know how to emulate a key press. Here comes in handy xvkbd. We can use it along with xbindkeys.
$ xbindkeys --defaults >> ~/.xbindkeysrc $ xbindkeys
To restart xbindkeys type:
$ pkill -f xbindkeys $ xbindkeys
Here is example ~/.xbindkeysrc
config:
"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
If you want to check your mouse buttons number use xev. Do not forget to type capital letters in xvkbd -text usage and to escape opening bracket with \ or you get simply [Shift] written.
Here is an example for xbindkeys to enable x selection paste(third click pasting), you need both xsel and xvkbd installed, What it does it executes that command whenever button 13 of the mouse is pressed (in ~/.xbindkeysrc) :
"xvkbd -no-jump-pointer -text "\D1$(xsel)" 2>/dev/null" b:13
Why standard methods are not enough?
This will work great for X servers, but it seems not to work in some specific situations, like in Enemy Territory game. So I will describe a bit more advanced configuration, which work with my logitech G5 buttons - I can use all my 5 additional buttons along with 3 standard and a scroll, which gives overall 10 events to use in Enemy Territory. So here we go:
kbde
To emulate keystroke which will be later detected in Enemy Territory we need something more advanced than xvkbd. Here comes in handy kbde, but it does not exist in the AUR yet – we have got to compile it by ourselves. We need two programs: kbde and kbde-driver. Kbde website is located on sourceforge [1], check it for download, you need only kbde-driver. Apparently, it does not work for me without some hacking. Use your editor and add
#include <linux/version.h>
somewhere near other includes in the driver/kbde.c file. (OK, I'm not sure whether it is a proper way to compile it, but it works). Assuming that you have already done that try:
tar -zxvf kbde-driver-1* cd kbde-driver-1* make # if you do not have sudo just use su and type this as root sudo make install mknod modprobe kbde
and now you should have kbde working. If you want to use it as a non-root (yes, you want) change permissions, the quickest and dirtiest way is (note that I added my startup scripts at the end of this text):
chgrp users /dev/kbde chmod 220 /dev/kbde
If not try reading installation instructions on the site. Now we can use it to emulate keystrokes visible even in login shells:
kbde --press 5 --release 5 -b
this will press 5 for about three times. If you want to type a string using this, rather than this use --asci=STRING, as press sometimes generates 3 strokes before it is released.
evrouter
Now we need something which will work when Enemy Territory is loaded. Apparently, xbindkeys does not work here, so we need another program: evrouterAUR [2].
OK, so now we must have evdev and we can NOT use it in X, so here is how my example /etc/X11/xorg.conf
mouse section looks like:
Section "InputDevice" Identifier "Logitech G5" Driver "mouse" Option "Protocol" "Auto" Option "Device" "/dev/input/mouse1" # probably you will need here mouse0 Option "Name" "Logitech USB Gaming Mouse" Option "Buttons" "8" # set this to your number of buttons Option "ZAxisMapping" "4 5" EndSection
and now we have to restart the X server. You will run this as user, and event devices are owned by root, so you got to change the permissions at this point. Let us say we do it just like that, but I advise you to do this more carefully (note that I added my start-up scripts at the end of this text):
chgrp users /dev/input/event* chmod 660 /dev/input/event*
Now we can use the --dump
option to check what we will have to bind and to which device:
evrouter --dump /dev/input/event* # here click buttons you would like to bind
It will give you output similar to config. Here is my example config ~/.evrouterrc
with kbde usage:
"Logitech USB Gaming Mouse" "/dev/input/event.*" any key/278 "SHELL/kbde --press 2 --release 2 -b" "Logitech USB Gaming Mouse" "/dev/input/event.*" any key/279 "SHELL/kbde --press 3 --release 3 -b" "Logitech USB Gaming Mouse" "/dev/input/event.*" any key/274 "SHELL/kbde --press 4 --release 4 -b" "Logitech USB Gaming Mouse" "/dev/input/event.*" any key/277 "SHELL/kbde --press 5 --release 5 -b" "Logitech USB Gaming Mouse" "/dev/input/event.*" any key/276 "SHELL/kbde --press 6 --release 6 -b"
Same config using evrouters built in X11 key event emulator instead of kbde:
"Logitech USB Gaming Mouse" "/dev/input/event.*" any key/278 "XKey/2" "Logitech USB Gaming Mouse" "/dev/input/event.*" any key/278 "XKey/3" "Logitech USB Gaming Mouse" "/dev/input/event.*" any key/278 "XKey/4" "Logitech USB Gaming Mouse" "/dev/input/event.*" any key/278 "XKey/5" "Logitech USB Gaming Mouse" "/dev/input/event.*" any key/278 "XKey/6"
This works great, even in Enemy Territory. The "none" modifier means that I have to only press the button, other options are Ctrl+Alt
and so on. Here I use "any" because "none" means that after pressing Shift
, Ctrl
, or Alt
, our buttons would not work. Also note that it accepts regular expressions for mouse name and event path. Then, after setting up a config, run service with:
evrouter /dev/input/event* >> /dev/null
or change the event*
to a device corresponding to your mouse -- but be aware that the numbers are changing sometimes. It will work in background, while outputting some annoying messages, so we stream it to /dev/null
. If something went wrong, run it without streaming and check what it outputs. If you want to end it, you have to delete /tmp/evrouter.*
manually. Here is a script to kill evrouter:
#!/bin/bash evrouter -q rm -f /tmp/.evrouter*
and here is one to start it:
#!/bin/bash mydevicename="Logitech USB Gaming Mouse" device=$(evrouter -D /dev/input/event* | grep "$mydevicename") | cut -d ":" -f 2 evrouter $device > /dev/null
You have to edit the mydevicename
variable to its proper value (the one which is shown by evrouter -D
), or just change it to listen on all events by changing device var to /dev/input/event*
. OK, I have saved them in /usr/bin/
. Now, everything should be ready for use!
Logitech G5 マウスの + と - のバインド
If you want to bind the buttons +
and -
in G5/7 mouse, which normally changes DPI, you have to use g5hack
[3] released by a lomoco author.
wget http://piie.net/temp/g5_hiddev.c gcc -o g5hack g5_hiddev.c ./g5hack /dev/usb/hiddev0 3
This will change your DPI to 2000, light the 1st LED and disables DPI on-the-fly changing, so you can use it with evrouter. If you would use it frequently I suggest you to copy it to the /usr/bin
directory:
# cp g5hack /usr/bin/
If you want to bind your +
and -
buttons you must copy the line at the bottom (one with the comment '"-" button does not function anymore' above) to the mode you will be using, like, for example, under the "case 3:" you can put it on the line with the comment 'turn on third led' above (deleting the old one before of course).
For the newest G5 mouse which is reported as "product 0xc049" original hack does not work. You have to simply change the #define MOUSE_G5 0xc041
to #define MOUSE_G5 0xc049
and recompile.
ユーザーツール
imwheelAUR provides configurable mouse wheel and button mapping. It can be configured globally or for individual processes.
Sample ~/.imwheelrc
to enable back/forward thumb buttons for all applications and increased scroll speed in Chromium:
"^chromium$" None, Up, Button4, 3 None, Down, Button5, 3
".*" None, Thumb1, Alt_L|Left None, Thumb2, Alt_L|Right
lomoco for Logitech MX mice will help you set the proper resolution, enable or disable smart scroll (with boot time support too!), etc. lomoco is available from the [community]
repository and can be installed with the following command:
Be sure to look at /etc/udev/lomoco_mouse.conf
and set up the the options you want to be automatically applied when the mouse gets loaded by udev.
デバイスごとの設定ファイル
Logitech G600
It is known that in xorg-server 1.18.0-3 side buttons of G600 are not recognized as a separate keyboard device, but another mouse which causes strange (moving mouse cursor to an edge of screen when one of main mouse buttons are clicked) behavior.
To force xorg to recognize them as a keyboard buttons, add following section to your /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 Mouse
Mad Catz Mouse を見て下さい。
Logitech M560/M545/M546
These mouse is designed for Windows 8, and has a non conventional behavior: the mouse appears as a pair of mouse and keyboard and some buttons don't emit the standard mouse button event, but instead a combination of keyboard and mouse button. This prevent a "confortable" use of this mouse under Linux.
ドライバーを使うことで通常のマウスのように使うことができます:
M560 のカーネルモジュール (カーネル v4.2 でマージされています), M545/M546 のカーネルモジュール
xbindkeys でボタンをマッピングすることを推奨します。