]>

# &konsole; (コンソール) ハンドブック

Lars
Dölle

    lars.doelle@on-line.de

1998 年 6 月 06 日
0.0.1

この文書は &konsole; バージョン 0.8.6 についての説明です。 この文書はまだ未完成であることに注意してください。

## はじめに

&konsole; は K デスクトップ環境用の X 端末エミュレーションです。

グラフィカル ユーザ インターフェースにおける端末エミュレーションの 意義は、元来キャラクタ端末の接続されたコンピュータで実行するように 設計されたアプリケーションにディスプレイを与えることです。

フリーの X 端末について簡単に分類すると、2 種類に分けることができます。 原型である xterm、 これは X 自体よりも前(1、2 か月)に書かれました。 それと xvt、 これは軽量の xterm クローンで、現在利用できる 多くの派生型(eterm が有名)のベースになっています。 &konsole; はそれから 10 年を経て初めて基礎から書き直されました。その間に xterm は死に 至るまで改造が加えられましたが(`README` は次の言葉で始まっています: 「汝ここに入る者は、全ての希望を捨てよ」)、&konsole; は現在の技術と X の理解の上に成り立つ新たな出発点を提供します。

## 概要

起動されると、&konsole; はクライアント アプリケーション(デフォルトではシェル)を開始します。 クライアントの全ての出力は &konsole; ウィンドウの中に行われ、 一方でキーボードの打鍵やマウスのクリックはクライアントに転送されます。

このようにして、&konsole; のほとんどの動作は、 その中で現に実行しているアプリケーションによって実質的に制御されます。 &konsole; には、特別な機能が若干追加されています。これらの追加機能は一般的なもので、 以下に説明することはちゃんと作られた他の端末エミュレーションにも適用できます。

ヒストリ バッファ

  画面の外に流れ出たテキストは、後でもう一度見ることができるように、ヒストリ バッファに保存されます。 現状では 100 行がこのバッファに保存されます。 バッファに格納されたテキストを変更することはできませんが、 それを見たり一部あるいは全体をクリップボードにコピーしたりすることができます。

キーボード

  Shift PgUp、 Shift PgDn、 Shift Up、 Shift Down、 キーはヒストリ バッファの中をスクロールするのに使用します。 その他のキー入力は全てエミュレーションの中で実行されているアプリケーションに渡されます。 ただしデッド キーの存在には注意してください。

マウス

  この端末の全ての機能を利用するには 3 ボタンマウスが必要です。 それぞれのボタンには異なる機能が割り当てられています:

  左ボタン

    左ボタン クリックは、アプリケーションがマウスに対応していれば、 イベントとしてアプリケーションに転送されます。 プログラムがマウスクリックに反応する時には、&konsole; はそのことを矢印カーソルで表示します。 そうでない場合は、I ビーム (バー) カーソルが表示されます。

    マウス非対応のアプリケーションで左ボタンを押さえてドラッグすると、テキスト範囲がマークされます。 ドラッグ中は、マークされたテキストが目で見て確認できるように反転表示されます。 ボタンが離されると、マークされたテキストはクリップボードにコピーされ、 &konsole; や他のアプリケーションで後から利用することができます。

    通常は、各行の終りに改行キャラクタが挿入されます。 ソースコードやあるコマンドの出力をカット アンド ペーストする場合は、これで普通うまくいきます。 一般的なテキストの場合には、行替えが重要でないことも多くあります。 テキストを文字のストリームとして扱って、他のアプリケーションにペーストした時点で自動的に整形されるようにしたい場合があります。 テキスト ストリーム モードで選択するには、[Ctrl] キーを押さえながら、普通に選択してください。

    マーク中にテキスト領域の上端または下端に触れると、&konsole; は上または下にスクロールし、 この時ヒストリ バッファのテキストが現れます。 マウスの動きを止めると、スクロールは直ちに止まります。

    マウスを離すと、&konsole; はクリップボードにコピーされたテキストが見えるようにマークした領域を反転したままにします。 マークした領域の表示は、クリップボードの内容が変化した時、マークした領域中のテキストが変化した時、 あるいは左マウス ボタンをクリックした時に、元に戻ります。

    マウス対応アプリケーションでテキストをマークするには、クリックする 際に [Shift] キーを押さなければなりません。

  中央ボタン

    中央ボタンを押すと、現在クリップボードにあるテキストをコピーします。 この時、クリップボードの内容はキーボードからタイプしたかのように入力されるので、 エミュレーション内で実行しているアプリケーションによって、反応の仕方が違います。

  右ボタン

    右ボタンは設定メニューを表示します。 さらに、[Shift] や [Ctrl] キーを組み合わせて使うと、メニューの別の部分が表示されます。

