blog > 2005年07月10日 > Linux: 2.6 Input Drivers FAQ

#blognavi
Linux Kernel Mailing List に Vojtech Pavlik 氏が 2.6 Input Drivers FAQ という有用な記事を投稿しています。例のごとく、kerneltrap で知りました。

興味深かったので、いい加減な翻訳をしてみました。

Kernel 2.6 のインプットドライバについての、よくある問題とその解決方法:

●問題:
私のシステムのインプットディバイスの一覧はどのようにしたら得られるの? また、インプットドライバがディバイスを正しく発見したことを確認する方法は?

●解決方法
'cat /proc/bus/input/devices' と 'dmesg' で分かる。 'cat /proc/bus/input/devices' では、インプットコアである全ディバイスが得られる 'dmesg' では、起動時のメッセージが得られる。これらから、プローブプロセス中に発生したエラーを見つけることができる。

●問題:
クリックを一回しかしていないのに、ダブルクリックだと見なされる。スクロールホイールが期待する倍の量をスクロールしてしまう。マウスの動きがとても速い。

●解決方法
XFree86 の設定を見直そう。

Kernel 2.4 で PS/2 と USB の両方が動作するようにと、 /dev/psaux と /dev/input/mice の二つのマウスエントリを記述しているのだろう。

しかし、この記述のままだと、Kernel 2.6 は PS/2 と USB の両方でインプットサブシステムを使うようになっていて、両方のディバイスは両方のマウスからのイベントを受け取ることになる。その結果、倍のイベントとなってしまうのだ。

よって、/dev/psaux か /dev/input/mice のどちらかのエントリを削るとよい。どちらを削るかは、2.4 に戻ったときのあなたの都合に会わせて良いだろう。

●問題:
マウスホイールがXでは動作しない。 Logitech (MousManPS/2) mouse がXで動かなくなる。拡張ボタンがXで動作しない。

●解決方法
XFree86 の設定を見直そう。

マウスプロトコルを "ExplorerPS/2" にするべし。 実際のマウスタイプとは関わり無く、アプリケーションに対して Kernel 2.6 が渡すのは、 "ExplorerPS/2" なのだ。

"ZAxisMapping 4 5" エントリは記述した?

5以上の拡張ボタンのリマップエンントは記述した?

●問題:
Kernel が以下のメッセージを返して来ます。

atkbd.c: Unknown key released (translated set 2, code 0x7a on isa0060/serio0).
atkbd.c: This is an XFree86 bug. It shouldn't access hardware directly.

●解決方法
うーん、Kernel の言うとおりなんだけど。XFree86 はその起動時に、大胆にもキーボードコントローラーレジスタにアクセスする。これはあんまり行儀が良いものではなく、Kernel も同時にこれらのレジスタを使うわけだから競合してしまうのだ。Kernel はこうした事態を見つけだして苦情を述べてくるんだ。まぁ、ほとんどの場合、この問題の影響を受けることは無いのだけど。

まぁだから、あなたか XFree86 開発者で X を直せるのでなければ、このメッセージは無視しておいて良い。

●問題:
上述のメッセージが出るのですが、私はXを起動してはいないのです。

●解決方法
他のアプリケーション (たとえば kbdrate) もまた、キーボードコントローラにアクセス出来るんだ。だからそれらのアプリケーションが、同様のメッセージを出現させることになるかも知れない。

そのアプリケーション/ユーティリティを直すか、そのメッセージを無視するのが良い。

●問題:
マルティメディア キー が全く動作しないのです。そのかわり次のようなメッセージが出ます:

atkbd.c: Unknown key pressed (translated set 2, code 0x83 on isa0060/serio0).
atkbd.c: Use 'setkeycodes e003 ' to make it known.
atkbd.c: Unknown key released (translated set 2, code 0x83 on isa0060/serio0).
atkbd.c: Use 'setkeycodes e003 ' to make it known.

●解決法
Kernel の言うとおりにやってみよう。setkeycodes ユーティリティーを使って、指示されたスキャンコード値をセットしてみよう。すべての定義済み Linux キーコードは、/usr/include/linux/input.h に記述されているので、これを見ると良い。

そして、次のように evtest プログラムを使って、キーボードが正しく動作するのか確認することもできる。

evtest /dev/input/event#

# の部分は、あなたが使っているキーボードのインプットディバイスのナンバーが入る。

