web-dev-qa-db-ja.com

TTYコンソールの幅を変更する方法は?

私はFreeBSDを使っています。

コンソールの幅を設定したい(sshやtelnetではなくコンソールのみ)。

私はこのコマンドを使用しました:

stty cols 132

これはコンソールだけで機能しますか、それともすべての接続(コンソール、ssh、telnet)で機能しますか?

1
F.M

sttyは、実際には端末のサイズを変更しません。それは単にライン分野に記録されたいくつかの値を変更するだけです。端末ディスプレイの実際の高さと幅の変更は、コンソールデバイスが実際の端末、カーネル仮想端末、またはユーザースペース仮想端末のいずれであるかによって異なるメカニズムを使用して行われます。

実際の端末

コンソールは、シリアルデバイスに接続された、正直に忠実な実際の端末にすることができます。その場合、端末にディスプレイのサイズを変更するように指示するには、制御シーケンスを何らかの方法で送信し、ワイヤを端末に送信します。この制御シーケンスは、端末タイプによって異なります。さらに、それを手軽に提供するtermcap機能はありません。

通常ですが、シリアル回線のもう一方の端に実際にある端末に依存するわけではありませんが、端末はDEC VT340以降が従うDECプライベート制御シーケンスに従います:DECSLPP/DECSNLSおよびDECSCPPnoshツールセット の_console-resize_(a.k.a。resizecons)コマンドはそれらを出力します:

$ resizecons 80x25

ほとんどの実際の端末は、実際に制定される列と行の組み合わせを、かなり制限された事前定義された端末サイズのセットに制限していることに注意してください。従来、DEC VTは、たとえば80列または132列のみをサポートします。

実際の端末とは、端末の表示サイズを変更した後、sttyを実行して、回線分野の端末サイズの概念を明示的に更新する必要がある場合です。ライン規律は制御シーケンスについて何も知らず、端末デバイス自体はライン規律に影響を与える方法がなく、実際、オペレーティングシステムと通信していることがhasなどの概念であるという知識はありません。ライン規律。

ユーザースペース仮想端末

Noshツールセットのユーザー空間仮想端末は、同じDECプライベート制御シーケンスに従い、_console-resize_コマンドで同様に調整できます。実際の端末と同様に、制御シーケンスによって変更されるまで、常に同じモードで開始されます。実際の端末とは異なりますが、置き換えるように設計されているカーネル仮想端末と同様に、多くの実際の端末の80×24モードではなく、80×25モードで開始します。

同様に、実際の端末とは異なりますが、カーネル仮想端末と同様に、サイズ変更操作は回線規律自体を更新するため、端末にサイズを変更するように指示した後、sttyを呼び出して回線規律を更新する必要はありません。

実端末とカーネル仮想端末の両方とは異なり、2×2から65535×65535までの、制御シーケンスで許可されるはるかに広い範囲のサイズをサポートします。

これにより、カーネル仮想端末が表示されます。

カーネル仮想端末

これらは、カーネル自体に組み込まれているターミナルエミュレータによって提供されるものです。マニュアルを読んで、コンソール(カーネル診断とトレースが出力され、_/dev/console_に出力される場所として定義されている)に気付くまで、これらはあなたが素朴に思うかもしれないものですthink送信される)は、シリアルデバイスを介した実際の端末(comconsole)、カーネル仮想端末(vidconsole)、またはまったくない(nullconsole)のいずれかです。

これらは制御シーケンスで操作されません。むしろ、そのような端末デバイスを開き、デバイス固有のioctl()要求を実行します。幸いなことに、より一般的なioctl()リクエストのいくつかをラップするツールがあり、独自のプログラムを作成しなくてもアクセスできるようになっています。

ログインセッションから変更するカーネル仮想端末上自体、またはそのような端末デバイスからリダイレクトされた標準入力:

  1. 使用可能なモードのリストを取得します:
    $ vidcontrol -iモード
  2. 適切な行と列を持つモードを決定します。これがたまたま私のマシンの1つで、8x16フォントの場合、160列と64行です:
    283(0x11b)0x0000001f G 1280x1024x32 D 8x16 0xa0000 64k 64k 0xf1000000 5120k
  3. そのモードに変更します:
    $ vidcontrol MODE_283
  4. 前のコマンドをbootstrap:で実行して、このサイズ変更を永続的にします。
    #sysrc allscreens_flags = MODE_283

サイズの選択は、古いsysconsを使用しているか、新しいvtカーネルターミナルエミュレータを使用しているか、およびエミュレートされたディスプレイを支えているディスプレイアダプタについて何を知っているかによって制約されます。

参考文献

3
JdeBP