JISキーボードをASCII配列で無理やり使うためのuControlのパッチ


このページは下にいくほど記述が新しくなっています。 最新の記述

[2002/6/11]

uControl_patch.txt
は MacOSX 10.1.5 上の uControl 1.0.4 用のパッチです
PowerBook G4/500MHz でしかテストしてません
キーボードイベントのキーボードタイプの値を書き換えることで JIS キーボードを ASCII キーボードとみなして使います
PowerBook G4/500 の場合、配列は

1 2 3 4 5 6 7 8 9 0 − = ¥ DEL
TAB Q W E R T Y U I O P [ ] RET
CTRL A S D F G H J K L ; ’ ` RET
SHIFT Z X C V B N M , . / ` SHIFT

のようになります。

なお、カーネルがクラッシュすることがあったので、 回避するための変更が入ってます。 そのため、load/unload を繰り返すと どんどんメモリリークするのではないかと思います。
また、CAPS_TO_CTRL を有効にすると、 電源キーが使えなくなるという問題があったので、 回避するコードが入ってます。

私が持ってるApple の JIS キーボードは
PowerMac G4(AGP)/350MHz に付属 (キーボードタイプ 200)
PowerBook G4/500MHz に付属 (キーボードタイプ 201)
iMac G4/800MHz に付属 (キーボードタイプ 206)
だけなので、それらにしか対応してません。

ちなみに、[かな]キーと [英数]キーは機能を失わずに使うことが出来ています。

2002/7/8 追記 MacOSX 10.2 対応について

uControl はバージョンが 1.0.6 に上がっていて、 sysctl で機能の切り替えが出来るようになり、 sysctl を呼ぶ GUI のプログラムも付属するようです。 でも個人的には 1.0.4 で困っていないので、使っていません。
sub->free() の行をコメントアウトすることで、 パニックを回避する策も 1.0.6 で採用されているようです。
でも、改めて考えると、 やりたいことはパッチの当たった virtual function table へのポインタの獲得だけなので、インスタンスを生成せずに (new も止めて)、直接
myVtable = (void *)&__vt_9ODHIDHack;
とやっちゃった方が良いような気がします。
私の PowerBook G4 では上記のように変更して問題なく動いています。
ただしシンボル名がコンパイラ依存になります (後述)。
さて、MacOSX 10.2 でも uControl はほぼそのまま使えることが予想されます。
ただし、MacOSX 10.2 ではコンパイラが変更になっているので、 C++ コンパイラが生成するコードが大きく変わってます。
virtual function table のシンボル名も変わってるので上のコードも
myVtable = (void *)&_ZTV9ODHIDHack;
とすることになると思われます。
また、普通のプログラム用の C++ のバイナリと IOKit で使う C++ (Embedded C++ ?) のバイナリの互換性もないので、 後者をコンパイルする時には -fapple-kext オプションが必要になるようになりました。
というわけで、uControl では Build Setting で OTHER_CPLUSPLUSFLAGS = -fapple-kext を追加する必要があるようです。
(2002/9/23: Build Setting は上記は必要なく、 KERNEL_MODULE = YES で良いようです)

2002/9/13 追記 uControl 1.1.0 について

