GNU/Linux >> Belajar Linux >  >> Linux

Cat Piksel ke Layar melalui Linux FrameBuffer

Saya telah berhasil dengan beberapa eksperimen berikut.

Pertama, cari tahu apakah X menggunakan TrueColor RGB yang dipadatkan hingga 32 bit (atau asumsikan saja demikian). Kemudian cari tahu apakah Anda memiliki izin menulis ke fb0 (dan itu ada). Jika ini benar (dan saya berharap banyak toolkit/desktop/PC modern mungkin menggunakan ini sebagai default), maka Anda harus dapat melakukan hal berikut (dan jika default ini tidak berlaku, maka Anda mungkin masih dapat berhasil dengan tes berikut meskipun detailnya mungkin berbeda):

Tes 1:buka terminal virtual (dalam X) dan ketik:$ echo "ddd ... ddd">/dev/fb0di mana ... sebenarnya beberapa layar penuh d. Hasilnya akan menjadi satu atau lebih (sebagian) garis abu-abu di bagian atas layar Anda, tergantung pada berapa panjang string gema Anda dan resolusi piksel apa yang telah Anda aktifkan. Anda juga dapat memilih huruf apa saja (nilai ascii semuanya kurang dari 0x80, sehingga warna yang dihasilkan akan menjadi abu-abu gelap.. dan variasikan huruf jika Anda menginginkan sesuatu selain abu-abu). Jelas, ini dapat digeneralisasikan ke shell loop atau Anda dapat menyimpan file besar untuk melihat efeknya lebih jelas:misalnya:$ cat /lib/libc.so.6>/dev/fb0untuk melihat warna sebenarnya dari beberapa fsf pendukung;-P

Jangan khawatir jika sebagian besar layar Anda tertimpa. X masih memiliki kendali atas penunjuk tetikus dan masih memiliki gagasan tentang di mana jendela dipetakan. Yang harus Anda lakukan adalah mengambil jendela mana saja dan menyeretnya sedikit untuk menghapus kebisingan.

Tes 2:cat /dev/fb0> xxxlalu ubah tampilan desktop Anda (misalnya, buka jendela baru dan tutup yang lain). Terakhir, lakukan kebalikannya:cat xxx> /dev/fb0 untuk mendapatkan kembali desktop lama Anda!

Ha, yah, tidak cukup. Gambar desktop lama Anda adalah ilusi, dan Anda akan segera membuangnya saat membuka jendela apa pun ke layar penuh.

Tes 3:Tulis aplikasi kecil yang mengambil dump sebelumnya dari /dev/fb0 dan memodifikasi warna piksel, misalnya, untuk menghapus komponen merah atau menambah biru, atau membalik merah dan hijau, dll. Kemudian tulis kembali ini piksel ke dalam file baru yang dapat Anda lihat nanti melalui pendekatan shell sederhana dari pengujian 2. Juga, perhatikan bahwa Anda mungkin akan berurusan dengan jumlah B-G-R-A 4-byte per piksel. Ini berarti Anda ingin mengabaikan setiap byte ke-4 dan juga memperlakukan yang pertama di setiap set sebagai komponen biru. "ARGB" adalah big-endian, jadi jika Anda mengunjungi byte ini melalui peningkatan indeks larik C, biru akan didahulukan, lalu hijau, lalu merah.. yaitu, B-G-R-A (bukan A-R-G-B).

Tes 4:tulis aplikasi dalam bahasa apa pun yang berputar dengan kecepatan video mengirimkan gambar non persegi (pikirkan xeyes) ke bagian layar untuk membuat animasi tanpa batas jendela. Untuk poin ekstra, gerakkan animasi di seluruh layar. Anda harus memastikan untuk melewatkan ruang besar setelah menggambar baris kecil bernilai piksel (untuk mengganti lebar layar yang mungkin jauh lebih lebar daripada gambar yang dianimasikan).

