WaterMind PC Blog

PCとネットワークに関するニュースコラム.

コンパクト・メカニカルキーボード SMK-90JPU(PRO)試用レポート3 - キーカスタマイズ編

2005-04-11 16:35:45 | ハードウエア
 今回は先日掲載した記事,コンパクトタイプのメカニカルスイッチ採用キーボード,Strong Man(SMK)SMK-90JPU(PRO)の試用レポートの第3弾だ.前回,SMK-90JPU(PRO)には,双子のようにそっくりな異母兄弟(SIGMA(Cool Builders)CBMK90IV)がいることをお伝えした.この2つの製品は,見た目には,全く同じだが,採用されているキースイッチ,キー配列,PCとの接続方法,さらには価格に違いがある.この比較の中で,SMK-90JPU(PRO)のキー配列(特にBSキーの横のスリープキー)の問題が,CBMK90IVにはないことを指摘した.

 その後,記事についた某M氏のコメントなどに喚起されて,キーカスタマイズソフトにより,SMK-90JPU(PRO)のキー配列を,CBMK90IV化することを思い立った.今回の第3弾は,SMK-90JPU(PRO)のキーカスタマイズについて,レポートする.

 まず手始めに簡単に,キーカスタマイズ・ソフトについて触れておこう.キーカスタマイズ・ソフトは,特殊なキーボード・デバイスドライバを含むソフトで,キーの配列を自由に再配置できるソフトのことだ.コンパクトキーボードなどを使用する場合や,Ctrlキーをよく使用するユーザーが「左CtrlキーとCapdLockキーを入れ替えたい」場合などによく用いられる.

 フリーのキーカスタマイズ・ソフトとしては,シェアウエアからフリーウエアに替わった「猫まねき」と,オープンソースの「窓使いの憂鬱」などが代表格となっている.この両者にはそれぞれ特徴があり,どちらが適切かどうかは,ユーザ毎に異なると思う.

 「猫まねき」は,基本的にはPS2キーボード専用のキーカスタマイズソフトだ.USBキーボードに対しては使用出来ないものの,GUIで簡単にキーカスタマイズができる.先ほど述べた「左CtrlキーとCapsキーを入れ替え」については,既にオプションとして準備されており,チェックボックスにチェックを入れるだけで実現可能だ.その他の代表的なキーの入れ替えについても,同様にオプションで設定できる.さらには,「テキスト入力代行」機能を持ち,この機能を使えば,いわゆる「定型文」を設定して,簡単な操作で入力することができる.

 これに対して,「窓使いの憂鬱」は,(Linux風に)キー配列定義ファイルをテキストエディタで編集して,キー配列を再定義するが,非常に柔軟な設定ができるのが特徴だ.例えば,Ctrlキーなどのモディファイヤキーを定義できたり,1つのキー押しで,2つキーを続けて押したように定義することができる.さらに最新版では,USBキーボードにも対応した.ただし,現在正式公開されているバージョン3.28は,WindowsXPに正式対応しておらず,私の環境では,途中でキー入力ができなくなるなどの不具合がでた.バージョン3.29以降にWindowsXPに正式対応したようだが,不具合があり公開停止となり,現在テスト版置き場に置かれている.事情はわからないが,すでにバージョン3.30の開発が進んでいるようで,最新版のスナップショットの日付は,2005年4月8日になっており,複雑な様相を見せている.

 「窓使いの憂鬱」の最新2chスレ「窓使いの憂鬱 4」の2004年6月4日付テンプレによれば

Q. 最新版を探してるんだけど、公式サイトに行っても3.28しかないけど?
A. XP正式対応バージョンである3.29を公開したところ、
3.28で正常動作していた人でうまく動かなくなった人がいたので公開停止にした。
が、3.29で正常動作している人もたくさんいる。ちなみに3.29の場所は
http://mayu.sourceforge.net/test/

