TSET(1) — UNIX Programmer’s Manual
名称
tset − 端末に依存した初期設定をする
形式
tset [ options ] [ −m [ ident ] [ test baudrate ]:type ] ... [ type ] reset [ options ] [ −m [ ident ] [ test baudrate ]:type ] ... [ type ]
解説
tset は、 最初に UNIX システムにログインしたときに端末をセットアップします。 これは、 elase(消去)文字や kill 文字のセッティング、 delay(遅延)のセットやリセット、 端末を適切に初期化するのに必要なあらゆるシーケンスの送信、 などのような端末に依存した処理を行います。 最初に端末が属する type を決め、 次に必要な初期設定とモードセッティングを行います。 各 UNIX ポートに接続する端末の タイプ は、 /etc/ttys(5) データベースに指定されています。 端末のタイプ名は、 termcap(5) データベースの中から見つけることができます。 ポートが特定の端末と固定的に接続されない場合(端末と直結していない場合)、 dialup のように妥当な一般識別名を指定します。
引数が何も指定されない場合、 tset は単に、 環境変数 TERM から端末タイプを読み取り、 端末を再度初期設定します。 本マニュアルの以降には、 モードおよび環境の初期設定、 login 時に行われる典型的な処理、 そして、 初期設定時に端末タイプを決めたり端末モードをセットアップするのに 使用されるオプションについて述べてあります。
スタートアップスクリプト中に使用する時 (sh(1) ユーザでは .profile、 また csh(1) ユーザでは .login)、 端末をポートに直接接続しない場合、 通常使用する端末タイプの情報を与えるのが望ましいことです。 こうしたポートは、 /etc/ttys で dialup か plugboard か arpanet などのように識別されています。 このポートでどのタイプの端末を通常使用するかを指定するには、 −m (map) オプションフラグを適切なポートタイプ識別名、 オプショナルなボーレート設定、 端末タイプの後に続けます (この結果、 いくつかの条件から端末タイプへ“map”します。 これは、 tset に“私がこのポートから入った時には、 あの種類の端末を使用していると想定してください”と伝えることです)。 2つ以上のマッピングが指定されれば、 最初に適用できるマッピングが優先されます。 ポートタイプ識別名を間違えた時には、 すべての識別名にマッチします。 termcap 中に与えられている代わりの一般名はすべて、 識別名として使用できます。
baudrate は stty(1) で指定され、 (制御端末であるべき)診断出力のスピードと比較されます。 ボーレート test は、 >、 @、 <、 ! の組合せです。 @ は “at”の意味で、 ! はテストのセンスを反転します。 メタキャラクタの問題を避けるには、 −m の引数全体を \’ 文字で囲むのが一番良い方法でしょう。 csh(1) のユーザはさらに、 ここで使用する ! の前に \ を置かなければなりません。
したがって
tset −m ´dialup>300:adm3a´ −m dialup:dw2 −m ´plugboard:?adm3a´ により端末タイプは、 使用ポートが 300 ボーより速い速さでダイアルアップをする場合、 adm3a にセットします。 ポートが(別の)ダイアルアップの場合 (すなわち 300 ボー以下)は dw2 にセットします (注 : ここに述べた例は、 テキスト処理のために、 1行以上になりました。 実際に tset コマンドをタイプする場合、 全部を 1行に入力しなければなりません)。 tset で最終的に指定された type が疑問符で始まる場合、 ユーザは本当にそのタイプでよいかどうかを問われます。 復帰改行だけの応答はそのタイプを使用することを意味します。 これ以外の場合、 代わりに使用する別のタイプを入力できます。 したがって、 上記の場合、 プラグボードポートを使用している時、 ユーザは実際に adm3a を使用しているかどうかを問い合わされます。
マッピングが適用できなくて、 −m が前置きしてない最後の type オプションがコマンドライン上にあれば、 このタイプを使用します。 これ以外の場合は、 /etc/ttys データベースから検索したタイプが、 端末タイプに用いられます。
これは常に、 端末が直接接続されているポートの場合に限ります。 最終的に tset で決定された端末タイプと その端末の能力に関する情報をシェルの環境に返すことが普通は望ましでしょう。 これは − オプションを使って、 Bourne shell、すなわち sh(1) においては次のようにして実現できます。
export TERM; TERM=‘tset − options...‘ また、 C shell、 csh(1) を使用している場合、
setenv TERM ‘tset − options...‘
また、 csh では、 以下のコマンドを .login ファイルに使用して、 環境変数の TERM と TERMCAP と TTYPE を同時に 初期設定することをお薦めします。
eval ‘tset −s options...‘
また、 これは .cshrc 中で別名を作るのにも便利です。
alias tset ’eval ‘tset −s \!∗‘’
こうしておくと、 次のコマンド
tset 2621
でいつでも端末と環境をセットすることができます。
Bourne Shell ユーザへの注意 : この別名効果をシェルスクリプトで得ることは できません。 なぜならば、 シェルスクリプトが親プロセスの環境を設定できないからです (プロセスが親プロセスの環境を設定できるのなら、 このナンセンスは最初の場所に必要ありません)。
これらのコマンドにより、 tset は、 環境中の変数 TERM に端末の名前を設定することができます。 environ(7) を参照。
一旦端末タイプが分かれば、 tset は端末ドライバのモードセッティングをします。 これには通常、 端末へのイニシャライズシーケンスの送信、 一文字消去 (およびラインキル(行消去)文字) の設定、 および特殊文字遅延の設定などがあります。 タブとニューラインの変更は、 端末初期設定シーケンスの伝送の間オフにされています。
バックスペースはできるが、 オーバーストライクができない端末 (CRT のような) 上で、 消去文字がデフォルトの消去文字であるとき (標準システムでは‘#’)、 消去文字が BACKSPACE (control-H) に変わります。
オプションは以下の通りです。
−ec 消去文字を、 すべての端末上で文字 c にセットします。 デフォルトでは、 端末上のバックスペース文字、 通常 ^H になります。 c 文字は、 直接タイプすることも、 またここで使われたハット表示を使用して、 入力することもできます。
−kc −e と似ていますが、 消去文字ではなく キル(行消去)文字です。 c のデフォルトは ^X (単純に歴史的な理由で)です。 キル文字は、 −k を指定しないと左 1文字のみ単独になります。 ハット表示はこのオプションでも使用できます。
−ic −e と似ていますが、 消去文字ではなく割り込み文字です。 c のデフォルトは ^C です。 ハット表示はこのオプションでも使用できます。
− 最終的に決められた端末の名前を、 標準出力に出力します。 これはシェルで捕まえて、 環境変数 TERM に置かれます。
−s 最終的に決定した端末の名前に基づいて、 環境変数 TERM と TERMCAP と TTYPE を初期設定する csh の一連のコマンドを表示します。
−r 環境変数 TTYPE と TERM の内容を表示します。
−n NEWS-OS (Berkeley 4BSD) tty ドライバを使用するシステムで、 この端末に対して新しい tty ドライバモードを 初期設定する必要があることを指定します。 CRT に対しては、 ボーレートが 1200 以上の場合のみ、 CRTERASE と CRTKILL モードを設定します。 詳細については tty(4) を参照してください。
−I 端末初期設定文字列の送信を抑制します。
−Q “Erase set to”および“Kill set to”のメッセージの印字を抑制します。
tset が reset として呼び出される場合、 cooked とエコーモードをセットし、 cbreak と ローモードをオフし、 ニューラインの置き換えをオンして、 端末ディペンデント処理が行われる前に、 スペシャルキャラクタを識別できる状態に復元します。 NULL または “−1” であることがわかった スペシャルキャラクタは、 そのデフォルト値にリセットします。 tset に対するすべての引数はリセットにも使用することができます。
これは、 プログラムが端末をおかしな状態にして終了したときに、 最も役にたちます。 <CR> はこの状態では作動しないので、 作動させるためには “<LF>reset<LF>” と タイプしなければならないかも知れません。 このうちどれもエコーしないことがあります。
例
ここでは Bourne shell と − オプションの使用についてとり上げます。 csh を使用していれば、 上記のバリエーションのうち 1つを使ってください。 .profile または .loginにおける典型的な tset には −e と −k オプションも使い、 また、 しばしば −n や −Q オプションも使うことがあります。 これらのオプションについては、 紙面の都合でここには書いてありません
(注 : ここに示した例には、 テキスト処理の理由から、 1行以上に渡ったものもあります。 実際に tset コマンドをタイプするとき、 コマンド全体を 1行に入力しなければなりません)。
今、 あなたは 2621 を使っています。 これは手でタイプするのには適していますが、 常に 2621 を使うのでない限り、 .profile用には向きません
export TERM; TERM=‘tset − 2621‘
自宅からはダイアルアップで h19 を使用しますが、 オフィスの端末は直接接続されており、 /etc/ttys が管理しています。
export TERM; TERM=‘tset − −m dialup:h19‘
何にでも接続するスイッチがあり、 あなたがログインするポートにキーをかけることをほとんど不可能にしています。 オフィスでは 9600 ボーで vt100 を使い、 家からは 2621 で、 1200 ボーでスイッチポートにダイアルアップをします。 時には別の端末を使うこともあります。 そこで、 どの端末タイプを使っているか手早く確認できるように問い合わせたいものです。 ただし 1200 ボーのとき、 あなたは常に 2621 です。 ここで注意することは、 疑問符を付けることと、 シェルの解釈から護るために疑問符 ? と > を引用符で囲むことです。
export TERM; TERM=‘tset − −m ’switch>1200:?vt100’ −m ’switch<=1200:2621’‘
これまでの入力例はすべて、 どの条件にも合わない場合、 /etc/ttys で指定された端末タイプにフォールバックされます。 いつも電話をかけ、 同じボーレートで、 たくさんの異なった種類の端末を 使用するなら次の例が適しています。 最も一般的に使う端末は adm3a です。 これはいつも、 デフォルトを adm3a にして、 あなたがどの端末で作業をしているかを問い合わせします。
export TERM; TERM=‘tset − ?adm3a‘
ファイル /etc/ttys が適切に設定されていなくて、 ボーレートに関してキー入力したければ、 以下を使用します。
export TERM; TERM=‘tset − −m ’>1200:vt100’ 2621‘
次が、 tset の威力を説明し、 ずっと以前にこれを作った人を絶望的に困らせるという架空の例です。 あなたは 1200 ボーあるいはそれ以下で concept100 に、 時にはスイッチポートを媒体としたり定期的なダイヤル呼び出しを通じて、 電話で接続します。 1200 より速い速度でスイッチポートを通じてさまざまな端末を使用しますが、 たいていはオフィス内の vt100 端末で行います。 しかしあなたがかつて通っていた大学から、 ARPANET を通じてログインすることもあります。 この場合は、 dm2500 をエミュレートしている ALTO に使っています。 さらに、 すべてが適切に /ect/ttys に書かれている、 コンソールのようなさまざまな固定配線のポートで ログインすることもあります。 消去文字を control-H に、 キル文字を control-U にしたいが、 “Erase set to Backspace, Kill set to Control U”というメッセージ を tset に表示させないようにしたい。
export TERM; TERM=‘tset −e −k^U −Q − −m ’switch<=1200:concept100’ −m ’switch:?vt100’ −m dialup:concept100 −m arpanet:dm2500‘
関連ファイル
/etc/ttysポート名を端末タイプにマッチするデータベース
/etc/termcap端末機能データベース
関連事項
csh(1), sh(1), stty(1), ttys(5), termcap(5), environ(7)
バグ
tset コマンドは、 UNIX システムを使い始めるときにユーザがマスタしなければならない 最初のコマンドの一つです。 残念なことに、これは最も複雑なことの一つです。 最大の理由は、ログインシェルの環境をセットしてやるのに、 ユーザが行なわなければならない余分な努力があるからです。 login(1) プログラムがうまくやってのけるか、 デフォルトシェルの代わりのようなものを作るべきか、 それとも親の環境を設定する方法があるべきか、 何とかこれを簡単にしなければなりません。
このプログラムは、 消去、 割り込み、 そしてラインキル文字を個人で選択することを洞察できません。 そこでこのセットをローカルシステム標準に任せます。
NEWS-OSRelease 3.3