セッション

  &konsole; は同時に複数のセッション(プログラム)を実行する機能を提供します。 新しいセッションは「ファイル」メニューから開始します。 セッション間の切り替えは「セッション」メニューで行います。 これらのメニューは [Shift] または [Ctrl] キーと組み合わせてマウスの右ボタンメニューの形で利用することもできます。

  セッション メニューは各マシンの要求に合わせて自由に設定することができます。 (その方法についての説明が欠けています。 `/opt/kde/share/apps/konsole` の中に例があるので、参照してください。)

## 設定

「オプション」メニューでは、&konsole; の様々な概観を制御することができます。 この設定は、メニュー バーから、あるいは &konsole; のウィンドウ内でマウスの右ボタンをクリックすることにより利用できます。

メニューバー

  このオプションをチェックすると、ウィンドウ上部にメニューバーが用意されます。 通常の動作とは異なり、このメニューバーは「ホット キー」を受け付けません。 クライアント アプリケーションでAltキーと組み合わせたキー入力ができなくなるのを避けるためです。

フレーム

  枠の装飾の有無を選択します。

スクロールバー

  スクロールバーをつけることにより、ヒストリ バッファを操作する別の方法が使えるようになります。 クライアント アプリケーションの内部をスクロールする機能とは異なるので注意してください。 (しばしばそのように見えるのですが。)

フォント

  フォント メニューには 2 種類の全く別の調整方法を提供します。 第一に、サイズの異なるいくつかのフォントが表示されます。 この中から解像度と希望のウィンドウサイズに合ったフォントを選ぶことができます。 第二に、"Linux" フォントが追加されています。第一のものとはエンコード方法が異なります。 Linux コンソール エミュレーションを実行する場合にこのフォント セットが必要になります。

サイズ

  普通の方法でウィンドウのサイズを自由に変更することも可能ですが、 昔の、サイズに対する配慮がないプログラムを実行する時には &konsole; ウィンドウのサイズをそれに合わせた方がよいことがあります。 サイズメニューでは最もよく使われるサイズを選ぶことができます。これらのどれも合わない時には、 必要に合わせてスクリーンのサイズを変更してください。 サイズを変更すると、&konsole; は調整しやすいようにタイトル部にサイズを表示します。

スキーム

  このオプションではカラー スキームを選択することができます。 (スキームの作成方法の説明が欠けています。 `/opt/kde/share/apps/konsole` にある例を参照してください。)

主に歴史的な事情で、Linux を走らせているときには [Back Space]キーが [Ctrl]-H を発行しません。 (私の知っている限り、この特殊な振舞いに依存しているプログラムは emacs だけで、CTRL-H は 「ヘルプ」の働きをします。) 各アプリケーション毎では適切な設定を行うことができるので、emacs なら [F1] をヘルプ キーに当てるようにすることもできますが、 このような普通でないキーボードの使い方が伝統になっています。 でも心配する必要はありません。

- BSでDELを送信

オプションがチェックされていることを確認してください。

この時、&konsole; は [Back Space] キーが押された時に正規の BS キャラクタ (hex 08) の代わりに DEL キャラクタ (hex 7F) を送信します。 またこの時、[Delete] キーは DEL キャラクタ以外のコードを送信します。

以上のオプションの変更はすぐに反映されますが、今回実行しているものにだけ有効です。 調整した状態で今後も使用するには次のオプションをクリックしてください:

- オプションを保存

## インストール

&konsole; は 今は kdenonbeta パッケージの一部になっています。 このパッケージのメイン ディレクトリにある指示通りにコンパイル、 インストールできるはずです。

ここで問題が生じた場合は、次の インストールに関する問題 を参照してください。

## バグ、FAQ

