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


16

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


您没有指定哪个操作系统。Linux的?
吉尔(Gilles)'所以

是的,Linux(薄荷代号rebecca)
Abdul Al Hazred

Answers:


17

是的,在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偏移量(视频卡的帧缓冲区)的字节值(蓝绿色-红色-alpha),将像素写到屏幕上。

或尝试进行一次线性像素绘制(如果宽度为1024,则在x:y = 200:100上呈黄色):

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

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


这里有一些危险的事情:第一个示例出于某种原因似乎将随机字节写入软盘。由于dd特定原因,后续命令通常使用“磁盘销毁”命令...除非您知道自己在做什么,否则不要靠近这些命令...
robert

4
@robert我认为Omar的意思是/dev/fbX,这/dev/fd只是一个错字。是的,dd很危险,但也是如此rm。这并不意味着不应该使用它。这只是意味着应谨慎使用。
terdon

/dev/fb0更有道理啊!大家都知道这rm是什么意思,但是dd有点晦涩,仍然认为它应该带有健康警告。
罗伯特

2
“是的,在tty中,在X服务器之外,请尝试命令:”我不明白我是否正确,所以我尝试仅打开终端并编写“ cat / dev / urandom> / dev / fd0”,但我只得到了错误消息:“猫:写入错误:设备上没有剩余空间”。我真的不知道如何摆脱xserver。
阿卜杜勒·哈兹雷德

1
...我称它为tty,但它是虚拟控制台,是非GUI的东西,在所有屏幕上显示,您可以通过ctrl-alt-f1,2,3 ...或“ sudo chvt 1”到达...'剩下的空间似乎还可以,只是您仍处于X会话中。
Asain Kujovic

0

我今天早上刚刚发布,仍在调查为什么它仅适用于Raspberry Pi。 https://www.raspberrypi.org/forums/viewtopic.php?f=72&t=213964&p=1428891#p1428891

打开/ dev / fb0,对其进行映射,这样您就可以获得一个指针,并且速度更快。完全不使用X,但是它会愉快地忽略X,它只是屏幕上的东西。

哦,从命令行开始,您可以写到/ dev / fb0。但是,无论您在偏移量0处书写的内容都将位于左上角,因此它将立即滚动出屏幕。您可以在Bash中执行for循环并编写数千次。或使用/ dev / urandom。销毁屏幕缓冲区中的内容,尤其是当您使用X时,没什么大不了的。在区域上拖动窗口后,X会立即导致事件暴露并重新绘制。您不需要杀死恢复的力量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.