Tes 5:mainkan trik pada teman, misalnya, perpanjang tes 4 sehingga gambar orang animasi muncul di desktop mereka (mungkin memfilmkan diri Anda sendiri untuk mendapatkan data piksel), lalu berjalan ke salah satu desktop penting mereka folder, mengambil folder dan mencabik-cabiknya, lalu mulai tertawa histeris, lalu mengeluarkan bola api dan menelan seluruh desktop mereka. Meskipun ini semua akan menjadi ilusi, mereka mungkin sedikit panik.. tetapi gunakan itu sebagai pengalaman belajar untuk memamerkan Linux dan open source dan menunjukkan betapa menakutkannya bagi seorang pemula daripada yang sebenarnya. ["virus" umumnya adalah ilusi yang tidak berbahaya di Linux]


Saya sedang berpikir untuk menulis program berbasis framebuffer, hanya karena saya harus bisa menggulir (air terjun SDR). Lihat https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=232493&p=1425567#p1425567 Tes gulir yang saya anggap berhasil. Dalam 2 struct yang kami ambil dengan ioctl untuk info, ada juga hal-hal tentang kedalaman warna. Anda tampaknya mendasarkan program Anda pada contoh yang sama dengan yang saya lakukan. Cara mendapatkan warna piksel dari framebuffer di linux (Raspberry Pi)

Milik saya berfungsi dengan baik di Raspberry Pi saya, baik dengan X atau tidak. Itu tidak berpengaruh pada layar di laptop saya. Itu memiliki /dev/fb0, program berjalan dan angkanya terlihat benar, tetapi tidak melakukan apa pun secara visual. Mungkin buffer ganda atau semacamnya.

Di bawah X itu tidak benar-benar merusak. Jika Anda menyeret beberapa jendela sehingga semuanya menggambar ulang semuanya kembali. Kemudian saya memutuskan untuk mencadangkan apa yang ada di layar dan mengembalikannya setelah selesai, itu juga berhasil. Sebuah jendela yang saya pindahkan dan pasang kembali berfungsi sama seperti jika saya tidak pernah menyentuhnya. X tidak menyadari bahwa saya telah mengotak-atik buffer layar, ia tahu apa yang diletakkan di sana dan mendaftarkan klik mouse yang sesuai. Jika saya memindahkan jendela dan tidak mengembalikannya, klik akan tetap berfungsi di tempatnya.


Saya katakan hati-hati sebelum mencoba menulis ke /dev/fb0, seperti yang disarankan di atas. Saya mencobanya di bawah Xin ubuntu 10.04 dan a) tidak ada yang terjadi secara visual, b) merusak semua jendela shell, bahkan tty lainnya, menyebabkan kesalahan kernel dan kurangnya fungsionalitas.


Jika Anda menjalankan X11, Anda HARUS melalui API X11 untuk menggambar ke layar. Berkeliling server X sangat rusak (dan, sering seperti yang Anda lihat, tidak berfungsi). Itu juga dapat menyebabkan crash, atau hanya kerusakan tampilan umum.

Jika Anda ingin dapat menjalankan di mana saja (baik konsol &di bawah X), lihat SDL atau GGI. Jika Anda hanya peduli dengan X11, Anda dapat menggunakan GTK, QT, atau bahkan Xlib. Ada banyak sekali pilihan...


Linux
  1. Cara menggunakan perintah "layar" di Linux

  2. Linux Framebuffer mengatur resolusi dengan benar

  3. Beberapa wallpaper layar di Linux?

  1. Cara Menggunakan Perintah Layar Linux

  2. Temukan file lalu cd ke direktori itu di Linux

  3. Daftar port SATA yang tidak digunakan di Linux

  1. Linux – Apakah Mungkin Untuk Mengakses Framebuffer Untuk Menempatkan Piksel Di Layar Dari Baris Perintah?

  2. Bagaimana cara menghentikan proses layar di linux?

  3. Bunuh Layar Terlampir di Linux