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)です。
使い方:
- ソースの場合は展開して make; make package で出来るパッケージを
使ってインストールするのが問題が少ないと思います。
- 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
のようになります。
- System Preferences の Login Item に
/Library/StartupItems/uControl/uControlHelper.app
を追加します。
この設定はユーザ毎に必要です。
- 複数の人が使う環境の場合、uControl を使うユーザがログアウトした後、
別の人がパスワードを入力する時に、
キートップの刻印と入力される文字とが異なる事態はトラブルの元なので、
ログアウト時に uControl の機能を全て無効にする設定が必要かと思います。
このためには root の権限で、
defaults write com.apple.loginwindow LogoutHook path
で設定されているスクリプト(か何か)で、
/Library/StartupItems/uControl/uControl unconfigure
を実行するようにします。
私の環境でこの設定を行うためのスクリプトが
uControl1.1.0j.pkg/Contents/Resources/setupExample.sh
にありますので、ご参考まで。
この設定はrootの権限で実行しなければならず、全てのユーザで設定が有効になります。
既知の問題:
-
キーボードタイプが 200, 201, 206, 207 のいずれかでなければ、
JIS to ASCII は動作しません。
また PowerBook G4/500 (キーボードタイプ 201) でしかテストしてないので、
他の環境では不具合が生じる可能性があります。
-
JIS to ASCII をチェックしても、
Classic では JIS 配列のままで、
なおかつ一部のキー('_')が入力できません。
回避方法としては、
Classic の「キーボード配列」を Australian で使う、
というのがあります。
現在の Mac OS X では、
配列の異なる複数のキーボードを接続した時に、
Classic で正しい入力ができないという問題が知られていますが、
これと同様の問題と考えます。
これを抜本的に解決するのは
uControl にパッチを当ててキー配列を入れ替えるという現在の
ad hoc なやり方では難しいと思われます。
2002/9/23 追記
さらにちょっと手を入れました。PreferencePane
その1
その2。
ソースファイル:
uControl1.1.0ja.tar.gz、
インストールパッケージ:
uControl1.1.0ja.dmg。
使い方等は
上を見て下さい。
前のバージョンとの違いは次の通りです。
-
JIS キーボードの「かな」キーと「英数」キーを
モデイファイアキーに置き換えて使えるようにしました。
-
JIS to ASCII を選択し、
「swap YEN and ']'」も「swap DEL and ']'」も選択しないと
¥ -> \|
DEL -> DEL
] -> `〜
ですが、「swap YEN and ']'」のみ選択すると
¥ -> `〜
DEL -> DEL
] -> \|
となり、「swap DEL and ']'」のみ選択すると
¥ -> \|
DEL -> `〜
] -> DEL
となります。
[2002/12/2]
[2003/10/10]
PowerBook G4/500 を壊してしまいました。
復旧/購入の予定はありません。
というわけで、
このパッチをメンテナンスできなくなってしまいました。
[2003/11/7]
[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 $