●問題:
上述の127 キーコードで、setkeycodes が動作しないんですけど。

●解決方法
最新の kbd-utils を入手して、2.6 環境で再コンパイルするとよい。

●問題:
evtest ですべて正しいと表示されるのですが、これらのキーを XFree86 の keysyms (システム固有のXのキーシンボル) に割り当てたつもりが、正しく割り当てられないのです。

●解決法
Kernel 2.6 は出来る限り 「標準」スキャンコードを使おうとしますが、それでもすべてのキーに対しては不可能なことです。

良い解決方法は、'showkeys -s'で得られるスキャンコードに一致するように、XKB キーボード定義を変更することです。上述の問題を解決した後であれば、evtest のとおりにキーが動作することでしょう。

もう少しましな解決は、ハードウェアへの依存をなくし、あらゆるタイプのキーボードでスキャンコードが同じになるように、Kernel-2.6 のキーボード定義を書き直すことでしょう。これはハードウェアアブストラクションといわれる手法です。

完璧な解決方法は、イベントプロトコルを利用するXを使うことです。もしあなたが、XFree86 の開発者なら、このアイデアを考慮すべきだ。

●問題:
2.6 になってから、PC スピーカが鳴らないのです。

●解決方法
Kernel config で有効にしなさい。 その設定場所は、Drivers->Input->Misc->PC Speaker にある。

●問題:
Synaptics touchpad が tap-to-click, scroll, その他の機能を失ったみたいなのですが。

●解決方法
簡単な解決方法は、kernel コマンドラインで、psmouse.proto=imps を渡すか、psmouse module コマンドラインで proto=imps を渡すことです。これによって、2.4 の動作に戻る。

より良い解決方法は、新しい XFree86 Synaptics driver をダウンロードすることだ。このドライバは、インプットドライバとうまく連携する。


このドライバでは、タッチパッドの動作を詳細に設定できるし、すべての機能を提供している。

この場合、あなたはコンソールでも使いたいだろうね。そんな場合は、GPMをアップデートすると良い。


●問題:
KVM で切り替えると、PS/2 マウスが暴走するんだけど。

●解決方法
kernel コマンドラインで psmouse.proto=bare を渡すか、psmouse module コマンドラインで proto=bare を渡しなさい。

●問題:
以下のメッセージが出ます。

psmouse.c: PS/2 mouse at serio0 lost synchronization, throwing 2 bytes away.

●解決方法
マウスケーブルをチェックしてみるように。特定のやり方でマウスを動かしたときだけ、このメッセージが出現するのなら、マウスケーブルを直すか、マウスを交換すると良い。

Kernel とハードディスク設定をチェックするように。このメッセージはまた、マウス割り込みが0.5秒以上遅延すると発生する。ハードディスクドライブとCD- ROMドライブのDMAが有効になっているか確認すること。ACPI/APM バッテリモニタを停止してみよう。ACPI やCPU動作周波数の自動スケーリング機能も止めてみよう。周波数スケーリングのせいで信用できない場合があるので、CPUスケーリングを止めて内蔵時計の動作が正しくなるようにしてみよう。ACPI PM Timer をクロックソースにしている場合、上述の問題を引き起こすことがあるのだ。

●問題:
キーボードのオートリピートが Kernel 2.5 シリーズのときに比べどうもトロイ。

●解決方法
Kernel コマンドラインで atkbd.softrepeat=1 を渡すか、atkbd module コマンドラインで "softrepeat=1" を渡すと良い。これはカーネル内部のリピート生成機能を有効にする。これは、キーボード自体するのよりも、より柔軟でより高いキーリピートレートやより短いリピートディレイを発生させられる。

●問題:
atkbd.softrepeat を使うと、kbdrate が動かない。

●解決方法
最新の kbd-utilsを入手して、2.6環境で再コンパイルしなさい。

●問題:
全部読んだけど、役に立たないよ!

●解決方法
そもそも君が問題を抱えていなければ役に立ちようもない。あるいは、君が問題を抱えていても、それが稀な事象であればここにはリストされていない。ドライバの開発者やメンンテナやLKMLにコンタクトを取ってみてくれ。Linux kernel bugzilla に問題を入力してくれても良い。



カテゴリ: [linux] - &trackback() - 2005年07月10日 15:25:49

#blognavi
最終更新:2005年07月10日 15:27