2006年11月8日水曜日

(FreeBSD) USB日本語106/109キーボードでアンダースコア(_)が入力できない

たぶん、FreeBSD 6.1-RELEASEからそうなったと思うのですが、USB接続の日本語106/109キーボードの場合、コンソール(黒地に白文字の画面。syscons)上で、アンダースコア「_」が入力できない、という問題があります。



今日、新しいパソコンで、イロイロなお仕事の環境をセットアップしていたのですが、FreeBSD 6.2-BETA2をインストールしているときに、思い出しました。何しろ、

pkg_add ほにゃらら」とコマンドを入力しようと思ったら、“_”を入力できない

んですから・・・



ちなみに、コンソールではなくて、X Window System上でも、アンダースコアが入力できない問題がありましたが、それはもう何年も前からあったものだと思います。xevで原因を確認後、即、xmodmapで対処してたので、すっかり忘れていました。



今回ここで言っている問題は、Xとは別です。



コンソールでアンダースコアが入力できない問題の原因は、kbdmuxというデバイスドライバです。kbdmuxは、PS2キーボードとかUSBキーボードとかの違いを気にせずにすむように、パソコンに複数のキーボードをつないだとき、とりあえずどれでもそれなりに使えるぞ、というようにしてくれる、仮想的なキーボードデバイスです(ごくまれに便利なことがあります)。ただ、一部のキーコードの処理が抜けていて、日本語キーボードの場合、アンダースコアのキーの処理が抜けてしまっています。



これって、

FreeBSDで、USB接続の日本語キーボードなんか、使っている人はいない

ってことなんですかねぇ・・・



■ 対処方法



本当の治療方法としては、kbdmuxを修正することなのですが・・・



とりあえず、kbdmuxを使うのをやめれば、今までどおり、アンダースコアが入力できるようになります。



■ boot menuでkbdmuxを無効にする



6.2-BETA2のインストールCDでインストールした後、/boot/beastie.4thを眺めていて気がついたのですが、どうやら、ブート時のメニューで「3. Boot FreeBSD in Safe Mode」を選ぶと、kbdmuxが無効にされるようです。



Fbsdkbdmux1



● Safe Modeのとき



Fbsdkbdmux3



Fbsdkbdmux4
備考: atkbd(=PS/2キーボード)と表示されているのは、VMwareのFreeBSDでキャプチャしたからです。USBキーボードなら、ukbdとかなるはずです。



● Safe Modeではないとき・・・kbdmuxが現れた



Fbsdkbdmux2



■ 常時、kbdmuxを無効にする



「man kbdmux」してみたところ、常にkbdmuxを無効にするには、/boot/device.hints

hint.kbdmux.0.disabled="1"

と書いておけばよさそうです。



ところで、device.hintsって、書き換えていいファイルなのかな?(カーネルをインストールするときに上書きされるんじゃないの?)と思って、よくよく考えてみたら、/boot/loader.conf

hint.kbdmux.0.disabled="1"

と書けばよかったのでした。



☆ ☆ ☆ ☆ ☆ ☆ 



6.1-RELEASEのころは、kbdmuxが原因だとわかったら、kbdmuxを抜いたカーネルを作って、カーネルを入れ替えてしまいました。そのため、6.1Rでも、上記のような方法で対応できるかどうかわかりません。



問題がおきるのは、keymapがjp.106.kbdだからなのであり、英語配列にしてしまう、という荒療治もあるかと・・・たとえば

kbdcontrol -l us.iso

のように・・・ (キートップを見ずに、どれがどのキーなのかわかる人向け)


(2008-01-15 追記)
今日、FreeBSD 7.0-RC1をインストールしたんですが、そういえばこの日本語USBキーボードのアンダースコア問題ってどうなったんだっけ?と思い出して、ソースコードをのぞいてみたのですが(笑)、どうやら直ってるみたいです。
2007年7月に修正されたらしくて、それ以降の6-STABLE、7-CURRENT(今はもう7-STABLE)では直ってると思われます。
・・・というわけで、もうすぐ出るはず(?)の7.0-RELEASEと6.3-RELEASEでは、この問題はないはずです。



