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


24

したがって、開発者モードを有効にし、Debian Squeeze chrootをインストールしたPalm Pre(元のP100EWW)モデルがあります。よく働く。私はこれをあらゆるもの(ビットトレントピア、Webサーバー)に使用する計画がありますが、電話には使用します。

エラーを生成するcat /dev/urandom > /dev/fb0まで、実際に画面にランダムなピクセルを書き込むと、気が付きましたNo space left on device。素晴らしい、今私はディスプレイを使用することができます。

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

このためにカーネルを再コンパイルすることについてはまだ知りません(最終的にはWebOSを完全に取り除き、これを最小限のARMサーバーに変えたいと思っています)。また、Xを使用せずに/ dev / fb0に直接レンダリングすることを好むでしょう。


Linux仮想コンソールは、フレームバッファードライバーで動作するはずです。仮想コンソールは強力なツールです。Linux 2.6以降では、コンソールごとに異なるフォントを設定できます。しかし、それらは(ユーザー空間から)/ dev / vcs nおよび/ dev / vcsa nを介して制御され  、/ dev / fb0  ではありません。
Incnis MRSI

回答:


11

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

また、DirectFBプロジェクトに興味があるかもしれません。DirectFBプロジェクトは、フレームバッファの使用を簡単にするライブラリです。また、そのために書かれたアプリケーションとGUI環境もあります。


1
Directfb(webos-internals.org/wiki/Directfb)をインストールしたときのように見えdfbgますが、そこに写真を載せることができるユーティリティが付属しています(完了時に削除しませんfbi)。ブロックテキストから.pngなどを作成するユーティリティを見つけることができるので、これでうまくいくかもしれません...
LawrenceC

24

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

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

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

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

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

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

  • bogl-btermは、もちろん、システムセットアップ/レスキュー環境(および「PDAのGUI用」)で使用するために設計されたフレームバッファI / OライブラリであるBen PfaffのBen's Own Graphics Libraryに基づいています。もちろん、それを直接使用するプログラムを書くことができます。
  • フレームバッファライブラリを使用して独自のレンダリングを行うプログラムと、エスケープシーケンスを端末と思われるものに吐き出すプログラムを作成する間の中間の家の場合:noshユーザー空間仮想端末はモジュール式であり、分割されますコンポーネントピース。単に使用することはできませんconsole-terminal-emulator

    console-fb-realizerは、/dev/vcsa*通常のファイル(キャラクタースペシャルデバイスファイルではない)のような文字セル配列を持ち、Unicodeコードポイント、ECMA-48属性、および24ビットRGBカラーを持つディスプレイファイルを使用します。したがって、それを実行して、文字セル配列ファイルに直接character + attribute + colorを書き込むだけでconsole-fb-realizer、フレームバッファへのフォントレンダリングを実行できます。

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


1
これはすばらしい答えです。Enlightenmentライブラリはfbconコンパイル時のオプションに応じて、Linuxでのフレームバッファーサポートを主張しています。また、これはその依存ターミナルエミュレータの真実である用語Linuxフレームバッファ(fbcon)で直接作品。それ以外にterminology、私は自分自身kmscon (そしてDavid Herrmannのその他の作品)の推奨事項を2番目に推奨します。
mikeserv

1
ルディはフレームバッファの達人です!いつか私もX11を捨てます。
Ciro Santilli新疆改造中心法轮功六四事件

10

猫ができたら /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

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

偶然にも、busyboxには入力として.ppmファイルを取得するfbsplashバイナリがありました。

私が間違っていれば正しいですが、fb0このフォーマットを受け入れているようです。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文字幅になります。ドキュメントでは、busyboxではf ...の代わりに1でなければならず、raspi fの方が明るいとされています。

0の後にスペースがないことが重要です。このタスクは少し面倒な場合があります。vimでは、最初の2行をコピーしてコマンドモード(esc)に移動し、次の文字を入力できます。

of(esc)479a 0(esc)yy271p

もちろん、私は私の次元を使用しています、あなたはあなたのものを使用する必要があります。このファイルを/dev/fb0に猫は、次のようになります。 縦線スクリーン

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

そこまで得られた場合は、適切なピクセルを印刷して文字として表示するだけです。Marcel Sondaarと彼のGitHubのレポのおかげで、各文字を描画する必要がなくなります。

小さな微調整のいずれかで印刷するには、彼の簡単なプログラムを展開するf代わりにX0、各文字の間にスペースを挿入し、スペースの代わりにヘッダを追加し、我々はそのCHARCODEを対応する文字と.ppmファイルを持っています。

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

テキスト出力の例

このソリューションをラズベリーパイでもテストしましたが、うまくいきました。このシステムは、2つ以上のリンクを投稿する評判がないことを教えてくれます。私がこれを得るまで、あなたは私の言葉に頼らなければなりません:D


2

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

画像については、bmpファイルをfb0に接続してみましたが、実際に機能しました!(並べ替え-複数のコピー、小さいサイズ)

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


fbi画面に画像を置くことができます。これは便利ですが、終了するとフレームバッファがクリアされます。
ローレンス

0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.