256色のTTY?


23

URxvtとxtermでは、8色だけでなく256色をサポートする仮想端末を使用できます。私のIntel GMAグラフィックスカードはKMSフレームバッファードライバーによって十分にサポートされているため、私はTTYのみに取り組んでいます。残念ながら、MPlayer(-vo fbdev / fbdev2)やその他のフレームバッファーツールでははるかに多くのアドレスを指定できますが、8色しかサポートしていません。TTYに8色以上を使用するように指示する方法はありますか?

回答:


10

確信が持てるようになった今、答えを修正しています。

ANSIシーケンスがBIOSまたはカーネルの外部で処理されていると結論付けるのは誤りでした。実際、それらはカーネルで処理されます。LinuxNewbies IRCチャネルのhnaz_のおかげで、以前見逃していたものを見つけましたdrivers/char/vt.c。仮想端末ドライバーが使用するDigital Equipment VT102端末のエミュレーションを実装します。

だから...決定的な答えとして、仮想端末のエスケープシーケンスを処理するソースコードを確認しました:仮想端末で256色のサポートが必要な場合は、エスケープシーケンスを解析するコードを拡張した後に独自のカーネルを構築する必要がありますより広い色の仕様を処理します。

この関数はcsi_m()と呼ばれます。この変更は、Xベースのターミナルエミュレータを拡張して、より豊富なカラーコードを指定するエスケープシーケンスを処理する変更と同様にする必要があります。他の変更も必要になる可能性がありますが、ここから開始します。


そのとおり。これらの「低レベルの仮想端末」について話しています。しかし、私はフレームバッファを使用しているため、採用されているのはfbconカーネルモジュールです。Documentation / fb / fbcon.txtを参照してください。または、fbconはn_ttyの単なるラッパーであり、いくつかの追加機能を追加していますか?URxvtパッチ(cvs.schmorp.de/rxvt-unicode/doc/…)を見ると、256色のサポートを簡単に拡張できるようです。色の定義が表示されていないため、n_ttyが適切なカーネルモジュールであるかどうかはよくわかりません。
タイミング2009年

フレームバッファは1つのデバイスであり、ttyは別のデバイスだと思います-仮想端末にはttyデバイスが必要であり、それらはフレームバッファを表示デバイスとして使用しますが、フレームバッファは唯一の可能な表示デバイスではありません。
いんちきのキホーテ2009年

+1の可能性が高くなります(vt102は拡張色をサポートしていないため、ターミナルドライバーはvt102エミュレーションにハードコードされています)。ちょっとした研究。
いんちきのキホーテ2009

1
2017年も同じ状況kmsconです。端末(24ビットカラーを含む)を改善しようとするユーザーランド端末だと思います。その開発は、システム化された代替案を支持して停滞していますが。
ジグガンジャー

kmsconはフォークされており、このポストのよう積極的に開発されている:github.com/Aetf/kmscon
user3751385

7

256色のRXVT / xterm / URXVT / etcは、terminfoとTERM変数の設定によって定義されます。ほとんどのLinuxディストリビューションでは、仮想端末はで定義されて/etc/inittabおり、端末が使用できる色の数を定義するデフォルトの端末タイプを使用します。

TTYに8色以上を使用するように指示する方法はありますか?

はい。

  • フレームバッファが正しい解像度/ビット深度を使用していることを確認してくださいvga=773たとえば、1024x768と256色(8ビットの色深度)を得るために、カーネルオプションに追加してみてください。

  • 別のTERM(例:)を設定しexport TERM=fooます。正しいものを見つけるために実験する必要があります。動作するものが見つかった場合/etc/inittab、仮想端末がデフォルトで実行するように変更できます(次のセクションを参照)。

  • この記事では、あなたに役立つ他のオプションについて説明します。ゲッティの代替品としてQingy(QingyはGettYではありません)を推奨し、TERM変数の切り替えがオプションではない場合、探しているものを提供します。

  • gettyの交換といえば、gettyをGNU screen途中のどこかに交換する手順を見たことがあると誓います。現時点ではリンクが見つかりませんが、には256色のTERMがあるscreenので、調べてみてください。


/etc/inittab 次のような行を使用して、仮想端末をセットアップします。

# Format:
#  <id>:<runlevels>:<action>:<process>
#
1:2345:respawn:/sbin/getty 38400 tty1
2:2345:respawn:/sbin/getty 38400 tty2
3:2345:respawn:/sbin/getty 38400 tty3