ところで、FreeBSD7.0では、マルチプロセッサ環境での性能が飛躍的に向上するらしいのですが・・・
実は私はぜんぜん知らなかったのですが、情報をよくよく調べてみると、6.2-RELEASEのときに、CPUが8コアな環境(4コアCPUが2個)にて、まったく性能がでないよっ!!問題ってのがあって、8個もプロセッサがあるのに、4個だけのマシンより性能が低くなる、という問題が発生していたそうです。その後、いろいろ修正がされて、とくにスケジューラにSCHE_ULEを使うと、とってもよくなった、とか。



でも、apache httpdとphpなどを使ったベンチマークテストの結果ではLinuxのほうがまだスループットが高いぞ、みたいな話を先月くらいに見ました。う~ん・・・



「FreeBSDで不満なら、CentOSを使えばいいじゃない」



なんてことは言いませんけど。









■ 関連記事





5 件のコメント:

  1. 多分このパッチで解決すると思います。
    http://lists.freebsd.org/pipermail/freebsd-stable/2006-May/025532.html

    返信削除
  2. 情報提供いただき、ありがとうございます。
    というわけで、カーネルにパッチをあてて直すまでの間、応急処置として、kbdmuxをdisableするというは、いかがでしょうかね。
    ところで、kbdmuxを使うと、PS2キーボードとUSBキーボードの両方とも同時に使えるようになるのですが、これで何が便利かな、って考えると、新人さんとベテランさんの二人で、1台のパソコンを使って、何かを教えるようなとき(ペア・プログラミングとか?)、いいんじゃないかなと。
    ちなみに、マウスは、以前からmousedを使ってれば、複数個つなげてもOKだったと思います。

    返信削除
  3. 6.2-RELEASEで、PS2キーボードでも同じ症状が出て困っていたので検索してたどり着きました。
    6.2でもloader.confへの記述でkbdmuxをdisableするとアンスコが使えるようになりました。ありがとうございました。

    返信削除
  4. こんにちは。
    Googleでたどりついていまさらコメントしてよいのだろうか……(^^;
    6.1-RELEASEのときにこの症状が発症し、お世話になりました。ありがとうございました。
    しかし、7.0-RELEASE/etc/X11/xorg.conf のインプットデバイスセクションにおいて
    "ctrl:swapcaps"を指定すると、またアンダースコアが打てなくなりましたね……
    困ったものです。
    またxmodmapのお世話に……
    これからもサイトの運営を頑張ってくださいね。

    返信削除
  5. 本文ではあまり触れなかった、X Window System上でも、アンダースコアを入力できない場合ですが、私もxmodmapで対応させてます。
    ただ奇妙なことに、xorgのバージョンが進むにつれて、keycodeがたまに変化してるみたいです。
    私のxmodmapの定義ファイルには、こんなことが書いてありました。
    ! [\,_,RO] key sometimes not work
    !keycode 123 = backslash underscore kana_RO
    !keycode 228 = backslash underscore kana_RO
    keycode 151 = backslash underscore kana_RO
    何かと問題のあるアンダースコアのキーです。なぜこんな問題がおきるのか、私が勝手に思ってる原因なんでが、この右下の位置のキーは、
     ・ 日本語配列のキーボードだけにあって
     ・ 英語配列のキーボードにはない
    ってことじゃないかな?と。
    Windows XPなどに最初からインストールされているゲーム「Windows 3Dピンボール」では(Windows95のときは、市販されていたPlus!に付属だったっけ?)、右側のフリッパーを動かすキーが、「/」(スラッシュ)になっていて、このキーは、端から2番目と、なんか微妙な位置にあるんです。でも、これは英語配列のキーボードだと、スラッシュは端のキーなんですよね。

    返信削除