複数のユーザが使うマシンに uControl を導入したかったので、 uControl 1.1.0 に JIS->ASCII のマッピング変更を行うための改変を行ってみました。 ソースを ここ に、インストールパッケージを ここ に置きました。Mac OS X 10.2 にのみ対応してます。 パッチ配布にしたかったのですが、バイナリファイルへの変更を含むので、 面倒なのでまるごと置きました。配布条件等は当然ながら本家と同様(GPL)です。
使い方:
  1. ソースの場合は展開して make; make package で出来るパッケージを 使ってインストールするのが問題が少ないと思います。
  2. System Preferences の uControl の設定を行います。 Option タブの JIS to ASCII をチェックすると、 JIS キーボードが ASCII 配列として使えます。
    PowerBook G4/500 の場合配列は
    1 2 3 4 5 6 7 8 9 0 − = \ DEL
    TAB Q W E R T Y U I O P [ ] RET
    CTRL A S D F G H J K L ; ’ ` RET
    SHIFT Z X C V B N M , . / ¥ SHIFT
    のようになります。
  3. System Preferences の Login Item に
    /Library/StartupItems/uControl/uControlHelper.app
    を追加します。 この設定はユーザ毎に必要です。
  4. 複数の人が使う環境の場合、uControl を使うユーザがログアウトした後、 別の人がパスワードを入力する時に、 キートップの刻印と入力される文字とが異なる事態はトラブルの元なので、 ログアウト時に uControl の機能を全て無効にする設定が必要かと思います。
    このためには root の権限で、
    defaults write com.apple.loginwindow LogoutHook path
    で設定されているスクリプト(か何か)で、
    /Library/StartupItems/uControl/uControl unconfigure
    を実行するようにします。
    私の環境でこの設定を行うためのスクリプトが
    uControl1.1.0j.pkg/Contents/Resources/setupExample.sh
    にありますので、ご参考まで。 この設定はrootの権限で実行しなければならず、全てのユーザで設定が有効になります。
既知の問題:

2002/9/23 追記

さらにちょっと手を入れました。PreferencePane その1 その2
ソースファイル: uControl1.1.0ja.tar.gz
インストールパッケージ: uControl1.1.0ja.dmg。 使い方等はを見て下さい。 前のバージョンとの違いは次の通りです。

[2002/12/2]

本家の 1.2.0 に追付きました。他は特に変更ありません。 ソースは uControl1.2.0ja.tar.gz です。インストーラは uControl1.2.0ja.dmg です。

[2003/10/10]

PowerBook G4/500 を壊してしまいました。 復旧/購入の予定はありません。 というわけで、 このパッチをメンテナンスできなくなってしまいました。

[2003/11/7]

いまいさんにより、Panther に対応したものが リリースされています。

[2004/1/11] Panther 対応

諸般の事情があり、uControl 1.2.0+JIStoASCII patch を Mac OS X 10.3 に対応させました。
(最初はuControl 1.4.2 を追いかけようと思ったのですが、 ソーストリーの構成ががらっと変わってて、 作業が大変だったのでくじけてしまいました。)
Mac OS X 10.3 への対応のさせ方は、 オリジナルの uControl 1.4.2 と同様です。
手近には対応するキーボードがないので、 たまたま借りることができた iBook で一通りのテストを行ないました。
ソースは uControl1.2.0jap.tar.gz です。インストーラは uControl1.2.0jap.dmg です。
このプログラムは今は自分では使っていないので、問題があっても気付かないと思います。 もし不具合等発見されましたらお知らせいただけるとありがたいです。
既知の問題: fast user switch のことは考慮していません。

[2005/2/11] Mac OS X 10.3.8 対応

新しい PowerBook のタッチパッドでの 2 本指でのスクロールを見た時に、 かなり欲しくなると同時に、ちょっと嫌な予感がしたのですが、 Mac OS X 10.3.8 はこの uControl との互換性がなくなってしまっていました。 (井上さんにご指摘いただきました。ありがとうございます)
というわけで、Mac OS X 10.3.8 に対応させました。 手元にこの uControl の機能を必要とするようなちゃんとしたテスト環境がなく、 ほとんどテストできていないので申し訳ないのですが、よろしければお試し下さい。
もし動かなくなった機能などありましたらお知らせ下さると助かります。
ソースは uControl1.2.0ja10_3_8.tar.gz です。インストーラは uControl1.2.0ja10_3_8.dmg です。
コンパイルするためには Mac OS X 10.3.8 に対応した darwin の IOHIDFamily-86.26 のソースに含まれるヘッダファイル (IOHIDFamily-86.26/IOHIDSystem/IOKit/hidsystem 以下) を /System/Library/Frameworks/Kernel.framework/Headers/IOKit/hidsystem/ にコピーする必要があります。

[2005/4/30] Mac OS X 10.4 非対応

darwin 8 のソースが公開されたので、 それに合わせてこの uControl のソースを変更して、 コンパイル/kextload できるようにはしたのですが、動きません。 (panic するわけでもなく、単に効果が無いです。)
本家が対応するのを待って、どうするか考えます。

[2005/5/13]

Mac OS X 10.4 でキーボードイベント回りが大幅に変更になっているようです。 モディファイアキーの入れ換えだけなら OS 単体でも System Preference から出来るようになりましたので、 本家 uControl を使ってた一部の人は uControl が必要無くなっているかもしれません。
このページのパッチが提供していた機能のためには、何か別のものを scratch から作った方が良いような気がしますが、 時間が思うようにならなくて何の計画もありません。申し訳ないです。

nand@mac.com     目次へ $Revision: 1.27 $ $Date: 2005/12/13 09:05:33 $