ユーザー空間で/dev/fb0をコンソールとして使用するか、テキストを出力する方法

ユーザー空間で/dev/fb0をコンソールとして使用するか、テキストを出力する方法

だから私はPalm Pre(オリジナルP100EWW)モデルを持っていて、開発者モードを有効にしてDebian Squeeze chrootをインストールしました。良い結果。私はそれを携帯電話以外のもの(ビットトレントピア、Webサーバー)に使用する予定です。

これにより、実際にエラーが生成されるcat /dev/urandom > /dev/fb0まで画面にランダムなピクセルが記録されることがわかりました。No space left on deviceいいですね。これでモニターを使用できるようになります。

A)テキストを出力できるコンソールとして/ dev / fb0を使用するか、B)コマンドラインから/ dev / fb0にテキストをレンダリングするユーティリティがありますか?

私はこれを行うためにカーネルを再コンパイルすることはまだわかりません(最終的にWebOSを完全に削除して最小限のARMサーバーに切り替えたいと思います)。したがって、ユーザースペースツール(存在する場合)は私が尋ねるものです。また、Xを使用する代わりに/ dev / fb0に直接レンダリングすることを好みます。

答え1

複数の人々がすでにカーネルとバッチに関する質問の部分に答えています。(テキストの代わりに)をフレームバッファに保存しましたが、残りはこれまで解決されていません。はい、カーネル仮想端末サブシステムを使用して、いわゆるスピーチを作成できます。フレームバッファコンソール。ただし、フレームバッファデバイスを使用して次の作業を実行できるツールはいくつかあります。ユーザー空間仮想端末。これには以下が含まれます。

  • チョンカンダーバン) - カーネルサブシステムよりもCJK I / Oを処理するように設計されたユーザースペース仮想端末。特に強みは、ISO 2022非UTFエンコーディングを処理することです。特に弱点はUTFエンコーディングです。
  • Facebookの用語ダーバン) — 次のような複数のフォークを作成したユーザー空間仮想端末共同用語。これには、さまざまなCJK入力方式プラグインがあります。
  • ボグ-bterm(ダーバン) — 分岐したユーザ空間仮想端末です。ニテム
  • アリ・ゴラミ・ルディ鍵盤- Xライブラリに依存しない最小限のユーザースペース仮想端末。
  • console-terminal-emulatorそしてツールconsole-fb-realizerおやつ- LinuxおよびFreeBSD / PC-BSDカーネル仮想端末を複製するように設計されたユーザー空間仮想端末。また、Xライブラリに依存しません。
  • キロメートルスコーン— システムと密接に接続されたユーザー空間仮想端末logindsystemdのサーバーと「座席」の概念。

特にAli Gholami Rudiは、単純なフレームバッファ操作以上の端末エミュレータを作成しました。 彼も書いたDirect-to-framebuffer PDFビューア、VNCビューア、メディアプレーヤー、Quranリーダー。

完全な並列比較はこの回答の範囲外ですが、以下は質問に関連するいくつかの重要な点です。

  • 前述のように、一部のユーザー空間仮想端末プログラムは、フォント処理、キーボードマッピング、CJK入力方法などのためにXライブラリを利用しています。 X クライアントではありませんが、X ライブラリに依存しています。 fbpadnoshツールはXライブラリを使用するようには設計されていません。
  • フォント処理にXライブラリを使用するプログラムだけでなく、Xフォントも使用します。他の人は別の計画を持っていました。
    • bogl-btermとfbpadはどちらも独自の特殊フォントフォーマットを持っています。 1つは、このツールを使用してbdftoboglBDFフォントをBOGLフォントに変換することです。もう1つは、ft2tfを使用してTTFをfbpadに変換することです。アーチ)ツール。
    • noshconsole-fb-realizerツールの使用と新しいFreeBSD 10.1カーネル仮想端末サブシステムこれが実際に本当であるため、FreeBSDフォント操作ツールが共有されました。vtfontcvtBDFフォントを変換するために使用されます。
  • Xライブラリを使用するプログラムはXキーマップを使用します。他のすべての人の場合:
    • noshツールには、ISO "Universal" Group 2用の完全なISO 9995-3機能キーボードを提供するように設計された独自のキーマップ形式があります。このconsole-convert-kbdmapツールを使用して、BSD kbdmapファイルをこの形式に変換できます。繰り返しますが、このkbdmapファイルはFreeBSD/PC-BSD vtサブシステムで使用
    • fbpad は独自のキーマッピングをまったく実行しませんが、カーネル仮想端末サブシステムとそのキーマッピングメカニズムの存在に依存します。
  • 通話と必須権限にはいくつかの違いがあります。
    • zhcon、fbterm、bogl-bterm、fbpad、およびkmsconは、端末から直接シェル/ログインプログラムを子プロセスとして生成する端末エミュレータによって動作します。を作成するにはスーパーユーザー権限が必要ですlogin
    • noshツールは既存の/etc/ttys(BSD)、/etc/inittab(Linux System 5 init)、または他のシステムと統合するように設計されており、getty / login / shellの作成操作はこれらのシステムに委ねられます。 console-fb-realizerフレームバッファと入力イベントデバイスを開いて(スーパーユーザー権限は必要ありません)、管理するFIFOおよび一般ファイルにアクセスするのに十分な権限が必要です。これは特別なconsole-terminal-emulator権限を必要としません。

