前のページ 次のページ 目次

6. キーボードとコンソールについて

この章は、鵜川さんにより書かれた、 Linux 98 コンソールドキュメント ver 1.3.3 を、 PC9800HOWTO 用に加工し、さらに井伊が改変したものです。

6.1 コンソール

現在 Linux/98 では以下の機能が動作しています。

  1. 仮想コンソール (97/11)
  2. スクロールアップ (97/11)
  3. /dev/vcs(AT互換部分) (97/11)
  4. アトリビュート (97/11)
  5. 2バイト日本語 (98/2)
  6. 半角文字 (98/2)
  7. 30行モード (97/11)
※括弧内はソースの最終更新月です。

仮想コンソール

本家と同様に使えるはずです。

スクロールアップ

PC-9800 シリーズでは、AT 互換機に比べて V-RAM が小さいので、ス クロールアップは最大で1画面分しかできません。これについては、 今後改善する予定です。

/dev/vcs(AT互換部分)

本家と同様に使えるはずです。 各文字の2バイト目まで読み出せるデバイスは、今後作る予定です。

アトリビュート

PC-9800 シリーズでは背景色の表示ができませんので、背景色は無視 されます。

しかし、cursis ライブラリを使用したアプリケーション等では、よく 背景色をつけ、文字を黒で表示するようになっています。これではな にも表示されませんので、この時は、文字を黒に、背景を白にするよ うにしています。

2バイト日本語

Linux(98) ではコンソールで SJIS、EUC、JIS の文字コードをサポー トします。 kon 等を使う必要はありませんし、使わないでください。 SJIS、EUC はエスケープシーケンスで切り換えます。エスケープシー ケンスは次のとおりです。

EUC-JP  ESC [ 9 8 ; 0 ]
raw     ESC [ 9 8 ; 1 ]
SJIS    ESC [ 9 8 ; 2 ]
EUC-JP では、半角かなは使えますが、補助漢字は使えません。また、 1バイト目がJIS-X-0201 へのシングルシフト 0x8E のときは、 JIS-X-0201 のマップを使います。

SJIS では 2バイトの 98 文字も表示可能ですが、半角の 98 文字を 表示したときは、同じ文字が2個表示されます。今後改善の予定で す。

raw は本家互換です。全て1バイトの文字として扱うため、漢字は表 示できません。

また、 JIS は、一部 iso-2022-jp の仕様と重なっています。 JIS はEUC-JP、raw、SJIS のどのコードが選択されていても次のエスケ ープシーケンスのどれかで JIS コードのモードになります。