バグ レポートを送る前に、他の X 端末を使って同じ問題が再現するか調べて、 それが &konsole; に固有の問題かどうかチェックしてください。

### インストールに関する問題

&konsole; は配布物に付属する特定のフォントを必要としますが、 インストール手順に root 権限が必要であるのは望ましくないという作者の意向があって、インストールされません。 フォントのインストールは手作業で行う必要があります。 詳細は `README.linux.console` を御覧ください。

### アプリケーションに関する問題

プログラムの中には X コンソール上で実行すると問題を生じるものが あります。

#### MC (midnight commander 4.1.21)

- エミュレーションが xterm の場合に限り、mc はサイズ変更イベントに(何もキーを押すことなく)反応し、 (xterm の)マウス イベントに反応します。 xterm のマウス イベントは固有のものではなく、例えば Linux コンソールでも同様に生成されます。

- ˆO (副スクリーンの表示)の後、mc はサブ シェルにサイズ変更イベントを伝達しなくなります。 xterm やその他の端末エミュレーションでも試してみてください。

- サブ シェルについては、さらにおかしな現象が見られます。 mc のパネルが表示されている時にウィンドウ サイズを変更すると、副スクリーンがなぜかおかしくなります (本物や偽物のプロンプトが現れます)。 アプリケーションが動作している最中にこのようなことをすると、さらにおかしくなります。

- パネルが表示されている間にサイズを変更すると、改行や時にはその他のキャラクタが送られます。

- 高負荷時に、テキストの一部が失われます。 テスト ディレクトリの中で取りこぼしに気が付くまで「さざ波」を立ててみてください。 私はこのバグを kvt、rxvt、 xterm を使って再現することができますし、 read(3)する時点で既にデータが紛失していることも確認していますから、ここで何か違う所につまづいているかもしれません。 このような現象は mc を実行している時にしか発生しないので、 私は mc のサブ シェル処理がこの現象を引き起こしているという確信を持っています。

- Linux コンソール エミュレーションを実行している時に、サイズ変更がうまく働きません。 特に、mc ではサブシェルにサイズ変更の情報が伝わりません。マウスにも反応しなくなります。

#### Vim 4.6

- 終了時に改行を出力します。このため、mc でデフォルト エディタとして同時に実行すると、 副スクリーンにおかしな絵が生じます。

#### dselect (Debian パッケージ マネージャ フロント エンド):

- 黒い背景を想定しています。 使用するときには "White on Black" のカラー スキームを選択してください。 Linux コンソール エミュレーションの下で実行すると、サイズ変更イベントをうまく処理することができません (セグメンテーション フォールト)。

### 壊れた Termcap / Terminfo データベース

ほとんどのアプリケーション(ncurses を使用するもの)は、 端末エミュレーションと対話するための知識をデータベースに入っている情報から得ていることに注意してください。ここが間違っていることがあります。 この場合にも、他のエミュレーションで同様の問題に遭遇することでしょう。

例えば、:

- debian 1.3.1 (Bo) は kdch1 エントリを欠いているため、DELETEキーが正しく働かないようです。 他のキーについても同じことが言えるかもしれません。

- mc 4.1.21 配布版には誤った hpa、vpa エントリが書かれた (`ESC` の後に `[` がない) xterm.ti が含まれています。おかしなことに、xterm ではこれでうまく動作するのです。 それは、特定の状況では誤りを含んだシーケンスを受け入れる機能が働くからです。 (`ESC Pn C` は `ESC [ Pn C` のように扱われます。ここで `C` は数字以外のものです。)

- このような事情のため、xterm.ti を同梱しておきました。(tic でコンパイルします。)

### BS、DEL キーの問題、よくあるキーボードの問題

かつてはデリート キーのない端末が存在しました。 この問題がLinux にも残り、今でも終らない悪夢になっています。 これらのキーを処理する必要のあった全てのプログラムはそれぞれ別々に回避する手段を取ってきました。 結局、今では設定の変更ができるように作られてあり、その結果、設定が誤っているという場合も起こり得るのです。 &konsole; でも同じです。