これらはすべて端末エミュレータ確かに。端末エミュレーションを削除し、フレームバッファにテキストを直接配置するには、次のようないくつかのオプションがあります。

  • bogl-btermはもちろん、Ben Pfaffに基づいています。Benの独自のグラフィックライブラリシステム設定/構造環境で使用するように設計されたフレームバッファI / Oライブラリ(および「PDA用GUI」)。もちろん、それを直接使用するプログラムを書くこともできます。
  • セルフレンダリングを実行するためにフレームバッファライブラリを使用するプログラムの作成とターミナルであると思うことにエスケープシーケンスを生成するプログラムとの間の中間の切り替えのために:noshユーザー空間仮想ターミナルはモジュール式であり、コンポーネント部分に分けられます。まったく動作しませんconsole-terminal-emulator

    console-fb-realizer/dev/vcsa*Unicodeコードポイント、ECMA-48属性、および24ビットRGBカラーを持つ通常のファイル(文字特殊デバイスファイルではない)に似た文字セル配列を持つ表示ファイルを使用します。したがって、これを実行してから、文字+属性+色を文字セル配列ファイルに直接書き込んでから、フォントをconsole-fb-realizerフレームバッファにレンダリングできます。

    ところで:これは次のようにはなりません。BRLTTYとの統合を使用しますconsole-terminal-emulatorが、実行されませんconsole-fb-realizer

答え2

/dev/urandom > /dev/fb0画面から任意のピクセルをキャプチャして取得できる場合は、必要なものすべてを備えています。

私の場合は、いくつかのテキスト情報をダンプする必要があります。私はこれをbusyboxとraspiでテストしたので、あなたに役立ちます。答えが多少長くなることがあります。一部のコンソールを使用しない場合は、文字のピクセルを直接印刷する必要があるためです。幸いなことに、誰かがすでに難しいことをしてきたので、私たちはそれを一緒にまとめることができます。

busyboxまたはraspiにバイナリファイルが必要ですfbset。これは、画面サイズの設定を見つけるのに役立ちます。

私の挿入では、次のようになります。

# 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ピクセルです。

前述したように、次のコマンドを使用して画面を埋めることができます cat /dev/urandom > /dev/fb0

次のコマンドで消去できますcat /dev/zeros > /dev/fb0

画面を消去することに加えて、正しい寸法が得られていることを確認する必要があります。

私のビジボックスには、.ppmファイルをインポートできるfbsplashバイナリがあります。

私が間違っている場合は訂正してください。しかし、fb0この形式は許可されているようです。見てWikipediaのポータブル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

もちろん、私は私の測定値を使い、あなたもあなたの測定値を使うべきです。このファイルを に送信すると、/dev/fb0次のようになります。 縦画面

わかりました、私は風を吸っています...行が1つではなく... 8個程度ですが...動作しないと(サイズが間違っているか、最後にスペースがあって1行だけ多すぎる))そしてより簡単です)。

ここまで完了したら、正しいピクセルを印刷して文字で処理するだけです。ありがとうMarcel Sondaarと彼のGitHubリポジトリすべてのキャラクターを描く必要はありません。

少しだけ変更すると、彼の単純なプログラムをスペースの代わりに印刷するように拡張し、fX文字0の間にスペースを挿入し、タイトルを追加し、文字コードに対応する文字を含む.ppmファイルを持つことになります。

さらに一歩進むと、文字を入力として受け取るのではなく行が生成されます。ファイルをCatとして指定してプログラムにパイプして出力すると、/dev/fb0テキスト出力が表示されます。

テキスト出力例

また、Raspberry Piでこのソリューションをテストしましたが、うまくいきました。リンクを2つ以上上げることができないそうです。私がこれを得るまでは私の言葉に従うべきです:D

答え3

フレームバッファをコンソールとして使用するには、このfbdevモジュールが必要です。カーネルを再コンパイルする必要があるかもしれません。

フレームバッファ操作を容易にするライブラリであるDirectFBプロジェクトにも興味があるかもしれません。すでにこのために作成されたアプリケーションとGUI環境があります。

答え4

これは古い投稿ですが、通常、フレームバッファでコンソールを実行するにはフレームバッファコンソール(fbcon)が必要であることがわかります。構成にあります。 (デバイスドライバ/グラフィック/コンソールディスプレイ..)

関連情報