Plan 9初心者ガイド

Michael A. Covington
2008年5月28日

訳者注

オリジナルはA Plan 9 Newbie's Guideである。著者のMichael Covington氏はUniv. of Georgiaの学生で、インターンか何かでCoraidで働いたときに書いたようだの先生で、Coraidのために書いたものだ。訳したバージョンはちょっと古いものなので、できればオリジナルを参照されたい。

2008年末に少し訳したが、今は完訳する時間がないので、とりあえず公開してしまうことにした。

はじめに

この文書は何か?

これは私自身がCoraidで始めた経験に基づいた、Plan 9オペレーティングシステムユーザインタフェースに関するクイックスタートガイドである。具体的には、Coraidで実際に使った設定を記述している。UNIXと商用GUIWindowsMacOS、最近のLinux)に関するいくらかの知識を前提としている。

これはPlan 9の技術ガイドではない。あなたがPlan 9の世界に入るのにとりあえず必要なことを教えるための「戸惑いに対するガイド」に過ぎない。

ここで提供する情報は完全ではなく、私の目的は有用なサブセットを提供することだ。したがって、いくつかのメニュ項目やコマンド、すぐに必要にならないものは割愛した。最終的には公式文書を読むことになるだろう。

Plan 9とは何か?

Plan 9は、ベル研究所で開発された、実験的でUNIXライクなオペレーティングシステムであり、オープンソースフリーウェアとしてリリースされている。ハードウェア要件は、Windows 95と同じくらい(例えば、486で32 MB RAM搭載)で、しばしば組み込みシステムでも使われている。

Unicibus ipsis Unicior

UNIX自身よりもUNIXらしい」という意味の出来の悪いラテン語であり(cf. Romanis ipsis Romanior)、Plan 9とはどんなものであるかを要約している。Plan 9は初期のUNIXと同じアイデア、つまり単純さ、簡潔さ、直交性、を基にしているが、(私が思うに)今日一般的なUNIX実装よりもUNIXの精神に近いやり方で実装している。具体的には、

  • NFSやSAMBAなどの代わりに、通常たった一つのファイル共有プロトコル 9Pが存在し、それはユーザに透過的である。名前空間全体をあるCPUから別のものに移すことができる。drawtermなどのターミナルプログラムを使うとき、ローカルPCは/mnt/termのサブディレクトリに、すでにそこに何があろうともマウントされる。
  • OSとハードウェアに関するより多くのものがファイルシステム上に見える。例えば、/dev/screenはスクリーン、/dev/mouseはマウス、そして/dev/timeは時計である。環境変数は/env以下の「ファイル」である。制御設定は、システムコール(IOCTL)を介すよりもむしろスペシャルファイルに書き込むことによって行うことができる。
  • ネイティブ文字セットはUTF-8、つまりASCIIに(多くの)ユニコードのためのマルチバイトエンコーディングを加えたものである。いくつかの(UNIXから移植された)ソフトウェアはASCIIしか認識しない。
  • GUIは非常に単純である。最小のプログラミングと、それゆえに最大の信頼性を持つGUIをいかに構築するかという例である。

一般的に、Plan 9では同じことをするための複数の方法は存在しない。したがってあなたがやろうとしていることの最善の方法を見つけることに、もっと自信を持つことができる。UNIXがそうであるように、主なアーキテクチャ原理は単純な機能の直交した組合せである。

分かった

マウス操作は必須である。例えば、acmeエディタはキーボードから頻繁に手を離すことなく使うことはできない。

3ボタンマウスが前提とされている。必要であれば、シフトキーを押しながら右ボタンをクリックすることで中央ボタンを模擬できる。一般的には次の通りである。

  • 左ボタンはカーソルを動かすかテキストを選択するため
  • 中央ボタンはメニュを選択するため
  • 右ボタンはより高水準の制御操作のため
  • スクロールホイールがあれば、テキストを上下にスクロールするため

より詳細はあなたが実行するソフトウェアに依存する。

本ドキュメントでは、ボタンを左、中央、右と呼ぶが、Plan 9では通常1、2、3と呼ばれる。

キーボードに関して言うと、↑と↓キーはカーソルを1行上下に移動させない。その代わり、PgUpやPgDnのように表示されているテキストをスクロールするだけである。カーソルを1行上下に移動させるキーはない(←や→キーはカーソルを左右に移動させる)。

Deleteキーは文字を削除せずに、(他のオペレーティングシステムにおけるCtl-CやBreakのように)例外を割込ませる。テキストを削除するには、それを選択して、Backspaceを押下する(Macintoshでは、メインキーのDeleteキーはBackspaceであり、HomeやEndに近い方がDeleteになる*1)。

Acmeエディタでは、Delメニュを選択しても選択されたテキストは削除されず、編集ウィンドウ!が削除(クローズ)される。Cutを使うと選択部分は削除され、そしてsnarfバッファにコピーされる。

ログインとログアウト

