web-dev-qa-db-ja.com

FreeBSD11.2-コンソールウィンドウでの256色のサポート

UEFIを搭載したDellLatitudeE7470にFreeBSD11.2をインストールしました(重要な場合があります)。デフォルトではGUIはインストールされませんが、私はそれで問題ありません(今のところ)。 <Alt> + <Fn>キーを使用して、異なる仮想端末を切り替えることができます。

Vtで色を変えることはできません

/ boot/loader.confで次のことを試しましたが、効果がありませんでした。

i915kms_load="YES"
kern.vt.color.1.rgb="#cc241d"
# definitions for all other colors follow but omitted in this example

さらに、/ etc/ttysを変更して、3番目の列にxtermではなくxterm-256colorを設定しましたが、これでは256色のサポートが有効になりません。

独自のキーボードを介してコンピューターにローカルにアクセスし、テキストモード(gnome、Xorg、KDE ​​...なし)でモニターするときに、色の数を変更したいことを強調したいと思います。 SSH経由でコンピューターにアクセスすることはまったく異なるものです。

1
Tommiie

FreeBSDコンソールはtekenを使用してxtermを模倣します( ここでの以前の議論 および メーリングリスト を参照)。これは完全な実装ではありません。 FreeBSD開発者は、端末の説明からいくつかの項目を削除しました(そのプラットフォームでは、実際のxtermの有用性が低くなります)。

FreeBSDコンソール(teken)は実際にはimplement256色ではありません。 ソースコード を参照してください:

 499 /**
500 * xterm-256カラーマップのステップは0x28(0-0xffの範囲)です。ただし、
 501 *最初のステップは0x5fです。 。 
 502 *を0x28で除算し、切り捨てて、0〜6の範囲にスケーリングします。 0〜5の範囲は、
 503 *より大きな最初のステップを表すことはできません。
 504 * 
 505 *このテーブルは、次のルールによって生成されます:
 506 * -すべてのコンポーネントが等しい場合、結果は(0、0、0)および
 507 *(2、2、2)の場合は黒、それ以外の場合は白です。それ以外の場合:[。が他のゼロ以外のコンポーネントより2つ以上大きい場合、
 511 *そのコンポーネントは色を与えます
 512 *-それ以外の場合、2つの非ゼロコンポーネントがあります。色は、これらの成分(シアン、黄色、またはマゼンタ)の小さな
 513 *等しい混合物の色です。例:
 514 *(0、5、6)(Turquoise2)は(0、2、3)
 515 *(DeepSkyBlue4)よりもはるかに純粋なシアンですが、両方をシアンにマッピングしています。表現することはできません
 516 *青またはシアンと青の繊細な色合いはさらに悪くなります。
 517 *ここでは、1の成分が発生しないことが重要です。青は
 518 *(0、1、2)の緑の2倍の大きさです。
 519 * /

これらのステップマップアプリケーションの使用試行256コンソールの16色に色付けします。

要求された処理を実行できないため、TERMxterm-256colorに設定してもあまり効果的ではありません。

rgbコードは、カーネルの 異なる部分 でサポートされており、(16-)の値を設定できます。カラーパレット:

 
 41 static struct {
 42 unsigned char r;/*赤のパーセンテージ値。 */
43unsigned char g;/*緑のパーセンテージ値。 */
44unsigned char b;/*青いパーセンテージ値。 */
45} color_def [NCOLORS] = {
 46 {0、0、0}、/ *黒*/
 47 {50、0、0}、/ *ダークレッド*/
 48 {0、50、0}、/ *ダークグリーン*/
 49 {77、63、0}、/ *ダークイエロー*/
 50 {20、40、64}、/ *ダークブルー*/
 51 {50、0、50}、/ *ダークマゼンタ*/
 52 {0、50、50}、/ *ダークシアン*/
 53 {75、75、75}、/ *ライトグレー*/
 54 
 55 {18、20、21}、/ *ダークグレー*/
 56 {100、0、0}、/ *ライトレッド*/
 57 {0、100、0}、/ *ライトグリーン*/
 58 {100、100 、0}、/ *ライトイエロー*/
 59 {45、62、81}、/ *ライトブルー*/
 60 {100、0、100}、/ *ライトマゼンタ*/
 61 {0、100、100}、/ *ライトシアン*/
 62 {100、100、100}、/ *ホワイト*/
63};