&konsole; は、「BSでDELを送信」オプションが有効になっている場合、 BS キーで DEL (0x7f)を、DEL キーで ESC&lsqb;3 を送信します。 これで典型的な Linux コンソールのように動作します。[Ctrl]-H (0x08) はアプリケーション プログラム、例えば典型的な emacs ヘルプで利用できるように残されています。

このオプションがセットされていないときには、BS キーで BS (0x08)を、DEL キーで DEL (0x7f) を送信します。これは正規の VT100 や IBM PC と同じです。

&lsqb; 各プログラムで BS=BS、DEL=DEL と設定することができる こと、デリート キーもない貧弱な端末は今日では伝説に残るのみである ことから、なぜ今でもこの BS ハックが広まっているのか、作者には 疑問です。]

ctrl-ˆ == ctrl- == ctrl-` == RS == 0x1e は、欧州用 キーボード マップがロードされている時にはタイプできません。 理由はこれらのキャラクタが全てプリフィックスであるためです。 (すなわち、その後に 2 番目のキャラクタが続きます)。X11 には これらのデッド キーがあることが知られています。

### カラー スキーム

カラー スキームについて嵐のような不満が寄せられたので、 &konsole; の最新版では設定変更可能なカラー スキームを提供しました。 これについての適切な文書はまだありません。

### フォント

(やや内容が古いです。 `README.linux.console` を調べてください。)

- VGA フォントは他のフォントとは異なるエンコード方法を使用しています。 そのため TERM=xterm として実行している場合はグラフィック キャラクタや国別キャラクタが表示されません。 これは dos(1) に最適で、TERM=linux の時にもある程度有効です。 このフォントの組み込みは実験的ですから、注意してください。

- 組み込まれている以外のフォントはターミナル アプリケーションには使えないようです。 これはピッチが不定であるためというより(実験的に実装してみました)、グラフィック サブセットが欠けているためです。 xfd(1x) で確認してみてください。

- 概してターミナルに適したフォント ファミリーが全く欠けているようです。 スケーラブルなターミナル フォントファミリーをご存知の方は、私に教えてください。

### セキュリティ

&konsole; は root-suid としてインストールしてもいいように作られてはいますが、 そのような使い方を意図している訳ではありません。 避けてください。 &konsole; は起動直後に特権をオフにします。 セキュア キーボード(X11)が実装されていないため、他のX11 アプリケーションが、 その気になれば、 &konsole; からのキーイベントを取得することができます。 トロイの木馬に注意してください。

&konsole; は疑似 tty を fchown(2) しません。これは、マルチ ユーザ環境においてはあなたの(rootの)セッションを盗み見することが できるということです。新しい Linux カーネル (2.1/2.2) では、 &konsole; はそのような試みを退けるようになっています。 それができるかできないかを確かめるために、次の手順を &konsole; から試してみてください:

    $ tty
    /dev/ttyp3

他の(非 root)ユーザで、次のコマンドを試します:

    $ echo 'test' > /dev/ttyp3

&konsole; のセッション内に文字列を受信したら、そのセッションは安全ではありません。

その他の UNIX では、この抜け穴をある程度塞げるようですが、 その解決法では &konsole; を root/suid でインストールする必要があります。 全てのインストールをそのようにできる訳ではないことは分かっていますが、 私にはそれをどうすることもできません。

### 既知のバグ (&konsole;-0.8.6)

- [Num Lock] キーがセットされていない時には、キーパッドのキーを押しても何も起こりません。 これは Qt から受信するものがそのまま反映されています。 全てのキーが &num;ffff として入ってきます。 これはキー押下を取得するために装備しなければならない eventFilterに由来しているようです。

- TODO を見て、機能が不足しているために見える「バグ」も 確認してください。

### 実装されない機能

utmp エントリ

  utmp は現在誰がログ オンしているかを通知するデータベースです。 これは who、finger、wall、talk などのプログラムが、 システム上のユーザの一覧を作り連絡を取るために利用します。

  X 端末を利用しているときには、これが意味を持ちません。 それは誰かが通知を送る先となる本物の端末が存在する訳ではないからです。

  この問題の適切は解決法は、xdm/kdm セッション マネージャが utmp に記録を作ることでしょう。さらに、適当な通知/チャット プログラム (ktalk?) が X セッション開始時に自動的に実行されるようにし、 コンソールを使用している人物への通信路を確保するのです。