É possível acessar o framebuffer para colocar um pixel na tela a partir da linha de comando?

9

Não tenho certeza se é o único caminho possível, mas Eu li que, para colocar um único pixel na tela em um local de sua escolha, é preciso escrever algo em um lugar chamado framebuffer. Então fiquei curioso, se é possível entrar neste lugar e escrever algo nele para exibir um único pixel em algum lugar da tela.

    
por Abdul Al Hazred 24.03.2015 / 15:06

1 resposta

14

sim, fora do X-server, em tty, tente o comando:

cat /dev/urandom >/dev/fb0

Se pixels coloridos preencherem a tela, sua configuração estará correta e você poderá experimentar com este pequeno script:

#!/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

onde a função 'pixel' deve ser uma resposta ... escreva um pixel na tela alterando os valores de byte (azul-verde-vermelho-alfa) no deslocamento xy do dispositivo / dev / fbX que é o buffer de quadros para o vídeo cartão.

ou tente um empate de pixel do liner (amarelo no x: y = 200: 100, se a largura for 1024):

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

UPDATE: este código funciona mesmo dentro do X-server, se nós apenas configurar o X para usar o buffer de quadros . especificando fb0 dentro de /usr/share/X11/xorg.conf.d/99-fbdev.conf

    
por 27.03.2015 / 04:17