カーネルを扱って 画像 を入れるあなたの質問の部分に何人かの人々が答えました (テキストではなく)フレームバッファに追加されますが、これまでのところ残りは未解決のままです。はい、カーネル仮想端末サブシステムを使用して、いわゆるフレームバッファ コンソールを作成できます .ただし、フレームバッファ デバイスを使用してユーザー空間の仮想端末を作成できるツールがいくつかあります。 .これらには以下が含まれます:
- zhcon (Debian) — カーネル サブシステムよりもはるかに優れた CJK I/O の処理を目的としたユーザー空間仮想端末。その特別な強みは、ISO 2022 非 UTF エンコーディングの処理にあります。その特定の弱点は UTF エンコーディングです。
- fbterm (Debian) — jfbterm を含むいくつかのフォークを生成したユーザー空間仮想端末。多数の CJK 入力メソッド プラグインがあります。
- bogl-bterm (Debian) — niterm などのフォークを生成したユーザー空間の仮想端末。
- Ali Gholami Rudi の fbpad — X ライブラリに依存しない最小限のユーザー空間仮想端末。
02
そして10
tools in nosh — Linux および FreeBSD/PC-BSD カーネル仮想端末の複製を目的としたユーザー空間仮想端末。これも X ライブラリに依存しません。- kmscon —
23
と密接にリンクしているユーザー空間の仮想端末 systemd のサーバーとその「座席」の概念
特に Ali Gholami Rudi は、フレームバッファ作業用のターミナル エミュレータ以上のものを作成しました。また、フレームバッファへ直接変換する PDF ビューアー、VNC ビューアー、メディア プレーヤー、およびコーラン リーダーも作成しました。
完全な比較は、この回答の範囲外です。しかし、ここに質問に関連するいくつかのポイントがあります:
- 前述のように、ユーザー空間の仮想端末プログラムのいくつかは、フォント処理、キーボード マッピング、CJK 入力メソッドなどに X ライブラリを使用します。これらは X クライアントではありませんが、X ライブラリからの依存関係があります。
35
また、nosh ツールは設計上、X ライブラリを一切使用しません。 - フォント処理に X ライブラリを使用するプログラムは、もちろん X フォントを使用します。他のメンバーは別の手配をします。
- bogl-bterm と fbpad はどちらも独自の独特なフォント形式を持っています。
42
を使用して、BDF フォントを BOGL フォントに変換します。 道具; 1 つは、ft2tf (Arch) ツールを使用して fbpad で使用される「tinyfont」フォントに TTF を変換します。 - ノッシュ
52
ツールは、新しい FreeBSD 10.1 カーネル仮想端末サブシステムと同じ「vt」フォントを使用するため、FreeBSD フォント操作ツール69
を共有します。 BDF フォントの変換用。
- bogl-bterm と fbpad はどちらも独自の独特なフォント形式を持っています。
- X ライブラリを使用するプログラムは、X キーボード マッピングを使用します。その他については:
- nosh ツールには独自の独特なキーボード マップ形式があり、ISO 9995-3 対応の完全なキーボードを ISO "共通" グループ 2 で提供することを目的としています。BSD kbdmap ファイルを
77でこの形式に変換します。コード> 道具。繰り返しますが、これらの kbdmap ファイルは FreeBSD/PC-BSD vt サブシステムで使用されるものです。
- fbpad は独自のキーボード マッピングをまったく行わず、カーネル仮想端末サブシステムの存在とそのキーボード マッピング メカニズムに依存しています。
- nosh ツールには独自の独特なキーボード マップ形式があり、ISO 9995-3 対応の完全なキーボードを ISO "共通" グループ 2 で提供することを目的としています。BSD kbdmap ファイルを
- 呼び出しと必要な権限にはいくつかの違いがあります:
- zhcon、fbterm、bogl-bterm、fbpad、および kmscon は、端末エミュレータがシェル/ログイン プログラムを端末上で子プロセスとして直接生成することに基づいて動作します。
82
を生成するにはスーパーユーザー権限が必要です . - nosh ツールは、既存の
96
と統合するように設計されています。 (BSD)、109
(Linux システム 5111
)、または他のシステムに getty/login/shell を生成するジョブを任せます。128
スーパーユーザー権限でなくても、フレームバッファと入力イベントデバイスを開き、FIFO と131
によって維持される通常のファイルにアクセスするのに十分な権限のみが必要です。 であり、特別な権限はまったく必要ありません。
- zhcon、fbterm、bogl-bterm、fbpad、および kmscon は、端末エミュレータがシェル/ログイン プログラムを端末上で子プロセスとして直接生成することに基づいて動作します。
これらはすべて端末エミュレータです もちろん。端末エミュレーションを取り除き、より直接的にテキストをフレームバッファに置きたい場合は、いくつかの選択肢があります:
- bogl-bterm はもちろん、Ben Pfaff の Ben's Own Graphics Library に基づいています。 システムのセットアップ/レスキュー環境 (および「PDA の GUI 用」) で使用するために設計されたフレームバッファ I/O ライブラリ。もちろん、それを直接使用するプログラムを作成することもできます。
- フレームバッファ ライブラリを使用して独自のレンダリングを行うプログラムと、端末と見なされるものにエスケープ シーケンスを吐き出すプログラムを作成する間の中間の家:nosh ユーザー空間の仮想端末はモジュール式であり、構成要素に分割されます。
148
は使えません .159
164
のような文字セル配列を持つ表示ファイルを使用します ただし、通常のファイル (文字特殊デバイス ファイルではない) であり、Unicode コード ポイント、ECMA-48 属性、および 24 ビット RGB カラーを使用します。したがって、それを実行して、文字 + 属性 + 色を文字セル配列ファイルに直接書き込むだけで、172
を許可できます。 フレームバッファへのフォントレンダリングを行います。余談ですが、これは
181
を使用する BRLTTY との統合とは逆であることに注意してください。190
は実行されません .
フレームバッファをコンソールとして使用するには、204
が必要です モジュール。カーネルを再コンパイルする必要がある場合があります。
フレームバッファの使用を容易にするライブラリである DirectFB プロジェクトにも興味があるかもしれません。また、すでにそのために書かれたアプリケーションと GUI 環境もあります。
213
を猫にすることができれば 画面上でランダムなピクセルを取得すると、必要なものがすべて揃っています。
私の場合、いくつかのテキスト情報をダンプする必要がありました.これをbusyboxとraspiでテストしたので、うまくいくかもしれません.コンソールを使用しない場合は、幸運なことに誰かが大変な仕事をしてくれているので、あとはそれを結合するだけです.
busybox または raspi には 228
が必要です binary.これは、画面のサイズとして設定を見つけるのに役立つ場合があります.
私の埋め込みでは次のようになります:
# fbset
mode "480x272-1"
# D: 0.104 MHz, H: 0.207 kHz, V: 0.657 Hz
geometry 480 272 480 272 16
timings 9600000 3 3 0 32 17 11
accel false
rgba 5/0,6/5,5/11,0/0
endmode
ここで重要な部分は、幅 480 ピクセルと高さ 272 ピクセルです。
あなたが言及したように、232
で画面を満たすことができます
247
でクリアできます
画面をクリアするよりも、寸法が適切に表示されることを保証する必要があります。
たまたま、busybox に .ppm ファイルを入力として取得する fbsplash バイナリがありました。
間違っていたら訂正しますが、258
のようです この形式を受け入れます。Wikipedia の Portable Anymap を見ると、いくつかの「サブ形式」があります... fbsplash は、色付きの凝ったものを使用します...しかし、読みやすいものだけを印刷できるようにしたいと考えています。簡単にするために、ASCII でコード化された P1 を使用しましょう。垂直線を印刷できれば、寸法が正しいことがわかります。試してみましょう:
ppm タイプ P1 の縦線は次のようになります:
P1
480 272
f 0 0 0 0 ... 0
f 0 0 0 0 ... 0
...
f 0 0 0 0 ... 0
したがって、272 行、幅 959 文字になります。ドキュメンテーションによると、f ではなく 1 にする必要があります。busybox では、raspi f の方が明るかったです。
0 の後にスペースを入れないことが重要です...この作業は少し面倒な場合があります...便利なテキスト エディターを使用することをお勧めします.vim では、最初の 2 行をコピーして、コマンド モードに移動します ( esc)、次の文字を入力するより:
of(esc)479a 0(esc)yy271p
もちろん、私は私の寸法を使用しています。あなたの寸法を使用する必要があります。このファイルを 267
に分類してください 、次のようになります。
わかりました、私はごまかしています...そこには1行だけではありません...約8です...しかし、それが機能しない場合(寸法が間違っているか、最後にスペースがある場合、1行だけでは十分ではありません)
ここまで来たら、適切なピクセルを出力して文字として表示するだけです。Marcel Sondaar と GitHub の彼のリポジトリのおかげで、各文字を描画する必要はありません。
小さな調整で、単純なプログラムを拡張して 279
を出力します 280
の代わりに と 293
スペースの代わりに、各文字の間にスペースを挿入し、ヘッダーを追加すると、文字コードに対応する文字を含む .ppm ファイルができます。
さらに一歩進むと、入力として char ではなく行が得られます。ファイルを Cat し、プログラムにパイプして、307
に出力します。 テキスト出力が得られます:
ラズベリーパイでもこのソリューションをテストしましたが、うまくいきました.システムは、2つ以上のリンクを投稿する評判がないことを示しています.私がこれを得るまで、あなたは私の言葉に頼らなければなりません:D