2012年10月20日

Ubuntuで速すぎる!ピュンピュン飛んでいくマウスのポインタ速度(感度)をより細かく調整する方法

100円ショップのダイソーで300円マウスが売っているってご存知でしょうか? 重量、クリック感も軽く結構な出来なんですが、Ubuntuに接続すると感度(加速)が良すぎて使い辛い...orz。

もう・・・イヤァァァァァァァ!、と叫び机の中にしまい込んでいたのですが、今日はこのマウスを復活させてみようかと思います。 
 
speed

標準の設定ツールでは速すぎて使えないダイソーの300円マウス


妻の買い物に付き合ったダイソーで発見した300円のマウス。 これが重さもクリック感も軽いし、金額も安いしで久しぶりにダイソーでいいもの見つけた!と喜んでいたのですが Ubuntu へ接続して使ってみると少し指が触れた程度で「全身性感帯かよ!」と思わせるほどの感度でポインタがピュンピュン飛んでいきます。

mouse2
 

マウス設定で加速を最低に設定してもまだまだ早い!

mouse1


この時点でそっとマウスを置き、手を合わせて神棚にしまい存在したこと自体を忘れることにしたのです。


xinputを使ってマウスの速度(感度)をより細かく調整する


しかし、使わないのは勿体ない。。ずーと頭の隅で気になっていたんですが、実はシステム設定で変更できる速度以外にもxinputというコマンドでより細かく感度を変更できるんです。

まずは、端末(ターミナル)を開いて xinput list (xinput だけでも OK)と入力します。

$ xinput 
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   → Virtual core XTEST pointer         id=4	[slave  pointer  (2)]
⎜   → CyPS/2 Cypress Trackpad          id=13	[slave  pointer  (2)]
⎜   →  USB OPTICAL MOUSE              id=11	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    → Virtual core XTEST keyboard   id=5	[slave  keyboard (3)]
    → Power Button                            	id=6	[slave  keyboard (3)]
    → Video Bus                               	id=7	[slave  keyboard (3)]
    → Power Button                            	id=8	[slave  keyboard (3)]
    → Sleep Button                            	id=9	[slave  keyboard (3)]
    → Laptop_Integrated_Webcam_1.3M    id=10	[slave  keyboard (3)]
    → AT Translated Set 2 keyboard         id=12	[slave  keyboard (3)]
    → Dell WMI hotkeys                        	id=14	[slave  keyboard (3)]


するとデスクトップ(x)で利用できる入力(input)デバイスが表示されます。

ダイソーのじゃじゃ馬マウスは「USB OPTICAL MOUSE」(id は 11)と表示されていますね。

感度を変更する場合は、「xinput --set-prop "名称又はid" "Device Accel Constant Deceleration" ”感度を表す数値(大きいほど遅くなる)”」と入力します。

最初は2前後(1.5〜2.5)で設定するのが良いんじゃないでしょうか。僕は次の通り入力。

$ xinput --set-prop " USB OPTICAL MOUSE" "Device Accel Constant Deceleration" 2
※ ” USB OPTICAL MOUSE”はこの例では11でもOK。


すると・・・イイネ!

こんな便利なコマンドがあったなんて・・・感謝の気持ちを込めて再び神棚に手を合わせます。


マウスをUSB接続した際に自動で設定値を反映させる方法


都度 xinput コマンドを実行するのも手間ですし、なんとか自動化したいですよね。自動化には2つの方法があります。

まずは、ログイン時に自動実行するコマンドとして設定する方法です。

こんな内容のシェルを用意して、

#!/bin/sh

xinput --set-prop " USB OPTICAL MOUSE" "Device Accel Constant Deceleration" 2


自動開始アプリケーションとして登録しておく方法。

tpad-ubuntu-settings2


これでログイン時にマウスが接続されていれば、変更が反映されます。

しかし、この方法には問題もあります。マウスを抜き差しすると元の全身性感帯(しつこい)・暴走マウスに戻ります。

うーん、ノート PC だとマウスって途中から差すことも、あるいは別のマウスを使うこともあるので少し面倒ですね。

こういう場合は USB 接続機器を管理するudevにルールとして登録する方法もあります。

まずは、80〜90ぐらいで始まる *.rules というファイルを /etc/udev/rules.d/ の下に作成します。

$ sudo vi /etc/udev/rules.d/90-usb_optical_mouse.rules


中身はこちら。

ACTION=="add", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", ENV{ID_BUS}=="usb", ENV{ID_VENDOR}=="15d9", RUN+="/bin/sh -c '/usr/bin/mymouse.sh netbuffalo &'"

