Vistaにおけるキーボードカスタマイズ問題
キーボードカスタマイズはVistaでは不可能に?において、Windows Vistaにおけるキーボードカスタマイズに対して懸念を示したが、それから半年が経ち状況に変化が生まれてきたのでここでまとめておきたい。
- 注:本エントリの記述はすでに古くなっている。2009年6月14日付Vista/Windows 7におけるキーボードカスタマイズ問題 - A Successful Failureにてフォローしているので、そちらを参照してほしい。
すべてのカーネルモードコードにデジタル署名が必要に
MicrosoftのWindows Hardware Developer Centralの"Windows Vista のカーネル モードのコード署名用 Microsoft クロス証明書"によれば、Windows Vistaでは信頼できるソフトウェアを識別するために、デジタル署名を利用する。特にx64エディションではすべてのカーネルモードコードに適切なデジタル署名が付与されていることが求められる。x86システムではデジタル署名が無くても動作させることが可能だが、HD DVDやBlu-Ray Discの再生が行えないなどの制限が生じる。今はそれらが再生できなくても大きな影響はないかもしれないが、次世代ディスクが標準となったときに再生できなければ問題だ。
デジタル署名を受けるためには、現時点で6つしかないルート証明機関からコード署名証明書を取得する必要があるが、法人格のない個人に対してコード署名証明書を発行するルート証明機関は無い。ルート証明機関の一つであるVeriSignはQ&A"法人格のない個人でもコードサイニング証明書を取得できますか"において、個人および個人事業など、法人としての登記がない場合には、コードサイニング証明書(コード署名証明書)の申請・発行はできないと明記している。
つまり、法人でない個人が作るフリーウェアやシェアウェアなどは、カーネルモードドライバを含むような機能を提供できないということだ。窓使いの憂鬱に代表されるキーボードカスタマイズソフトは、独自のキーボードドライバを利用してキーボードカスタマイズを実現しているが、同じやり方はVistaでは通用しない。そのため、窓使いの憂鬱は開発を終了し、Vistaでは動作しないことをアナウンスしている。
問題は深刻で、1) 法人がキーボードカスタマイズツールを提供するか、2) カーネルモードコードを利用せずキーボードカスタマイズを実現するアプローチをとるか、3) デジタル署名が無くても動作させることができる方法を見いだすか、どれかを実現しないとVistaでキーボードカスタマイズができない状況は打破できない。
1 どこかの法人がキーボードカスタマイズツールを提供するのを待つ
もっともよいのはMicrosoft自身がキーボードカスタマイズツールを提供することだ。プログラマという人種は独自のキーアサインを持っていてそれが変わると開発効率が著しく落ちる。多くのプログラマを擁するMicrosoftならば、キーボードカスタマイズの重要性に気づいても良さそうだが、そうした機能が提供される気配はない。またサードパーティからもキーボードカスタマイズツールのリリースのアナウンスはない。残念ながら望み薄のようだ。ソースネクストあたりが窓使いの憂鬱 Vista対応版を1,980円ぐらいでだしてくれたら喜んで買うのだが。
2 カーネルモードコードを利用しない
2.1 レジストリの変更によりキーマップを変更
たとえばCtrlキーとCapslockキーの入れ替えならば、レジストリの変更だけで可能だ。次のファイルを拡張子regで保存し、ダブルクリックして適用後、再起動すればよい。元に戻したければ、レジストリエディタで該当キーを削除すればよい。詳しくは、LOST TECHNOLOGYの"キーを入れ替える"が参考になる。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,1d,00,3a,00,3a,00,1d,00,00,00,00,00
ところがこの方法だと単純なキーの入れ替えぐらいしかできず、自由度が少ない。
2.2 キーボード入力をフックして任意のキーに入れ替える
XKeymacsはWindows Vistaにも正式に対応しているキーボードカスタマイズソフトであり、Windowsのすべてのソフトウェア上でEmacsライクな操作系を実現できる。キーボードドライバの上位に位置し、キーボードから渡されるキーマップを任意のキーコードに変換してしまう。問題点としては、すべてのキーをフックするため、若干動作が重くなるという点が挙げられるが、ドライバをいじる必要がないため、デジタル署名が必要ないという利点がある。高速なCPUを搭載したPCならば問題になることは少なく、おそらくVistaでキーボードカスタマイズをするときには現状もっともまっとうな方法と言えるだろう。
3 デジタル署名が無くても動作させる方法を見いだす。
x86版(32bit)Vistaならばとりあえずデジタル署名が無くても動作させることはできる。2ちゃんねるの窓使いの憂鬱7スレッドには、窓使いの憂鬱を暫定的にVistaに対応させたバイナリの配布が行われている。ここで再配布されているので必要な人はダウンロードしてほしい。
署名はオレオレなので、Vista x64ではテスト署名モードにする必要がある。具体的には「管理者として実行」したコマンドプロンプトから、
bcdedit -set TESTSIGNING ONを実行してWindowsを再起動する。これは1回だけでいい。
テスト署名モードで再起動する前にインストールするとドライバが署名されてないからロードできねーぞとプログラム互換性アシスタントが警告するけど気にしなくておk。
テスト署名モードではx86で未署名のドライバを使ったときと同様、HD-DVDの再生等は制限される。またデスクトップの四隅に「テストモード」と表示される。
元に戻すにはbcdedit -set TESTSIGNING OFFアンインストールしないで通常モードで起動しても起動の途中で止まったりはしないけどキー入力が一切効かない。その場合は再起動してF8押して「ドライバ署名の強制を無効にする」を選ぶ。
窓使いの憂鬱 7
あとドライバ常駐した状態で使ってたらさっき何の前触れもなく青画面になった。
ソースに最低限の修正を加えてコンパイルしなおしただけだから問題が残ってるかも。
まだまだ不安定なようだし、テスト署名モードを常用するというのも厳しいものがある。また、結局Blu-rayやHD DVDが使えないという制限は残るわけで根本的な解決にはならない。
2008年9月20日追記:窓使いの憂鬱をVista 32bit/64bit, XP 64bit対応とした派生版、のどかの配付が行われている。1,800円のシェアウェアで、収益はコード署名証明書を取得することに利用されるとのことだ(登記簿謄本が取れる会社を設立できる可能性を残すためと記載されているが、2007年10月4日付エントリ『個人でコード署名証明書を取ることが可能に』で示したように個人でもコード署名証明書を取得する道が開かれているため、会社設立までは必要ない。それでも年間$229という発行費用を捻出するためにシェアウェア化は不可避だ)。
ところが、x86/x64問わずWindows Vistaで署名のないドライバをロードすることができるAtsivというツールが提供されている。元々レガシーなドライバをVista上で動作させることを目的に開発されたものなので、少なくとも上記のbcdeditで再起動する手間を省き、通常モードで稼働させることができそうだ。まだ検証もされていないので、試すときには自己責任でお願いしたいが、なんとか光明らしきものが見えたというところだろうか。この先の検証・開発に期待したい。
2007年8月7日追記:Windows Vista Security : x64 Driver Signing Updateによれば、Microsoftは8月3日付けでAtsivに対する認証を取り消した。そのため、もはやAtsivによる認証回避は有効な手段ではなくなった。
4 第4の選択肢
さらに、2007年10月4日付エントリ『個人でコード署名証明書を取ることが可能に』に記載しているように、個人でコード署名証明書を取ることが可能となった。ここに第4の選択肢が現れたわけである。ひよひよ氏の努力に感謝するとともに、この選択肢によって多くの優れたオンラインソフトウェアがVistaでも変わらず利用できるようになることを願っている。
2008年9月22日追記:Crystal Dew R&D Labsによれば、ひよひよ氏が開いた個人でコード署名証明書を取得する道は閉ざされてしまったようだ。残念極まりない。
まとめ
現状ではVistaにおけるキーボードカスタマイズは、レジストリの変更によるキー入れ替えにとどめるか、XKeymacsを利用することがベストと言える。デジタル署名を回避する手法は利用可能であるかもしれないが、それを前提としたソフト開発が行われるかどうかは現時点としては不透明であると言わざるを得ない(追記:Microsoftの対策により、Astivによる回避は不能になった)。ひよひよ氏の努力により、オンラインソフトウェア作者が個人でデジタル署名を取得することも可能であることが示されたので、なんとかして有志でデジタル署名を取得するという手も利用することができる(かなりの労力が必要になるのは言うまでもない)。抜本的な解決はMicrosoftがカスタマイズツールを提供することである事実は依然として変わりが無い。