是否可以访问帧缓冲区以便从命令行将像素放在屏幕上?

Abd*_*red 27 linux graphics framebuffer console

我不确定这是否是唯一可能的方法,但我读到过,为了将单个像素放在屏幕上您选择的位置,必须将一些内容写入一个名为 framebuffer 的地方。所以我开始好奇,是否有可能进入这个地方并在其中写入一些东西,以便在屏幕上的某个地方显示单个像素。

Asa*_*vic 26

是的,在 X-server 之外,在 tty 中,尝试命令:

cat /dev/urandom >/dev/fb0
Run Code Online (Sandbox Code Playgroud)

如果colourfull像素填满了屏幕,那么您的设置就可以了,您可以尝试使用这个小脚本:

#!/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
Run Code Online (Sandbox Code Playgroud)

其中函数'像素'应该是一个答案......通过更改设备/dev/fbX(视频卡的帧缓冲区)的xy偏移上的字节值(蓝-绿-红-alpha)将像素写入屏幕。

或尝试绘制一个线性像素(x:y=200:100 上的黄色,如果宽度为 1024):

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

更新:如果我们只是将 X 配置为使用 frame buffer,则此代码甚至在 X-server 中也能工作。通过在 /usr/share/X11/xorg.conf.d/99-fbdev.conf 中指定 fb0

  • @robert 我认为 Omar 的意思是 `/dev/fbX` 而 `/dev/fd` 只是一个错字。是的,`dd` 是危险的,但 `rm` 也是。这并不意味着它不应该被使用。这只是意味着它应该小心使用。 (5认同)
  • “是的,在 X-server 之外,在 tty 中,尝试命令:”我不明白我是否做对了,所以我试着打开终端并写下“cat /dev/urandom > /dev/fd0”但我只得到错误消息:“猫:写入错误:设备上没有剩余空间”。我真的不知道如何摆脱xserver。 (2认同)