ログインプロセスはUNIXに似ている。ターミナルはそれ自身、Plan 9が動作しているワークステーションのようだ。drawtermのようなPCターミナルプログラムを使うのであれば、認証サーバと同様にログインしたいサーバを指定しなさい。

ログアウトコマンドはない。アプリケーションプログラムを終了するだけで、ワークステーションとの接続が切れ、終了する。

ジャーゴン

以下の用語は、Plan 9環境の外では、一般的でない。

chord 一つ以上のマウスボタンを同時に押下すること(Acmeで使用する)

put ディスクに保存する

rune ユニコード文字(1つかそれ以上のUTF-8バイトと一致する)

snarf snarfバッファ(Windowsクリップボードと同等)にコピーする

sweep ボタンを押下したままテキストを横切るようにマウスを移動すること

zerox ウィンドウをその内容を複製する

rioウィンドウシステム

Plan 9にログオンすると、(テキスト)コンソールモードにいるかもしれないが、大抵は/usr/username/lib/profileファイルのプロファイルはすぐにrioウィンドウシステム(8/12と呼ばれた初期のウィンドウシステムから置き換えられた)を起動するようになっているだろう。
Rioは何もない灰色のスクリーンが初期画面なので、新参者を当惑させる(図1)。
何かを始めるには、灰色の表面のどこでもいいから右クリックして、Newを選択する(図2)。右マウスボタンを離し、再度押して、スクリーンを横切るようにドラッグすると、あなたがやった通りに矩形が現れる。ほら、ウィンドウができた(図3)。あなたが欲しいだけ作ることができる。ウィンドウを左クリックすると、前面に移動する。

図1:(ターミナルウィンドウ内の)rioの起動スクリーン


図2:Newで右クリックして、ウィンドウを開くために右ドラッグ


図3:rio内のウィンドウ

キーボードの使い方

rioに「端末制御」や「カーソル制御」はない。ウィンドウとキーボードは単に文字ストリームである。ウィンドウでは、ストリームの部分文字列を選択でき(ちょうど他のGUIのように)、選択がゼロ長であれば、カーソルや挿入ポイントとして振る舞う(再び、ちょうど他のGUIのように)。あなたのタイプしたものは常に選択されたテキストを置き換える。

→と←キーによって、カーソルが右と左へ移動する。Ctrl-Aは行頭、または入力位置(例えば、入力可能な最初の位置)へ移動する。同様にCtrl-Eは行末に移動する。バックスペースは左側から1文字削除する。Ctrl-Uは行頭からカーソルまでを削除し、Ctrl-Wは1文字の代わりに1ワードを削除する。

スクロールしない!

rioとその他のコンソールウィンドウの最大の違いは、rioでは、出力がウィンドウの底辺まで流れると、ウィンドウがスクロールしないことである。その代わり、出力中のプロセスはあなたが↓やPgDn、マウスを使うことで、スクロールダウンするまで、ブロックされる。

これは、スクリーンに送られる文字のすべてを組み立てる| moreのようなものだ。この振る舞いを本当に好まないならば、ウィンドウで中央クリックして、(メニュから)Scrollを選択するか、rioの代わりにrio -sを実行するようにプロファイルを変えることである。

rioでのマウスの使い方

ウィンドウを前面に移動するには左クリック。

ウィンドウをリサイズするにはその端や角を左ドラッグ。

ウィンドウに収まらないテキストを保持している場合は、左側にスクロールバーが表示される。スクロールバーをマウスを使い、左クリックで上スクロール、左クリックで下スクロール、中央ドラッグで上下にスクロールできる。↑と↓キーを使ってもスクロールできる。

ウィンドウを消すには、右クリックして、(メニュから)Deleteを選択し、ウィンドウを再度右クリックする。

左ボタンはテキストの選択にも使われる。シングルクリックで、その場所にカーソルが移動する(これはゼロ長選択である)。ダブルクリックでワード全体が選択される。ワード以上を選択するには、クリックしてドラッグする。また、引用符や括弧で囲まれた文字列は、引用符や括弧をダブルクリックすることで選択できる。

他のGUIのように、あなたがタイプしたとき、それは選択されたものを置き換える。

中央ボタンは次のメニュを表示する。

cut 選択箇所を削除し、snarfバッファ(クリップボード)に入れる。

paste 現在の挿入ポイントにsnarfバッファの中身を貼付ける。

snarf 選択箇所をsnarfバッファにコピーする。

plumb 選択箇所をplumberプロセス間通信システムに送る。

send snarfバッファの中身をウィンドウの出力ポイント(現在の選択箇所ではなく、ウィンドウのテキストの終わりである)の後に貼付け、Enterキーの押下を模擬する。これはコマンドをシステムに投げる手っ取り早い方法である。

scroll テキストをウィンドウの底辺よりも書こうとしたときに、自動的にスクロールするかのトグル。

ホールドモード

