web-dev-qa-db-ja.com

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

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

16
Abdul Al Hazred

はい、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のx-yオフセットでバイト値(blue-green-red-alpha)を変更して、ピクセルを画面に書き込みます。

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

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

UPDATE:Xを構成してフレームバッファーを使用する の場合、このコードはXサーバー内でも機能します。 /usr/share/X11/xorg.conf.d/99-fbdev.conf内でfb0を指定する

17
Asain Kujovic

今朝投稿したばかりですが、なぜ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イベントが発生し、ウィンドウが再描画されます。回復するために力を殺す必要はありません。

0
Alan Corey