ESC $ @
ESC $ B
<!-- ESC $ ( D
されていても次のエスケープシーケンスのどれかで JIS コードのモードになりま
す。 

ESC $ @
ESC $ B
ESC $ ( D
これらは ...

とありますが、 "ESC $ ( D" はけしといてください。よく調べると、これはハン
グルか何かでした。そのうちカーネルもあわせる予定です。
鵜川 始陽, seraphim 1860, 1998.11.11
-->
これらは iso-2022-jp では、それぞれ 78 年 JIS 、 83 年 JIS 、 90 年 JIS を表わしますが、 PC-9800 シリーズの漢字ロムが 78 年 JIS になっているので、上のどのエスケープシーケンスでも 78 年 JIS になります。

本家同様、 UTF-8 も使えるはずです。ただし、漢字は表示されませ ん。

これらの属性を保存、復元するエスケープシーケンスとして、

ESC [ 9 8 ; 1 0 ; 1
(保存)
ESC [ 9 8 ; 1 0 ; 2
(復元)
を用意しています。

半角文字

コンソールは、エスケープシーケンスでない文字について、まず2 バイト日本語か、制御文字かを調べ、そうでなければ1バイトの半 角文字として処理します。本家に比べて、 JIS-X-0201 のマップ が増えています。 JIS-X-0201 のマップでは、JIS-X-0201 で定義されていない部分は

  1. 制御文字のときは、1バイト目を無視して制御文字として扱います。
  2. それ以外のときは、 PC-9800 シリーズの漢字ロムにある文字をそのまま表示します。 として扱います。

    デフォルトは G0 が JIS-X-0201 のマップで G1 が VT100 のグラフ ィック文字のマップになっていて、G0 が選ばれています。

30行モード

PC-9821 シリーズではコンソールで 30 行表示することができます。 この機能を使うには、 SHIFT を押しながらブートします。この 機能は PC-9801 シリーズでは使用できません。ただし、シフトを 押しながらブートした時は、シフトの状態が変になることがありま す。

また、 CTRL を押しながらブートすると表示行数を若干増やすこ とができますが、画面のちらつきが多くなり、ディスプレィによっ ては表示できないことがあります。この機能は PC-9801 シリーズ でも使うことができ、 SHIFT との併用も可能です。

known bug

SJIS で 2バイトの半角 98 文字を表示したときは、同じ文字が2 個表示されます。

PC-9821 シリーズの 25 行モードで X Window の 480 ラインサー バを起動し、終了したあと 30 行モードになり、画面下にゴミが表 示されます。また、 CTRL を押しながら起動した時も 30 行にな り、下のほうが表示されなくなります。

その他

kon を立ちあげると、画面に何も表示されなくなります。立ち上 げないでください。もし立ち上げてしまったときは、

exit [RETURN]
と入力したあと、仮想コンソールを切り換えてください。

最近変わったこと

6.2 キーボード

現在 Linux(98) では以下の機能が動作しています。

  1. ウィンドウズキー以外のすべてのキー
  2. コンソールの文字コード切り変え

利用可能なキー

Linux(98) では、 PC-9800 シリーズのキーの、ウィンドウズキー 以外のすべてのキーが使えます。左右のシフトの区別はできませ ん。個人的なターゲットのマシンが PC-9801DA のため、今後対応 の予定もありません。

Num Lock デフォルトではありません。常に押されていない状態です。 キーマップを変えて Num Lock を作っても LED は点灯しません。

コンソールの文字コード切り変え

キーボードからコンソールの漢字の文字コードを切り変えること ができます。この機能を表すキーシンボルは、 0xfd?? です。?? の部分は

00 EUC-JP
01 raw
02 SJIS
です。それ以外の指定はできません。

デフォルトのキーマップ

デフォルトで、いわゆる半角かなのコードを入力できます。かな キーをつかいます。チルダとバッククォートが入れかわっている のは、 linux-1.0 を移植された鵜飼さんの趣味によるものです。 コンソールの文字コード切り変えキーは vf.1 〜 vf.3 に割り当 てられています。(変更、削除される恐れがあります)

注意:バージョンによっては ESC キーが ESC に割り当てられて いないものがあります。 CTRL + 3 が ESC になっていますの で、 ESC キーが効かなければそちらをお使いください。

キーマップ

デフォルトでは、Num Lock はありません。常に押されていない 状態です。

キーマップを変更するには loadkeys の98版を使います。ただ し、CAPS と GRPH は他のキーと動作が違うので注意してくださ い。

6.3 お願い

このドキュメントは、このあたりの用語等をほどんど何も知らな いまま書いていますので、変なところがいっぱいあると思います。 また、嘘もいっぱい書いていると思いますので、気になったとこ ろがあれば指摘していただけるとありがたいです。

短かくするつもりだったのに長くなってしまいました。

6.4 質問と回答編

キーボードまわりのバグでtimeoutが発生する機種がある

[投稿者] 前山さん
[日付] Wed, 15 Jul 1998 22:18:57 +0900 (JST)
[質問]
PC98系にLinux を移植されたとの情報を見、さっそく研究室に眠っていた Epson PC-396S(386DX-25MHz(CPUを入れ換えサイリックスの互換CPUに変更)、 5MB、1GBHDD)にインストールしました。ここまではうまく行ったのですが、 grub で kernel=(hd0,2)/vmlinuz root=/dev/sda3 として立ち上げる時、99%の確率で Kerborad timeout というメッセージ が出て、login: のところでキーボードを受け付けなくなります。しかたなく、 リセットしています。timeoutが出なければ、快適に(?)にLinuxが動きます。 HDにインストールしてあるkernalは、setupでコピーしたものそのままです (PC9801-55互換SCSI用。カーネルの再構築をAT互換機で行なっているのですが、 この問題のため試せないでおります)

bootディスクから立ち上げる(RAMディスクでインストール)と確実にキーボードが 動きます。

kernal= の所で、bootディスクと同じように パラメータを指定しましたが、 改善が見られません。

[回答]
状況の報告を元に検討し、ソースを読み直したところ、 バグの可能性が出てきました。 以下の変更を適用してみてください。
drivers/char/pc_keyb.h の 80行目

#define KBD_REPLY_RESEND 0xFE /*.....

とあるのを

#define KBD_REPLY_RESEND 0xFC /*...
                            ^
に変更してみてください。

[投稿者] 藤田さん
[日付] Fri, 17 Jul 1998 20:49:03 JST
[コメント]
さっそく試しました。 その結果10回程、リブートを繰り返し2回keyboard timeout 出ましたが、 ほぼ満足いく程度まで改善致しました。(ウェイトを付け加えるなども確かめたい とおもいます)

[投稿者] 前山さん
[日付] 1998年7月23日 20:40
[コメント]
とりあえず、改善できたので、よかったです。

keyboard timeout が出た後に、 キーボードを物理的に接続し直す(一旦はずして、もう一度つなぐ) とどうなるでしょうか?

[投稿者] 藤田さん
[日付] Fri, 24 Jul 1998 14:34:22 JST

Am5x86に換装したPC-9801FAでキーボードから入力できない

[日付] Mon, 12 Oct 1998 00:13:16 JST
[質問]
Linux/98 β9 を PC-9801 FA にインストールしてみたのですが,インストール終了後 起動してみると,「Login:」 が表示されたあと,キーボードの入力が全然できない状 態になりました. Linux PC-9800 HOWTO の 9.15 のバグでしょうか? timeout の表示 は見た覚えがないのですが.
本体: PC-9801 FA /U2
CPU: MELCO EUF-EP (Am5x86)
SCSI: Logitec LHA-301

[回答]
まだありません。

[コメント]
インストールはできているのに不思議ですね。 beta11なら解決してないかな。

[投稿者] 井伊

キーボードがハードウェアロックの場合(PC-9801VXまでの世代)

ハードウエアロックだと、現在のルーチンでは、
正常に動作しない可能性があります。
# ハードウエアロックの機種で、Linux/98 を動かせるのは、
# PC-9801VX の CPU を載せ換えた場合しか思いつかなかったので、
# 全く考慮していませんでした。

で、ハードウエアロックの場合、
pc_keyb.c の中の、send_data という関数を、
何もしないで 0 を返す関数にしてください。
ただし、ハードウエアロックの場合は、
バーチャルコンソールを切り替えた場合に、
caps や カナの状態と、内部で保持している状態に
矛盾が生じる可能性があります。

投稿者:藤田さん

DPMS

[投稿者] 高井 幸輔さん
[日付] 1998.12.19
[質問]
コンソールのDPMS機能ですが、 setterm -powersave hsync が効いてないように 見えるんですが、気のせいでしょうか?
あとデフォルトでは (スタンバイを経ずに) いきなりサスペンドモードに 移行していますが、コンパイル中とかだと画面が消えた途端に 反射的にシフトとか押してしまうので、絶対ディスプレイの寿命によろしくぬ。

[回答]
未回答


前のページ 次のページ 目次