이것이 유일한 가능한 방법인지는 확실하지 않지만 화면의 원하는 위치에 단일 픽셀을 배치하려면 프레임 버퍼라는 것에 무언가를 작성해야 한다는 내용을 읽었습니다. 그래서 이 곳에 가서 무언가를 써서 화면 어딘가에 단일 픽셀을 표시하는 것이 가능한지 궁금합니다.
답변1
예, 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 오프셋에서 바이트 값(청색-녹색-빨간색-알파)을 변경하여 화면에 픽셀을 씁니다.
또는 선형 픽셀을 그려 보십시오(너비가 1024인 경우 x:y=200:100에 노란색).
printf "\x00\xFF\xFF\x00" | dd bs=4 seek=$((100 * 1024 + 200)) >/dev/fb0
고쳐 쓰다:이 코드는 X-server 내부에서도 작동합니다.프레임버퍼를 사용하도록 X 구성. /usr/share/X11/xorg.conf.d/99-fbdev.conf에 fb0을 지정하여
답변2
오늘 아침에 이 글을 올렸는데 왜 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 위로 창을 드래그하면 노출 이벤트가 발생하고 다시 그려집니다. 힘을 회복하기 위해 죽일 필요는 없습니다.