久しぶりに NetWalker の情報を探したら、モジュールを作れるようになっているし
キーカスタマイズソフト「窓使いの憂鬱」も動くようになっているとのことです。
かなり便利になってきました。ありがたいことです。
Android Zaurusの日記
・NetWalkerのカーネルとローダブルモジュールのビルド
ひとりぶろぐ
・[NetWalker]窓使いの憂鬱をNetWalkerで動かす
しかも「窓使いの憂鬱」では [A]キー を Control にする設定まで出来るようです。
これで ctrla を作らなくて済むし、楽が出来る!!
と思って試したら ctrla の動作とはちょっと違いました。少々甘かったようです。
そこで上のページを参考にして uinput.ko を作り、ctrla を NetWalker 本体の Ubuntu
で動くようにしてみました。
Android Zaurusの日記 さん、ひとりぶろぐ さんの記事を参考にさせていただきました。
ありがとうございました。
以下
・ctrla の動作の違い
・新しい ctrla v1.10
・ctrla を NetWalker の Ubuntu で動かすまで
ctrla は、[A] キーを Control キー兼用として用いるためのソフトです。
● ctrla の動作の違い
「窓使いの憂鬱」の “mod control += !!A” の設定では、[A]キー を押している間に
他のキーが押されたタイミングで Control キーと見なしています。
これだけだと、素早く文字入力を行った場合に意図しない Control キーが挿入されて
しまうことがあります。
例えば「会議」と打とうとして “kai” と素早くタイプすると、[A] を離す前に [I]
が押されて Control-I が入ってしまうことになります。
ctrla では連続タイプについていろいろ検証しており、この状態を区別できるように
二つのクロスストローク判定を導入しています。
もしかしたら「窓使いの憂鬱」でも設定次第で実現出来るのかもしれません。
そのような機能がすでにありましたらごめんなさい。
●クロスストローク判定1、遅延判定
“kai” を素早く打つと、下記のように前のキーを離す前に次のキーを押してしまう
ことがあります。
→時間 (1) (2) --------------------------------------- [K]dw ------ [K]up [A]dw ------ [A]up [I]dw ------ [I]up
「窓使いの憂鬱」+ “mod control += !!A” はおそらく (1) のタイミングで判定
しています。これだと Control-I が入ってしまいます。
ctrla では、[A] キーを先に離すと ‘A’ キーを、[I] を先に離すと Control-I が
入るように判定を遅らせています。
つまり上の例だと (2) のタイミングで ‘A’ キーを送信します。
下記の例では先に [I] を離しているので (3) のタイミングで Control-I になります。
(3) --------------------------------------- [A]dw ------------------- [A]up [I]dw --- [I]up
●クロスストローク判定2、id による識別
実際に使ってみると、上の「遅延判定」だけでは不十分なことがわかります。
例えば「朝」と高速にタイプしようとすると下記のキーストローク “asa” になります。
→時間 (4) (5) --------------------------------------- [A]dw ------ [A]up [S]dw ------ [S]up [A]dw ------ [A]up --------------------------------------- ID1→ ID2→
[S] を押したタイミング (4) でも、[S] を離したタイミング (5) でも、どちらも
[A] キーが押されているため、単純な遅延判定だと (5) で Control-S が入ってしまいます。
そこで ctrla では、[A] キーを押す度に毎回異なる id 値を割り振るようにしています。
キーを押した時点の id と離した時の id 値が異なる場合は、別の [A] キーとみなして
Control に変換しません。
よって上の例の場合、(5) のタイミングで id が異なるのでそのまま ‘S’ キーを送信します。
●新しい ctrla v1.10
下記の修正を行いました。
1. NetWalker の Ubuntu (uinput.ko) で動作しない問題を修正
2. 連続して 1秒以上 [A] キーだけ押し続けた場合、Control とみなす
1. は hook_main.c で構造体がクリアされていないところがあったために、module
として組み込んだ場合に誤動作していました。カーネルに組み込んだ場合はメモリが
0 初期化されているらしく動いていました。(/dev/input/event* で動くのもそのせい)
テキストエディタ上で考え事をしているとき、無意識に Ctrl キーを押しっぱなしに
していることがあります。カーソル移動とか編集操作を一切せずにキーを離すと
‘A’ キーが入ってしまうことがありました。
そこで [A] を 1秒以上押し続けた場合は Control と見なすようにしました。
● ctrla を NetWalker の Ubuntu で動かすまで
(1) 3Gモデム対応ツールを入れる
・NetWalker(PC-Z1) 「3Gモデム対応ツール」
この更新を行うと無線 LAN 接続でトラブルが起こる可能性が高いので、先に無線LAN
を off にしておいてください。以前自分でカーネルを build したときに無線 LAN
が動かなかった症状と良く似ています。
(2) uinput.ko を作る
「NetWalkerのカーネルとローダブルモジュールのビルド」の手順をそのまま実行します。
Makefile の修正は「EXTRAVERSION = .10」の行を「EXTRAVERSION = -15-araneo」
に置き換えます。
1時間くらいしてコンパイルが通ったらモジュールを作ります。
$ sudo aptitude install libncurses5-dev $ make menuconfig
メニューで下記の設定を変更します。
(space キーを押して User level driver support を ‘<M>’ にする )
Input device support ---> Miscellaneous devices --->User level driver support
$ make modules $ sudo cp drivers/input/misc/uinput.ko /lib/modules/2.6.28-15-araneo/kernel/drivers/input/ $ sudo insmod /lib/modules/2.6.28-15-araneo/kernel/drivers/input/uinput.ko
(3) ctrla v1.10 を動かす
$ mkdir $HOME/ctrla $ cd $HOME/ctrla $ wget http://dench.flatlib.jp/arfiles/ctrla110.tgz $ tar -zxvf ctrla110.tgz $ sleep 1; sudo ctrla/ctrla /dev/input/event5
まずはこの状態で、他のターミナルやソフトでキーの動作を確認してみてください。
万が一キー入力できなくなった場合も、慌てずに USB キーボードつないでください。
外付けキーボードの動作には影響を与えません。
関連エントリ
・NetWalker PC-Z1 カーネルのコンパイル
・NetWalker PC-Z1 Debian (2)
・NetWalker PC-Z1 Debian
・NetWalker PC-Z1 [A] キーを Control キーと兼用する実験
・NetWalker PC-Z1 Bluetooth とキーカスタムその他