メーリングリストで、私はこれらのスクリーンショットに言及しました: teken - 88colorsteken - 256colors

4
Thomas Dickey

M. Dickeyが言うように、FreeBSDカーネルの組み込みターミナルエミュレーターは、インデックス付きまたは24ビットの直接カラーサポートを持っていません。実際、これをxtermとして扱うべきではありません。これは、xtermターミナルタイプの使用が間違っているもう1つのケースです。これは、この点やその他の点で実際のXTermとはかなり異なります。

terminfoデータベースレコードはteken という名前を使用します。 FreeBSDのtermcapに追加するtekentermcapエントリがあります。これらを使用すると、TERM環境変数値をtekenまたはxterm-256colorではなく、適切な値xtermに設定できます。

Termcapエントリを noshツールセット と一緒にnosh-bundlesバイナリパッケージで出荷します。これは、cap_mkdbを使用して/etc/system-control/convert/termcap/termcap.dbに結合されたtermcapデータベース(interixlinuxの追加も含まれます)を作成する外部構成インポートサブシステムによってセットアップされます。 、/etc/termcap.dbからシンボリックにリンクできます。または、/etc/system-control/convert/termcap/の生の構成要素を使用して、自分でtermcapデータベースを作成することもできます。

teken-256colorエントリもあります。これはFreeBSDターミナルエミュレータ用ではありません。これは私のターミナルエミュレータ用で、tekenのスーパーセットを提供します。これには、特にインデックス付きの24ビットダイレクトカラー機能が含まれています。これは、ほとんどの場合tekenに忠実であるように設計されており、FreeBSDターミナルエミュレータが実際に生成するDECFNKとXenixConsoleのファンクションキーシーケンスの同じ文書化されていない混合を採用することにも拡張されます。

JdeBP%console-decode-ecma48 
 ^ [OP ^ [OQ ^ [OR ^ [OS ^ [OT ^ [[17〜 ^ [[18〜 ^ [[19〜 ^ [[20〜 ^ [[ 21〜 ^ [[23〜 ^ [[24〜 
 DEC KEY_PAD_F1 
 DEC KEY_PAD_F2 
 DEC KEY_PAD_F3 
 DEC KEY_PAD_F4 
 DEC KEY_PAD__ 。] DEC F6 
 DEC F7 
 DEC F8 
 DEC F9 
 DEC F10 
 DEC F11 
 DEC F12 
 LF 
 ^ [[Y ^ [[Z ^ [[a ^ [[b ^ [[o ^ [[p ^ [[q ^ [[r ^ [[^^ [[_ ^ [[ `^ [[{[。 
 SCOコントロール+ F6 
 SCOコントロール+ F7 
 SCOコントロール+ F8 
 SCOコントロール+レベル2+ F9 
 SCOコントロール+レベル2+ F10 
 SCOコントロール+レベル2+ F11 
 SCOコントロール+レベル2+ F12 
 LF 
 JdeBP%

その用途の1つは、X11を必要としないFreeBSDカーネルターミナルエミュレーターのユーザースペースの代替として、フレームバッファーにレンダリングし、キーボードとマウスのHIDから入力を読み取ることです。 M. Dickeyの答えと同じカラーキューブは、多少異なって見えます。

user-space virtual terminal

カーネルに組み込まれているのではなく、ユーザースペースであるため、複数フォントのUnicodeサポート、CINファイル駆動のCJKV入力メソッド、およびLinuxを含む他の組み込みカーネルターミナルエミュレーターとの互換性を含めることができます。 (したがって、同様に拡張されたlinux termcapエントリ)。

X11なしで16色以上が必要な場合は、私のターミナルエミュレーターまたは他のいくつかのフルスクリーンフレームバッファーターミナルエミュレーターの1つを使用する必要があります。

参考文献

3
JdeBP