コマンドラインから画面にピクセルを配置するためにフレームバッファにアクセスすることは可能ですか?


15

それが唯一の可能な方法であるかどうかはわかりませんが、画面の任意の場所に1つのピクセルを配置するためには、フレームバッファーと呼ばれる場所に何かを書き込む必要があることを読みました。だから、この場所に入って何かを書いて、画面のどこかに単一のピクセルを表示することができるなら、私は興味を持ちました。


どのOSを指定しませんでした。Linux?
ジル 'SO-悪であるのをやめる'

はい、Linux(ミントコードネームレベッカ)
アブドゥルアルハズレッド

回答:


15

はい、Xサーバーの外部、ttyで、コマンドを試してください:

cat /dev/urandom >/dev/fb0

カラフルなピクセルが画面いっぱいになったら、セットアップは問題ありません。次の小さなスクリプトを試してみてください。

#!/usr/bin/env bash

fbdev=/dev/fb0 ;   width=1280 ; bpp=4
color="\x00\x00\xFF\x00" #red colored

function pixel()
{  xx=$1 ; yy=$2
   printf "$color" | dd bs=$bpp seek=$(($yy * $width + $xx)) \
                        of=$fbdev &>/dev/null
}
x=0 ; y=0 ; clear
for i in {1..500}; do
   pixel $((x++)) $((y++))
done

関数 'pixel'が答えになるはずです...ビデオカードのフレームバッファであるデバイス/ dev / fbXのxyオフセットのバイト値(青-緑-赤-アルファ)を​​変更して、画面にピクセルを書き込みます。

または、ライナーピクセルを1回描画します(幅が1024の場合、x:y = 200:100の黄色):

printf "\x00\xFF\xFF\x00" | dd bs=4 seek=$((100 * 1024 + 200)) >/dev/fb0

更新:このコードは、フレームバッファを使用するようにXを設定するだけで、Xサーバー内でも機能します。/usr/share/X11/xorg.conf.d/99-fbdev.conf内でfb0を指定する


ここでいくつかの危険なことが起こっています。最初の例は、何らかの理由でフロッピーディスクにランダムバイトを書き込むように見えます。dd特定の理由で「ディスク破棄」と呼ばれることが多いフォローアップコマンドの使用...何をしているのかわからない限り、これらのコマンドの近くに行かないでください
...-ロバート

4
@robert Omarが意味/dev/fbXし、それ/dev/fdは単なるタイプミスだったと思います。そして、はい、dd危険ですrm。それはそれが使用されるべきではないという意味ではありません。それは単に注意して使用する必要があることを意味します。
テルドン

ああ/dev/fb0、もっと理にかなっています!誰もが何をrm意味するかは知っていますddが、もう少しわかりにくいですが、それでも健康上の警告を伝えるべきだと思います。
ロバート

2
「はい、Xサーバーの外、ttyで、コマンドを試してください:」私はそれが正しいかどうかわかりませんので、端末を開いて「cat / dev / urandom> / dev / fd0」と書いてみましたが、エラーメッセージ:「cat:write error:no space left on device」。私は本当にxserverから抜け出す方法を知りません。
アブドゥルアルハズレッド

1
...私はそれをttyと呼びましたが、それはctrl-alt-f1,2,3 ...または "sudo chvt 1"で到達する仮想コンソール、非GUIのもの、全画面にわたる端末です... '空きスペースはありません」と思われますが、まだXセッション中です。
アサインクジョビッチ

0

今朝投稿したばかりで、Raspberry Piでしか機能しない理由を調査しています。 https://www.raspberrypi.org/forums/viewtopic.php?f=72&t=213964&p=1428891#p1428891

/ dev / fb0を開き、それをmmapしてポインターを取得します。Xをまったく使用しませんが、Xを喜んで無視します。画面上の何かです。

ああ、コマンドラインから、/ dev / fb0に書き込むことができます。ただし、オフセット0で書き込むものはすべて左上隅にあるため、すぐに画面からスクロールします。Bashでforループを実行し、数千回書くことができます。または、/ dev / urandomを使用します。特にXを使用しているときに、スクリーンバッファの内容を破壊することは大したことではありません。ウィンドウを領域Xにドラッグするとすぐに、exposeイベントが発生し、再描画されます。回復するために力を殺す必要はありません。

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