web-dev-qa-db-ja.com

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

そこで、開発者モードを有効にしたPalm Pre(元のP100EWW)モデルを用意し、Debian Squeeze chrootをインストールしました。よく働く。私はこれを何でも(bittorrentピア、webサーバー)、電話に使うつもりです。

cat /dev/urandom > /dev/fb0を実行すると、実際にNo space left on deviceエラーが生成されるまでランダムピクセルが画面に書き込まれることに気付きました。これで、ディスプレイを使用できるようになりました。

したがって、A)/ dev/fb0をコンソールとして使用できるようにするユーティリティ、またはB)コマンドラインから/ dev/fb0にテキストをレンダリングするユーティリティの種類は何ですか。

私はこれのためにカーネルを再コンパイルすることについてはまだ知りません(最終的にWebOSを完全に削除してこれを最小限のARMサーバー)にしたい)。また、Xを使用せずに/ dev/fb0に直接レンダリングすることをお勧めします。

24
LawrenceC

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

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

11
Keith

カーネルを扱い、(テキストではなく)imagesをフレームバッファーに書き込むという質問の一部に数人が回答しましたが、残りはまだ対処されていません。はい、カーネル仮想端末サブシステムを使用して、いわゆるframebuffer consoleを作成できます。しかし、フレームバッファデバイスを使用してユーザー空間の仮想端末を作成できるツールがいくつかあります。これらには以下が含まれます:

  • zhconDebian )—カーネルサブシステムよりもはるかに優れたCJK I/Oの処理に向けたユーザー空間仮想端末。その特別な強みは、ISO 2022非UTFエンコーディングの処理です。その特定の弱点はUTFエンコーディングです。
  • fbtermDebian )— jfbterm を含むいくつかのフォークを生成したユーザー空間仮想端末。 CJK入力方式プラグインがたくさんあります。
  • bogl-bterm( Debian )— niterm などのフォークを生成したユーザー空間仮想端末。
  • ALi Gholami Rudiの fbpad — Xライブラリに依存しない最小限のユーザー空間仮想端末。
  • noshconsole-terminal-emulatorおよびconsole-fb-realizerツール— LinuxおよびFreeBSD/PC-BSDカーネル仮想端末の複製を目的としたユーザー空間仮想端末。 Xライブラリにも依存していません。
  • kmscon — systemdの logind サーバーに密接にリンクされているユーザー空間仮想端末とその「シート」の概念。

特に、ALi Gholami Rudiは、フレームバッファ作業用のターミナルエミュレータだけではありません。 彼も書いた フレームバッファへのダイレクトPDFビューア、VNCビューア、メディアプレーヤー、およびコーランリーダー。

完全な比較は、この回答の範囲外です。しかし、これは質問に関連するいくつかのポイントです:

  • 前述のように、ユーザー空間仮想端末プログラムのいくつかは、フォント処理、キーボードマッピング、CJK入力メソッドなどのためにXライブラリを利用しています。これらはXクライアントではありませんが、Xライブラリからの依存関係があります。 fbpadおよびnoshツールの仕様では、Xライブラリを使用しません。
  • もちろん、フォント処理にXライブラリを使用するプログラムは、Xフォントを使用します。他の人は他の手配をします。
    • bogl-btermとfbpadはどちらも、独自の特異なフォント形式を持っています。 1つは、bdftoboglツールを使用してBDFフォントをBOGLフォントに変換します。 TTFをft2tf( Arch )ツールでfbpadが使用する「tinyfont」フォントに変換します。
    • Nosh console-fb-realizerツールは 新しいFreeBSD 10.1カーネル仮想端末サブシステム と同じ「vt」フォントを使用するため、BDFフォントを変換するためにFreeBSDフォント操作ツール vtfontcvt を共有します。
  • Xライブラリを使用するプログラムは、Xキーボードマッピングを使用します。その他について:
    • Noshツールには、ISO「共通」グループ2を備えた完全なISO 9995-3対応キーボードを提供することを目的とした独自の固有のキーボードマップ形式があります。1つは、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システム5 init)、または他のシステムと統合するように設計されており、getty/login/Shellを生成する仕事を任されています。 console-fb-realizerは、スーパーユーザー権限である必要のないフレームバッファーと入力イベントデバイスを開くため、およびconsole-terminal-emulatorによって維持されるFIFOと通常のファイルにアクセスするために十分な権限のみを必要とします。これにより、特別な権限はまったく必要ありません。

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

  • もちろん、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でフレームバッファーへのフォントレンダリングを実行できます。

    余談ですが、これはconsole-terminal-emulatorを使用しますがconsole-fb-realizerを実行しない BRLTTYとの統合 の反対であることを確認してください。

26
JdeBP

猫を/dev/urandom > /dev/fb0して画面上にランダムなピクセルを表示できれば、必要なものはすべて揃っています。

私の場合、テキスト情報をダンプする必要がありました。これをbusyboxとraspiでテストしたので、うまくいくかもしれません。コンソールを使用しない場合は、charのピクセルを自分で印刷する必要があるため、答えは少し長いかもしれません。幸運なことに誰かが大変な仕事をしたので、私たちはそれを組み合わせる必要があります。

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でクリアできます

画面をクリアにするよりも、寸法を適切に取得する必要があります。

偶然にも、私のbusyboxには、.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文字幅になります。ドキュメントによると、busyboxではf ...の代わりに1にすべきであり、raspi fはより明るくなりました。

0の後にスペースがないことが重要です...このタスクは少し面倒な場合があります...役立つテキストエディターを使用することをお勧めします。 vimでは、最初の2行をコピーしてコマンドモード(esc)に移動し、次の文字を入力します。

of(esc)479a 0(esc)yy271p

もちろん、私は私の次元を使用しています。あなたは自分の次元を使用する必要があります。このファイルを/dev/fb0にキャットすると、次のようになります。 Vertical line screen

さて、私は浮気しています...それはそこに1行だけではありません...それは約8です...しかし、それが機能しないとき(私たちは間違った寸法を持っているか、最後にスペースがあるので、1行だけを持っていることは多くです)より簡単に)。

そこまで進んだら、文字として表示するために正しいピクセルを印刷する必要があります。おかげで Marcel SondaarとGitHubの彼のリポジトリ 各文字を描画する必要はありません。

小さなTweakを使用して、単純なプログラムを拡張して、スペースの代わりにf0の代わりにXを印刷し、各文字の間にスペースを挿入し、ヘッダーを追加すると、.ppm文字コードに対応する文字を含むファイル。

さらに一歩進んで、入力としてcharを取得するのではなく、行を取得します。ファイルをcatし、プログラムにパイプして/dev/fb0に出力すると、テキスト出力が得られます。

Example of text output

私はこのソリューションをRaspberry Piでもテストしましたが、うまくいきました。 2つを超えるリンクを投稿するという評判はないと私は教えてくれます。私がこれを手に入れるまで、あなたは私の言葉に頼らなければなりません:D

10
Zeh

コンソール側では、/dev/consoleにエコーするか、syslogを使用できます。他のさまざまな設定によっては、コンソールに表示される場合があります。

画像の場合、bmpファイルをfb0に接続しようとしたところ、実際に機能しました。 (ソート-複数のコピー、小さいサイズ)

Bmp-to-framebufferプログラム here を見つけました。これは、fb0が期待する形式の完璧な例です。フレームバッファに直接書き込むためのプログラムであるfbiもあります。

2
Shawn J. Goff

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

0
Chan Kim