キー間格差の問題点

Nキーロールオーバーについて書いたが,ゲーマーではないので実はどうでも良かったりする。気になったのはモディファイアキーとその他のキーがUSBキーボードでは区別されて送信されるという点である。
一般のUSBキーボードでホストとのやりとりで用いられるBoot Protocolではモディファイアキーは1byteのビットマップデータとして表現され,その他のキーは6bytes中の各1byteにキーコードが埋め込まれる。
モディファイアキーはCtrl,Alt,Shift,GUI*1の4種類でそれぞれ左右によって違いがあるので計8つ。つまり,1byteのビットマップならすべてのモディファイアキーの状態を表すことができる。
その他のキーは1byteのキーコードで送信されるので,6bytesだと最大で6つのキーが押されているという状態をホストに伝えることが可能となる。
これを読めば明らかなようにモディファイアキーとその他のキーは平等には扱われていない。USBキーボードはPS/2キーボードとは異なりただのスイッチの集まったデバイスにすぎないが,実はそのスイッチ間に格差があるのである。
で,その格差が問題になるかと言うと,当然なるし,現状の社会情勢ではその解消は難しい。
では,具体的にどのような時に問題になるのか。それは,ソフトウェアレベルでキーの配置替えをするときである。
ソフトウェアでのキーの配置替えとは,要は入力されたキーコードをソフトウェアで別のキーコードに変更にすることである。例えば,aのキーコードをbのキーコードに変更するようにすれば,キーボードのaのキーを押せばbと入力されるというイメージ。Windows XPなら窓使いの憂鬱というソフトでこれと同じことができる。ただし,窓使いの憂鬱ができることはこんなもんじゃない。
別にaをbに変更するだけなら特に問題にはならないが,aキーを左Ctrlキーとして使おうとするとちょっと問題が出てくる。というのも,aとCtrlはキーボードからの送られかたが違うからである。Boot Protocolではモディファイアキーは全てOn/Offの区別ができるようになっているが,aに左Ctrlを割り当てるとキー配置替えソフトより上位ではすべてのモディファイアキーを区別できるとは限らなくなってしまう。左Ctrlだけではなく,他のモディファイアキーも変更すれば,もしかしたら入力できないキーボードショートカットが出てくるかもしれない。まあ,よほど変態的な人でない限りは問題ない気はかなりするが。。ここまで書いておきながらだけど。
回避する方法としてはハードウェアレベルで変換という手があり,Kinesisのキーボードにあるキーのリマップ機能なんかはたぶんそうなっている。なお,キーコードを変換するような専用ハードウェアを軽く探してみたが,見当たらなかった。

*1:MacならCommandキー,WindowsならWindowsキー