#ACTION=="remove", SUBSYSTEM=="input", ENV{ID_INPUT_MOUSE}=="1", ENV{ID_BUS}=="usb", ENV{ID_VENDOR}=="15d9", RUN+="/bin/sh -c 'echo removed!'"


接続(add)、切断(remove)アクションが発生した際にイベント駆動でRUNで定義したコマンドを実行できるんです。

SUBSYSTEM、ENVの値はUSB機器を特定する為の条件。USB接続した機器や別メーカーのマウスに何に反応する必要はないですからね。

この条件値は次のコマンドで確認できます。

$ sudo udevadm info --query=all --name=/dev/input/mouse1(通常ノート PC の mouse は mouse1。mouse0 はタッチパッド)

P: /devices/pci0000:00/0000:00:1c.3/0000:03:00.0/usb3/3-1/3-1:1.0/input/input13/mouse1
N: input/mouse1
E: DEVNAME=/dev/input/mouse1
- snip -
E: ID_BUS=usb
E: ID_INPUT=1
E: ID_INPUT_MOUSE=1
E: ID_MODEL=USB_OPTICAL_MOUSE
E: ID_MODEL_ENC=\x20USB\x20OPTICAL\x20MOUSE
E: ID_MODEL_ID=0a4c
E: ID_PATH=pci-0000:03:00.0-usb-0:1:1.0
E: ID_PATH_TAG=pci-0000_03_00_0-usb-0_1_1_0
E: ID_REVISION=0100
E: ID_SERIAL=15d9_USB_OPTICAL_MOUSE
- snip -
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=15d9
- snip -
E: SUBSYSTEM=input


ここで指定したID_INPUT_MOUSE、ID_BUSは誰でも同じだと思いますが、僕が暴走マウスの指定に使ったID_VENDORの値はお使いの機器によって変わるので注意して下さいね。

最後にRUNで指定するコマンドですが、変更用のシェル・ファイルを用意します。

$ sudo vi /usr/bin/mymouse.sh


このシェルは引数でユーザ名(僕のアカウントはnetbuffalo)を受け取り、ユーザのデスクトップ(X)の環境変数を設定後、同じくマウスの速度(感度)を変更しています。

#!/bin/sh

TARGET_USER=$1

sleep 0.1

export DISPLAY=:0.0
export XAUTHORITY=/home/$TARGET_USER/.Xauthority

# debug
#/usr/bin/xinput list > /tmp/xinput.txt

xinput --set-prop " USB OPTICAL MOUSE" "Device Accel Constant Deceleration" 2


0.1秒ほど sleep するのは呼び出された時点ではUSB機器(マウス)が完全には認識(id など)されていない為。

このシェルを udev の RUN で定義しているわけです。

用意できたら、シェルに実行権を付けて、udev のルールを再読み込みします。

$ sudo chmod 755 /usr/bin/mymouse.sh
$ sudo udevadm --debug control --reload-rules


さあ、どうでしょう?、抜き差しても都度おとなしいマウスになりますよね?

それでは、より良いマウス・ライフを!


それでもあきらめない ハーバードが私に教えてくれたこと
林 英恵 
あさ出版 
売り上げランキング: 10687

日本トラストテクノロジー 外付バッテリー Energizer XP18000 XP18000
日本トラストテクノロジー (2010-06-07)
売り上げランキング: 10173

Posted by netbuffalo at 14:51│Comments(2)TrackBack(0)Linux | モバイルデバイス


この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/netbuffalo/4235715
この記事へのコメント
このページは詳しい情報をかいているので、必要な人にとっては有用なページだとおもわれます。しかし、問題の根本原因はダイソーの300円マウスではありません。Ubuntu 自体の仕様不具合が直接の原因です。それは「Ubuntu マウス 速すぎる」などのキーワードで検索すれば理解できます。

ダイソーは安い商品を提供しているものの、粗悪な商品を売らないように全力で企業努力をしている立派な店です。そこで売られているマウスも高級品に引けをとらない品質です。「ダイソーだから、安いから悪いに決まっている」という先入観を持たないでいただきたいのです。そして、ダイソーで日々 努力している従業員の苦労を理解してあげてください。よろしく お願い致します。
Posted by aaaa at 2013年08月10日 09:22
aaaaさん

悲しい思いをさせてしまったようですみませんでした。

決してダイソーを貶めるようなつもりは無く、何処で買ったものでも同じ結果になれば事実を書いています。
ダイソーは高級(?)とは違いますが、価格相応の良い物だと思います。
購入したマウスは少し軽すぎる割にセンサーが敏感なようで、どのOSでも速い動きになると思います。

ご意見本当にありがとうございました。
Posted by netbuffalo(管理者) at 2013年08月10日 17:38

コメントする

名前
URL
 
  絵文字