/*
 * EZK & xps2k について
 *   by uratan! 2004.1.12
 */

ソースとコンパイル

xps2k の現在のバージョンは 0.25 (2004.7.28) です。 ソースは こちら から取得できます。

FreeBSD 4.6R/XFree86 4.2.0 および NetBSD 1.6.1/XFree86 4.2.1 にて コンパイルを確認してあります。

% xmkmf
% make
% su
# ./xps2k
	

使用方法

オプション

-d display 接続する X server を指定
-g geometry ウインドウの位置とサイズを指定
-n string ウインドウに命名
-b pixels ボーダーの幅
-r 反転表示
-l /dev/cuaaX 使用する COM ポートの選択 (NetBSD では /dev/tty0X)
-a 子 PC からのコマンドに応答する
-f 子 PC からのコマンドを受信するが、 応答はしない
-i 起動時に KP_RESET_DONE を送ってみる
-c マウス中ボタンでの [CTRL]+[ALT] 送出を 使用する。
-v おしゃべりモード
-s 時間軸他に関する測定を行い終了する
-w n 時間軸の根源であるソフトウエイトの ループ数を与える

マウスボタンの操作

左ボタン キーボードアニメーションをリセットする
中ボタン paste 動作、 -c オプションの場合には、[CTRL]-[ALT] のコントロール
右ボタン xps2k を終了

使用例

(以下の動作は変換ケーブルである EZK がなくても行うことができます、 COM ポートを開くための root 権限は必要です)

以下のオプションにより、(セミ)フルファンクションな仮想キーボードとして 起動します。(もろもろの状態を見るためには、-v オプションも追加)

xps2k -a
マウスの中ボタンにて paste 動作が可能です。 Scroll Lock などを押した結果、子 PC から LED 操作のコマンドが来れば、 LED アニメーションも変化します。(子 PC と同時に親 PC の X Window System も スクロールロックされますのでご注意ください)

xps2k は、X Window System のキーイベントにて駆動されますので、キーボード focus を合わせておいてキーを押し、focus を外してから離すとキーが 押されっぱなしの状態になります。(これを逆手にとって、ALT ロック、とか CTRL ロックに使うこともできます) 解除するためには、最後に「離した」 という状態にすればよいようで、フォーカスを合わせてもう一度押して離すと 解除されます。

キーボードアニメーションは、押したキーの数と離したキーの数の 差分にて描画がされます。なにかの拍子に数がずれてしまった場合 には、マウスの右ボタンでリセットできます。ただし、リセット されるのはアニメーションだけで、子 PC にはキー解除の送信は行い ませんのでご注意ください。

子 PC にて [CTRL]-[ALT]-[BS] などを使いたくなりそうな場合には、

xps2k -a -c
と起動します。
(画面は反転表示の -r も付加)
マウスの中ボタンにより、[CTRL]+[ALT] の キーが押されたり、 離されたりします。この場合には、paste は使用できません。
これで後は [BS] の 1キーのみで 子 PC の X Window System に [CTRL]-[ALT]-[BS] を送出できます。 [CTRL]-[ALT]-[DEL] は X サーバにフックされませんので -c オプション なしでも送出可能です。

終了するためには、マウスの右ボタンを押します。

一本の EZK を複数の xps2k で共有する場合には、2つめ以降はオプション -a なしで起動するほうが好ましいと思われます。これは子 PC からの リクエストに、複数の xps2k が応答しないためです。ただし、xps2k 同士で COM ポートを排他制御をしているわけではないので、厳密にはキー入力が 混合されるケース・他が考えられます。

xps2k のチューニング・その他の注意事項

(以下の動作は変換ケーブルである EZK がなくても行うことができます、 COM ポートを開くための root 権限は必要です)

xps2k を実際に EZK の駆動に使用する際には、 カーネルの再コンフィギュレーションが必要です。

(FreeBSD の場合には "options HZ=250")
(NetBSD 1.6.1 の場合には "options HZ=256")
そして、実機の処理速度に合わせて、xps2k のソフトウェイト時間の チューニングをすることが必要です。

すなわち

% xps2k -s -w ..
にて表示される usleep() の最小時間が 8msec 以内
(*1) であること、と、 wait_half()の 2回分の和がだいたい 30〜50usec (*2) になる値を求めることが必要です。(私の環境でのログは こちら )

xps2k + EZK では、キーリピートは X server が行い、xps2k も 子 PC もリピート動作に関与しない/させない状態で使用します。 つまり xps2k 以降は、X server のキーリピートによる KeyPressEvent の 連続発生を、人間が連打しているものとして処理します。
X Window System のキーアサインで、Control/Shift/Alt などのモディファイヤ キーを追加・変更している場合には、リピートしないよう設定変更したほうが よいと思われます。

% xset -r 131   など

paste 機能においては、現在の xps2k は、子 PC が素の 101キーボードを 受け付けるものとしてキーストローク([SHIFT] を含む)を発生するように 記述してあります。 また、PS/2 キーボードプロトコルがそもそもキーの押下情報を やり取りするようになっていますので、「シフトなしで「!」を入力する」 ようなキーアサインは現在考慮されておりません。

現在は 106キーボードには未対応ですが、少々の改造で対応できると 思います。しかし、カナ入力に関してはどうなるのか想像がつきません。 いずれにしても、ソフトレベルの変更で出来る事とできない事ことが ありますのでご注意ください。

インストール

もしお気に召したらならば、適当にインストールしてください。

% su
# chown root xps2k
# chmod 4755 xps2k
# cp xps2k /usr/local/bin/
# cp xps2k.man /usr/local/man/man1/





(*1) host PC はキーボードに受け取って欲しいデータがある場合、最低 10msec 要求をキープするはずなため。
(*2) PS/2 キーボードのシリアル転送のクロックの幅の規格がこの値であるため。
    uratan@miomio.jp
upward