NoureaのLinux日記

Linux関連の事でもぼちぼちと。Windowsの話題のほうが多いかも。

evdev driver

2006-05-01 12:14:51 | Linux
最終更新 2006.08.13

注意)XOrg6.9以上+X11-driver-evdevが入ってる人のみ動作

ロジクールのMX1000マウスを使っているんだけど
デフォルトの設定だと水平スクロールボタンは認識されてなかったりする。
しかし、evdevというドライバを使うと、水平スクロールボタンが認識されるようだ。

というわけで、evdevを使うべく
/etc/X11/xorg.conf の Section "InputDevice" ~ EndSection間の
Driver "mouse" って所を Driver "evdev" に置き換えて
それに合わせてその辺りをいじくって保存してXを再起動しようとした所…

画面が真っ暗なまま反応が無くなりました。
エラーメッセージも出ません。
コンソール画面すら出ません。

何とか原因判明。
/dev/input/ 以下に event0 event1 event2 とかevent系のデバイスが複数あった時、
間違った所を指定すると(event2がマウスのイベントなのにキーボードのevent0とかを指定してしまった場合)Xが無反応になるみたいです。

せっかくなのでうまくいった環境を晒します。
ちなみに下の空白の所には全角スペースを使っていたりするので注意。

 Section "InputDevice"
  Driver "evdev"
  Identifier "Mouse[1]"
  Option "Device" "/dev/input/by-id/usb-Logitech_USB_RECEIVER-event-mouse"
 EndSection

SUSEにしたら、/dev/input以下にby-idというディレクトリが追加されていて、
マウスへのリンクが作られてました。
そういうのが無かった人は、/dev/input/にある
event0 とか event1 とかからマウスに該当するのを選んで指定してね。
※上にも書いたけど設定を間違えるとかなり危険だから注意
複数ある時はどれがマウスのイベントなのかがわかってから設定したほうが無難です。

  と言ってもどれがマウスのイベントかわからないかもしれません。
  確認するには、evtest.cというソースをダウンロードもしくは内容をevtest.cにコピペして、
  コンパイル($ gcc evtest.c -o evtest)して、
  # evtest /dev/input/event1 とかやるとどれがマウスのイベントかがわかるみたい。
  既にプロジェクト(aiptektablet)の最新のソースからは削除されているので注意。

あと、『Identifier』の行は上の"Mouse[1]"とかと違うかもしれないけど、絶対に変更しないように。

次に、Section "ServerLayout" ~ EndSection 間にある
InputDevice のマウスの Identifierを指している所の後ろに "CorePointer" を追加する。
つまり、

 Section "ServerLayout"
  Identifier "Mouse[1]" "CorePointer"
  ...
  ...
  ...
 EndSection

こんな感じ。
ここでは表示の都合上全角スペースをつかっていたりするので気を付けて。
これがないとマウスが動かなかったりするので注意。

※2個目のマウスだったりした場合には、"CorePointer"の代わりに "SendCoreEvents" と記述するらしい。

できたら保存してください。

次にXを再起動します。最悪の場合Xが起動しなくなるので要注意。
心配な人は復旧の為にKNOPPIXとかを準備しておくのもいいかもしれない。
心の準備ができた人は『Ctrl+Alt+BackSpace』を。Xが再起動します。
普通にログイン画面とかが表示されてて、マウスが動いてたら成功。
もう一度ログインしましょう。
で、ログインしたら何かマウスのクリックの動作が変かもしれません。
右クリックしたらホイールクリックの動作だとかそんな感じに。
その時はコンソールから『xev』を起動して、ボタンをチェックしながら
~/.Xmodmap に "pointer" 行を作成して調整して、Xを再起動しましょう。(こっちはまず安全。)
書き方の例としては、

 ! pointer config
 pointer = 1 3 2 4 5 6 7 8 9

こんな感じ。コメントは行頭に『!』マーク。
ここでは表示の都合上全角スペースをつかっていたりするので注意。

すぐ変更したい人は、$ xmodmap -e "pointer = 1 2 3 4 ...12" とかやればOK。
ただし、こっちは再起動したら元に戻ってしまいます。
確認しながらの調整はこっちのやり方のほうが普通かもしれない。

.Xmodmap / xmodmap -e "pointer =..." のどちらにしても
認識したボタンをすべて割り当てないとエラーとして無視されます。

 xmodmap: commandline:1: bad number of buttons, must have 20 instead of 2
 xmodmap: 1 error encountered, aborting.

このようなエラーが出た場合は、 ...must have...の数字(ここでは20)のぶん、すべて記述して下さい。
具体的に言うと、

 xmodmap -e "pointer = 1 2 3 4 5 7 6 8 9 10 11 12 13 14 15 16 17 18 19 20"

こんな感じです。番号はこれと同じではなく自分の変更したいように記述してくださいね。

合わせる時の目安
1 : 左
2 : 中
3 : 右
4 : 中スクロール上
5 : 中スクロール下
6 : 戻る
7 : 進む
//ここまでできてればまずOK。後は自分の好きな順番に設定する
8 : 中スクロール左
9 : 中スクロール右
10 : サイド中
11 : 上スクロール
12 : 下スクロール

※KDEの場合は水平スクロールのボタンを6と7に設定すればそのように動くので
チルトな機能を使いたい人はそういう設定をするといいかも。
その代わり、GTKなFirefoxだと6,7ボタンに戻る/進むが割り振られているので
判断が難しい所。
もしかしたらどっちにも都合のいい設定があるのかもしれないけれど、
今の所は不明です。

付録
デフォルトのIdentifier(環境によって違うかも)
 SUSE Linux
  Identifier "Mouse[0]"
 Ubuntu Linux
  Identifier "Configured Mouse"
 Fedora Core
  忘れました。

Identifier の文字を変えたい人は、
"ServerLayout" の該当行と一緒に書き換えれば大丈夫だったと思うけど
非常に危険なので試さないほうがいいかも

ちなみに、ここに書いてあることは自己責任ってことでよろしく。

コメントを投稿