명령 행에서 화면에 픽셀을 배치하기 위해 프레임 버퍼에 액세스 할 수 있습니까?


16

그것이 가능한 유일한 방법인지는 확실하지 않지만 원하는 위치에서 화면에 단일 픽셀을 넣으려면 프레임 버퍼라는 장소에 무언가를 써야한다는 것을 읽었습니다. 그래서 화면에 어딘가에 단일 픽셀을 표시하기 위해 이곳에 들어가서 무언가를 쓸 수 있다면 궁금해졌습니다.


어떤 OS를 지정하지 않았습니다. 리눅스?
Gilles 'SO- 악의를 멈춰라'

예, 리눅스 (mint codename rebecca)
Abdul Al Hazred

답변:


17

예, X 서버 외부의 tty에서 다음 명령을 시도하십시오.

cat /dev/urandom >/dev/fb0

colourfull pixels이 화면을 가득 채우면 설정이 정상이며 다음과 같은 작은 스크립트로 재생할 수 있습니다.

#!/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 오프셋에서 바이트 값 (파란색-녹색-빨간색-알파)을 변경하여 화면에 픽셀을 씁니다.

또는 하나의 라이너 픽셀 드로우를 시도하십시오 (너비가 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특정 이유로 인해 종종 "디스크 파괴"라고 불린 후속 명령 사용 ... 수행중인 작업을 알지 못하면 이러한 명령 근처에 가지 마십시오.
robert

4
내가 생각 @robert 오마르는 의미 /dev/fbX와는 /dev/fd단지 오타했다. 그리고 그렇습니다 . dd그러나 위험 rm합니다. 그렇다고 사용해서는 안된다는 의미는 아닙니다. 그것은주의해서 사용해야한다는 것을 의미합니다.
terdon

/dev/fb0더 이해가된다! 모두가 무슨 rm뜻 인지 알지만 dd조금 더 애매 하지만 여전히 건강 경고를해야한다고 생각합니다.
robert

2
"예, tty에서 X-server 외부에서 명령을 시도하십시오."올바르게 설정했는지 이해하지 못하므로 터미널을 열고 "cat / dev / urandom> / dev / fd0"을 작성하려고했지만 오류 메시지 : "고양이 : 쓰기 오류 : 장치에 남은 공간이 없습니다". 나는 실제로 xserver에서 나가는 방법을 모른다.
Abdul Al Hazred

1
... 나는 그것을 tty라고 불렀지 만 ctrl-alt-f1,2,3 ... 또는 "sudo chvt 1"... '으로 도달하는 것은 가상 콘솔, 비 GUI, 모든 화면의 터미널입니다. 남은 공간이 없어도 괜찮을 것 같습니다. 여전히 X 세션에 있습니다.
Asain Kujovic

0

오늘 아침에 오늘 게시했는데 왜 여전히 라즈베리 파이에서만 작동하는지 조사 중입니다. 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 위로 창을 드래그하자마자 노출 이벤트가 발생하고 다시 그립니다. 당신은 복구하기 위해 힘을 죽일 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.