Q. で、結局どのバージョンを入れればいい?
A. 的確に答えられる人はいない。参考までに、前スレ746さんの書き込み。
> XPで使う場合、mayu-3.29-nt.exe + mayud_1_13.sysで不具合無ければOK.で、
> 不具合が出たらmayu-3.29-nt.exe付属のmayud.sysに戻す、
> それでも駄目なら諦める、って事っぽい。
とのこと.なおバージョン3.30から「Windows9x/Me/NT4.0 非対応」になったので注意.

 ということで,代表的なソフト2つを試用してみたのだが,本格的な機能を持つ「窓使いの憂鬱」については,本当に憂鬱になりそうな気がしたので,とりあえず「猫まねき」を常用することとした.「猫まねき」のカスタマイズ設定は非常に簡単で,目的であった「CBMK90IV化」については,すぐに設定できた.ついでに「左CtrlキーとCapsキーを入れ替え」も設定したのだが,やはり入れ替えた方が遙かに便利な事がわかった.この2つのキーの入れ替えは,かつてはプログラマを中心に「死活問題」と呼ばれ,「プログラマ御用達コンパクト・キーボードならば,HHK」という鉄の掟をも産み出した.今日では,これらのキーカスタマイズソフトをインストールしさえすれば,ほとんどのキーボードでこの問題は解決される.プログラマの胃潰瘍罹患率を下げた作者たちの努力には,敬意を表したい.ちなみに私の環境では,「猫まねき」のメモリ使用量は4~9MBぐらいで,リソースもそれほど消費しないようだ.

 ところで「CBMK90IV化」計画は,これで終わったわけではない.実は「猫まねき」常駐後にも,解決されていない問題があったのだ.それは「スリープキー」だ.確かに「猫まねき」に設定したとおり,「スリープキー」押しによって,「Home」が押されたことになるのだが,「Windows終了オプション」も表示されたしまうのだ.これでは一番の問題が解決されていないことになる…

 ところがこの問題は,意外にもあっけなく解決した.そもそも自分は「Sleep(節電モードへ)」「Wake(節電モードから復帰)」「Power(電源投入)」キーとは無縁に過ごしてきたため,これらのキーの仕組みや出自について,全く知らなかった.調べてみれば,これらのキーには「ACPIキー」という立派な名前が付けられており,スキャンコード(押したキーを判別するために定義されたコード)も割り当てられている.つまり,「A」キーや「ENTER」キーと同じ,「単なるキー」であり,それ以上でもそれ以下でもない.パソコン本体の電源ボタンのように,キーボードとは違う回路で信号をPCに送っているわけではないのだ.もちろん「ミュート」キー,「ボリュームアップ」キー,「ボリュームダウン」キーといった,いわゆる「オーディオコントロールキー」ついても同様で,やはりスキャンコードが割り当てられている.

 全く余談ではあるが,USB(HID)キーボードのキー定義(UsagePageとID)を見ると,見たことも聞いたこともないキーが大量に定義されていた.おそらくPCのキーボードにはなく,他のワークステーションや端末等の入力デバイスに存在するキーなど,網羅的に含めたためだろう.ちなみにHID定義のファンクションキーには,「F24」キーまで定義されていた.これらのHID定義キーの大部分には,PS2のスキャンコードが定義されている.詳しくは「USB HIDからPS/2スキャンコードへの変換表」を参照のこと(注:この表にはオーディオコントロールキーのPS2スキャンコードは定義されていないようだ).おそらくHIDの定義が先にあり,それらのHID定義キーを,PS2キーボードからも使用出来るように,それぞれのHID定義キーに対応したスキャンコードを「後追い定義」したのだろう(未確認).つまり本来USBキーボードでなければ使用出来なかったキーを,PS2キーボードでも(OSが対応さえしていれば)使用出来るわけだ.やろうとおもえば「窓使いの憂鬱」を使って,それら,HID定義ドキュメントの中でしかお目にかかれない「幻のキー」を使用することが出来そうだ.

 話はそれたが,ACPIキーは,今は懐かしいPCハード仕様「PC2001システムデザインガイド」のVer.0.7で,標準キーとして採用されたらしい.当然OSが立ち上がっていない電源断時に,「Power」キーは使用されるので,これらACPIキーのスキャンコードはACPI内で定義されており,スタンバイ電力で動いているACPI BIOSによって監視されているはずだ.そしてOS起動後の電源管理は,BIOSからOSに移管されるため,ACPIキーもOSによって監視される.おそらくノートパソコンによく見られる「スリープボタン」も,形はずいぶん違うが,実は単なるキーボードの「キー」にすぎないのだろう.だとすると…

 答えはもうおわかりだろう.スタートボタン→コントロールパネル→「電源オプション」→「詳細設定」タブとクリックし,「コンピュータのスリープボタンを押したとき」で「何もしない」を選択すれば,「スリープキー」を押しても,終了オプションは表示されない.これでようやく,事件は解決した.青空!

 …と・こ・ろ・が.疑問が残る読者もいるに違いない.もしスリープキーのスキャンコードを見て,OSが電源制御するのであれば,「猫まねき」によって,別のキーのスキャンコードは変更されているのに,なぜその別のキーとスリープキーの,2つが押されたような挙動を示すのであろうか?

 この謎の答えはWindowsのキー入力処理の中にある.OS起動中,キーボードは,キーが押された時(Make)と,押されたキーを放した時(Break)に,それぞれに対応したスキャンコードを,OSのキーボード・デバイスドライバに渡す.デバイスドライバは,スキャンコード(押したキーのコード)を仮想キーコード(押されたキーに対応する文字や機能のコード)に変換し,OSに渡す.「猫まねき」はデバイスドライバの一部になりすまし,内部でスキャンコードを横取りし,それを別のスキャンコードにすり替えてしまうことで,キー配列の再定義を実現しているようだ.ただし,そのすり替えを行う前に,本物のデバイスドライバがスキャンコードを見ていて,何らかのアクションを起こしている場合には,手の出しようがない.ACPIキーはまさに,それに該当する.ちなみにACPIキーの機能には,仮想キーコードは割り当てられていない.

 ということで,途中からずいぶんと技術的な話になってしまったが,当初の計画通り「SMK-90JPU(PRO)CBMK90IV化」は成功し,「左CtrlキーとCapsキーを入れ替え」というオマケも付いた.これでSMK-90JPU(PRO)試用レポートも,ようやく終わることができそうだ.SMK-90JPU(PRO)は現在,ドスパラで入手可能(注:ドスパラページでは「PS2」と記載されているが,実際にはUSBキーボードで,USB→PS2変換アダプタが付属する).