通常、他のオペレーティングシステムのように、Enterを押下すると、タイプした入力は実行中のプログラムに送られる。しかし、「ホールドモード」では、何行もの入力を編集のために、それらの処理するために合図を送るまで保持する。

ホールドモードでは、スクリーンにタイプされているものが青色に変わる。ホールドモードはEscを押下することで開始、停止する。mailなどのプログラムでは、入力中は自動的にホールドモードになり、e-mailを送信するときは、ホールドモードを抜けるためにEscを押下し、ファイルの終端を模擬するためにCtrl-Dを押下しなければならない。

右ボタンについてはすでに述べたが、主にウィンドウの生成、消去に使う。rioの詳細に関しては、コマンドman rioをタイプしなさい。これはUNIXmanコマンドと同じように動作する。

acmeフルスクリーンエディタ

Niklaus WirthのOberonシステムにインスパイアされた、acmeは必要最低限のフルクリーン編集、開発システムである。操作は図4のようになる。


図4:acme編集ウィンドウ

acmeでのタイピング

acmeは想像しているよりずっとプレーンなテキストウィンドウである。テキスト選択やスクロールはrioと同じように動作する。ドロップダウンメニュはなく、上部のコマンドは中央クリックで実行される。

クイックスタート - ファイルの作り方と編集の仕方
カラムとパネル(acmeウィンドウ)


図5:acmeの左上のメニュ(タグ)


図6:acmeでファイルを閲覧

ファイルとディレクトリを閲覧する
編集コマンド
マウスの使い方

パーソナルコンピュータとの通信

LinuxWindowsMacOSシステムからPlan9システムへアクセスするために、drawtermと呼ばれるターミナルエミュレータhttp://swtch.comから入手可能)が利用できる。普段は、正しいCPUサーバと認証サーバを引数にdrawtermを実行するために、次のようなスクリプトを書くとよい。

drawterm -c minooka.coraid.com -a tyty.coraid.com

Windowsでは、drawterm自身にウィンドウを与えるために、コマンドの先頭に「start /w」を追加するとよい。

drawtermが起動したとき、あなたのPC上のディレクトリに「chdirできない」とエラーが出るだろう。これは無視して問題ない。

drawtermは、普通にウィンドウを開くことができたりと、Plan 9システムのコンソールのように振る舞う。さらに、drawtermはあなたのPCの(最初の)ハードディスクのルートディレクトリを/mnt/termに、そこにすでにマウント済みのものに加えて、マウントする。これはPlan 9とPC間で透過的なコピーを可能にする。

drawtermWindows版には、PCのハードディスクに読み書きできるが、ディレクトリのリストを得られないという、既知の問題がある。つまり、

lc /mnt/term/windows

は何も表示しないが、PC上の特定のファイルを名前で指定して読み書きすることはできる。これを確認するために、次のようにPlan 9コマンドを実行して、myfile.txtが結局どこにできるか見てみよう。

date > /mnt/term/myfile.txt

ドキュメントを読む

troffでドキュメントを書く

troffの実行
troffマークアップの種類
いくつかの重要だがはっきりしないコード

Cでプログラミング

コンパイラの実行方法

Plan 9は標準Cを多少拡張したバージョンをサポートしている。ここにmyfirst.cという名前のサンプルプログラムを示す。

#include <u.h>
#include <libc.h>

void main()
{
    print("Greetings, earthlings!\n");
}

コンパイラとリンカーの名前はCPUアーキテクチャに依存する。386の場合は、8cと8lになる(小文字のLで、数字の1ではない)。

minooka# 8c myfirst.c
minooka# 8l -o myfirst myfirst.8
minooka# myfirst
Greetings, earthlings!

最初のステップではmyfirst.8が生成される。次のステップでは、myfirstを作るように指定しなければ、8.outが生成される。三番目のステップでは、./myfirstと書く必要がない。これはPlan9では、カレントディレクトリがすでにパスに含まれているからである。

u.hについて

サンプルプログラムの次の行

#include <u.h>

は、ucharのサイズなど、アーキテクチャ依存の機能を定義していて、常に他のincludeよりも前にインクルードすべきである。これや他のヘッダについてより詳しく知りたい場合は、man 2 introを参照されたい。

さらなる情報は

Cコンパイラ、特にユニコード互換I/Oシステムについてもっと知るには、あなたのPlan 9システム上の/sys/doc/comp.ps/sys/doc/compiler.psを参照されたい。

陰険なやり方:pcc

もしUNIXプログラムをコンパイルして、Plan 9で実行したい、そして最大の性能を得ることに興味がないのであれば、POSIX互換コンパイラpccを使うことができる。この場合は、stdio.hなどのヘッダやprintfなどの関数が使われ、u.hに関しては除外される。コンパイルと実行は次の通りである。

minooka# pcc -o mysecond mysecond.c
minooka# mysecond
Hello, world!

これはPlan 9POSIX互換サブシステムであるAPEを使っている。

*1:訳注:MacBookだとFn+DeleteがDeleteになる。