ここにマンページがあります/sbin/getty(私のDebianシステムからですので、技術的にはagettyプログラムです):

SYNOPSIS
       agetty [-8ihLmnw] [-f issue_file] [-l login_program] [-I init]
       [-t timeout] [-H login_host] baud_rate,...  port [term]

baud_rate,... port [term]最後にそこに注意してください。これは、/etc/inittab行(/sbin/getty 38400 ttyN)のコマンドと一致します- [term]引数がないことに注意してください。したがって、デフォルトを取得します(echo $TERM仮想コンソールにログインした直後に実行して、システムが使用するものを確認します)。もう一度マンページから:

ARGUMENTS
       term   The value to be used for the TERM environment variable.  This  over‐
              rides  whatever  init(8) may have set, and is inherited by login and
              the shell.

動作するTERMを見つけたら、inittabでgetty行を変更し、最後に適切なTERMを追加します。

1:2345:respawn:/sbin/getty 38400 tty1 TERM-with-256-colors
2:2345:respawn:/sbin/getty 38400 tty2 TERM-with-256-colors

1
〜これらすべての素晴らしい情報を入手しますが、成功につながるかどうかはわかりません。「はい」と言いますが、「実験」と「見つけたら」と言います。私はより直接的なルートを取りました。カーネルコードを検索しました。色のエスケープシーケンスを処理するコードを見つけることができませんでした-カーネル内のどこでも。fbコードでもttyコードでもない...どこにもありません。したがって、それはBIOSで処理されるという私の結論です。これは、DOSでまったく同じANSIエスケープシーケンスを使用したという私の記憶によってサポートされています。どちらの場合も、さまざまなANSIエスケープシーケンスがBIOSによって処理されていると思います。
PBR

@pbr:カーネルコードもチェックアウトしました。TTYコードは色の数に制限を設けていません。 BIOSはそれに入らない -あなたはさまざまなビット深度取ることができるフレームバッファを扱っています(フレームバッファを無効にしている場合は特定のものがハードウェアに依存しています...)。16色の制限はGeTTYであるため、Qingyをチェックアウトすることをお勧めします。または、terminfoスタッフであるため、さまざまな代替TERM定義を試すことをお勧めします。それ以上アドバイスすることはできませんが、BIOSの暴言はベースを外れており、役に立ちません
いんちきのキホーテ2009年

1
〜quack-BIOSにはないことは正しい(以下の修正後の回答を参照)が、Qingy et al。仮想端末コードはvt102エミュレーションでハードコーディングされています。
PBR

6

fbtermを見てください-256色モードで実行できる代替フレームバッファです(TTYからrootとして実行するだけです)

私はそれで複雑な成功を収めました-いくつかのアプリケーションはうまく動作し、256色を報告します ただし、Emacs(TTYで256色が欲しかった主な理由)は機能していないようです。ここでは少し議論がありますが、実際には解決されていません。

http://lists.gnu.org/archive/html/emacs-devel/2011-08/msg00989.html

ただし、mplayerは動作するはずです!


Xターミナルクライアントと比較するとひどく見えます。
フィルpirozhkov 14

1
フレームバッファで実行されているため、とにかくフレームバッファで使用できるのは256色のみです。
セブ14

このfbtermの問題についての洞察があるかどうか疑問に思いますか?superuser.com/questions/892028/...
dtmland

emacs内部で実行tmuxすると、周囲の端末のエスケープシーケンスを変換する必要があるため、役立つ場合があります。
トム・ヘイル

1

kmscon

kmsconは、Windowsシステム(X、Wayland)をインストールせずに256色とビデオを取得する方法です。

放棄されましたが、現在はフォークを介して維持されています

インストールに関するドキュメントはスリムですが、こちらのREADMEページをご覧ください。


これをインストールし、256色を必要とするコンソールアプリに使用しました(構成によります)。

インストール手順を注意深く読んでください。


-1

テキストの前景色と背景色を設定するためのANSIエスケープシーケンスが、ここでの制限事項です。

記憶から、これらのシーケンスはエスケープ[01; 34mのように見えます。前景には30代のコードがあり、背景には40代のコードがあると思います。

ですから、あなたが探しているものを達成する方法はないと思います。


2
実際には可能です。そうしないと、URxvtで256色のmuttを使用できません。:) push.cx/2008/256-color-xterms-in-ubuntuも参照してください。しかし、TTYで同じ効果を得るにはどうすればよいですか?
タイミング2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.