Komut satırından ekrana bir piksel koymak için çerçeve tamponuna erişmek mümkün müdür?


16

Mümkün olan tek yol olup olmadığından emin değilim, ancak seçtiğiniz bir yerde ekrana tek bir piksel koymak için framebuffer adlı bir yere bir şey yazmak zorunda olduğunu okudum. Ekranda bir yerde tek bir piksel görüntülemek için bu yere girmek ve içine bir şey yazmak mümkünse meraklandım.


Hangi işletim sistemini belirtmediniz. Linux?
Gilles 'SO- kötü olmayı bırak'

Evet, Linux (nane kod adı rebecca)
Abdul Al Hazred

Yanıtlar:


17

evet, X-sunucusu dışında, tty olarak şu komutu deneyin:

cat /dev/urandom >/dev/fb0

renkli pikseller ekranı doldurursa, kurulumunuz tamamdır ve bu küçük komut dosyasıyla oynamayı deneyebilirsiniz:

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

Burada 'piksel' işlevi bir cevap olmalıdır ... video kartı için çerçeve arabelleği olan dev / fbX aygıtının xy ofseti üzerindeki bayt değerlerini (mavi-yeşil-kırmızı-alfa) değiştirerek ekrana bir piksel yazın.

veya bir satır piksel çizimini deneyin (genişlik 1024 ise x: y = 200: 100'de sarı):

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

GÜNCELLEME: X'i yalnızca çerçeve arabelleği kullanacak şekilde yapılandırırsak , bu kod X sunucusu içinde bile çalışır . /usr/share/X11/xorg.conf.d/99-fbdev.conf içinde fb0 belirterek


Burada birkaç tehlikeli şey var: ilk örnek bir nedenle diskete rastgele bayt yazıyor gibi görünüyor. ddBelirli nedenlerle sıklıkla "Disk Destroy" olarak adlandırılan takip komutları kullanılır ... ne yaptığınızı bilmiyorsanız bu komutların yanına gitmeyin ...
robert

4
@robert Bence Ömer demekti /dev/fbXve /dev/fdsadece bir yazım hatasıydı. Ve evet, ddtehlikeli ama öyle rm. Bu, kullanılmaması gerektiği anlamına gelmez. Sadece dikkatle kullanılması gerektiği anlamına gelir.
terdon

ah /dev/fb0daha mantıklı! Herkes ne rmanlama geldiğini biliyor , ama ddbiraz daha belirsiz, yine de bir sağlık uyarısı taşıması gerektiğini düşünüyor.
robert

2
"evet, X-sunucusu dışında, tty, komutunu dene:" Doğru anladığımı anlamıyorum, bu yüzden sadece terminali açmayı ve "cat / dev / urandom> / dev / fd0" yazmayı denedim ama sadece hata mesajı: "cat: yazma hatası: cihazda boş alan yok". Gerçekten nasıl xserver çıkmak için bilmiyorum.
Abdul Al Hazred

1
... tty olarak adlandırdım, ancak ctrl-alt-f1,2,3 ... veya "sudo chvt 1" ile ulaştığınız sanal konsol, gui olmayan şey, tüm ekranın terminali ... boşluk kalmadı 'gibi görünüyor, sadece hala X-oturumundasınız.
Asain Kujovic

0

Bunu bu sabah yayınladım, hala neden sadece Raspberry Pis'de çalıştığını araştırdım. https://www.raspberrypi.org/forums/viewtopic.php?f=72&t=213964&p=1428891#p1428891

/ Dev / fb0'ı açın, mmap yapın, böylece bir işaretçi elde edin ve çok daha hızlı. X'i hiç kullanmaz, ancak X'i görmezden gelir, sadece ekranda bir şeydir.

Oh, bir komut satırından, / dev / fb0 yazabilirsiniz. Ancak 0 ofsetinde yazdığınız her şey sol üst köşede olacaktır, böylece ekrandan hemen çıkacaktır. Bash'de for for loop yapabilir ve birkaç bin kez yazabilirsiniz. Veya / dev / urandom kullanın. Screenbuffer'da ne olduğunu yok etmek, özellikle X'deyken, önemli değil. Bir pencereyi X alanının üzerine sürüklediğinizde, bir pozlama olayına neden olur ve yeniden boyama yapar. İyileşmek için gücü öldürmene gerek yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.