GNU/Linux >> Linux の 問題 >  >> Linux

/dev/fb0 をユーザー空間からコンソールとして使用する方法、またはそれにテキストを出力する方法

カーネルを扱って 画像 を入れるあなたの質問の部分に何人かの人々が答えました (テキストではなく)フレームバッファに追加されますが、これまでのところ残りは未解決のままです。はい、カーネル仮想端末サブシステムを使用して、いわゆるフレームバッファ コンソールを作成できます .ただし、フレームバッファ デバイスを使用してユーザー空間の仮想端末を作成できるツールがいくつかあります。 .これらには以下が含まれます:

  • 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 フォントの変換用。
  • X ライブラリを使用するプログラムは、X キーボード マッピングを使用します。その他については:
    • nosh ツールには独自の独特なキーボード マップ形式があり、ISO 9995-3 対応の完全なキーボードを ISO "共通" グループ 2 で提供することを目的としています。BSD kbdmap ファイルを 77 道具。繰り返しますが、これらの kbdmap ファイルは FreeBSD/PC-BSD vt サブシステムで使用されるものです。
    • fbpad は独自のキーボード マッピングをまったく行わず、カーネル仮想端末サブシステムの存在とそのキーボード マッピング メカニズムに依存しています。
  • 呼び出しと必要な権限にはいくつかの違いがあります:
    • zhcon、fbterm、bogl-bterm、fbpad、および kmscon は、端末エミュレータがシェル/ログイン プログラムを端末上で子プロセスとして直接生成することに基づいて動作します。 82 を生成するにはスーパーユーザー権限が必要です .
    • nosh ツールは、既存の 96 と統合するように設計されています。 (BSD)、109 (Linux システム 5 111 )、または他のシステムに getty/login/shell を生成するジョブを任せます。 128 スーパーユーザー権限でなくても、フレームバッファと入力イベントデバイスを開き、FIFO と 131 によって維持される通常のファイルにアクセスするのに十分な権限のみが必要です。 であり、特別な権限はまったく必要ありません。

これらはすべて端末エミュレータです もちろん。端末エミュレーションを取り除き、より直接的にテキストをフレームバッファに置きたい場合は、いくつかの選択肢があります:

  • 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


Linux
  1. / dev/randomを使用してLinuxでランダムパスワードを生成する方法

  2. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  3. Linux –ユーザースペースからコンソールとして/ dev / fb0を使用する方法、またはそれにテキストを出力する方法は?

  1. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

  2. / dev/randomと/dev/ urandomをいつ使用するか?

  3. /dev/random または /dev/urandom を base64 でエンコードする方法は?

  1. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?

  2. Linux:/dev/console 、 /dev/tty 、 /dev/tty0 の違い

  3. /dev/null に書き込む仮想ブロック デバイスを作成します。