GNU/Linux >> Belajar Linux >  >> Linux

Praktik Terbaik Untuk Menyembunyikan Konsol Virtual Saat Merender Video Ke Framebuffer?

Saat ini saya sedang merender video di Linux langsung ke framebuffer menggunakan GStreamer.

Saya bertanya-tanya bagaimana cara menyembunyikan konsol virtual saat melakukan rendering. Saya dapat menghentikan kursor agar tidak berkedip, tetapi itu hanya berfungsi jika tidak ada teks yang berubah di konsol.

X tampaknya membuat layar baru yang dapat diakses dengan Ctrl(+Alt)+F7 – apakah mungkin melakukan hal seperti itu sendiri? Entah bagaimana dapat beralih antara konsol &layar rendering dengan Ctrl+Alt+F1 dan Ctrl+Alt+F2.

Jawaban yang Diterima:

X tidak membuat layar baru.

Untuk menggunakan tampilan dan perangkat kejadian input yang sama dengan yang digunakan emulator terminal bawaan kernel (untuk menampilkan terminal virtualnya), sebuah program harus mengatur untuk membagikannya. Emulator terminal kernel menyediakan API yang melaluinya program semacam itu dapat bernegosiasi ketika memiliki tanggung jawab untuk input dan output, dan ketika emulator terminal bawaan kernel memilikinya.

API ini melalui ioctl() memanggil deskriptor file yang terbuka untuk perangkat karakter terminal virtual kernel. Ada 64 perangkat ini di Linux, 16 di FreeBSD/PC-BSD. X tidak membuat ini. Ini membuka yang sudah ada - dengan konvensi yang tidak ada program TUI yang secara bersamaan mencoba untuk digunakan sebagai terminal virtual kernel. Dengan kata lain:Menurut konvensi, tidak ada sesi login TUI yang dijalankan pada perangkat terminal virtual kernel yang dibuka dan digunakan X.

Program yang berbagi dengan emulator terminal kernel harus …

  • … beri tahu emulator terminal kernel untuk berhenti menulis ke framebuffer untuk menampilkan output, atau kursor. Ini dilakukan dengan KDSETMODE ioctl() untuk mengatur KD_GRAPHICS . yang saat ini cukup salah nama mode. Saat berada di KD_TEXT mode emulator terminal kernel saat ini biasanya tidak ada hubungannya dengan perangkat keras tampilan berada dalam mode teks yang sebenarnya. Apa yang disebut konsol framebuffer memiliki perangkat keras tampilan dalam mode grafis. Perbedaan antara KD_TEXT dan KD_GRAPHICS mode adalah bahwa dalam mode sebelumnya emulator terminal kernel akan menggambar mesin terbang karakter ke framebuffer saat disiplin baris terminal mengirimkan output ke sana, dan juga akan menggambar kursor; sedangkan dalam mode terakhir itu tidak akan menggambar sama sekali. Ini sebenarnya akan lebih baik dianggap sebagai mode "gambar grafik" dan "jangan gambar grafik" saat ini, adalah yang salah yang tidak dinamai "grafik".
  • … negosiasikan peralihan terminal virtual, jika berlaku. Ini dilakukan dengan VT_SETMODE ioctl() , yang dengannya program dapat mengatur untuk menerima sinyal ketika terminal virtual yang digunakan untuk ioctl() panggilan dialihkan ke atau di luar.
  • … negosiasikan penanganan input dengan emulator terminal kernel.
    • Di Linux, seseorang mungkin membaca dari subsistem kejadian input secara langsung, dalam hal ini program memberitahu emulator terminal kernel untuk berhenti membaca kejadian input yang sama, yang menerima salinannya, untuk berhenti menerjemahkannya ke dalam karakter, dan berhenti mengirim mereka ke disiplin garis sebagai masukan. Cara melakukannya bervariasi:
      • Cara asli untuk melakukannya adalah dengan KDSKBMODE ioctl() , alihkan terminal virtual ke K_RAW mode. Dalam mode ini, emulator terminal kernel masih menerima kejadian input dari subsistem kejadian input kernel, tetapi tidak melakukan pemrosesan apa pun, meneruskannya ke disiplin baris sebagai input karakter. Namun, mekanisme ini (yang berakar pada cara X bekerja sebelum ada subsistem kejadian input) rusak, di mana input itu masih dikirim ke disiplin garis dan masih harus dikeringkan. Dan diperlukan termios status input untuk terminal juga berada dalam mode mentah, jika tidak, kode pindaian mentah akan disalahartikan sebagai karakter khusus seperti karakter STOP atau INTR oleh disiplin baris.
      • Cara yang pernah dianggap lebih baik adalah dengan KDSKBMODE ioctl() , alihkan terminal virtual ke K_OFF mode. Dalam mode ini, emulator terminal kernel tidak hanya tidak akan memproses kejadian input, tetapi juga tidak akan mengirimkannya ke disiplin baris. Namun, mekanisme ini rusak, karena merupakan bagian dari K_OFF /K_RAW /K_CODE /K_XLATE saklar mode. systemd dan sistem serupa lainnya akan mengelola mode terminal virtual, dan akhirnya mengganti terminal virtual keluar dari K_OFF modus.
      • Cara yang lebih baik saat ini adalah dengan menggunakan KDSKBMUTE bendera. Ini menonaktifkan semua pemrosesan acara input tanpa mempengaruhi, atau dipengaruhi oleh, K_RAW /K_CODE /K_XLATE sakelar mode.
    • Pada FreeBSD/PC-BSD, tidak ada perangkat karakter input event yang terpisah. Seseorang membaca input keyboard melalui terminal virtual kernel bagaimanapun , jadi sementara orang mungkin ingin mengubahnya menjadi scancode (K_RAW ) atau kode kunci (K_CODE ) mode, seseorang tidak ingin mematikannya.
Terkait:Linux – Bagaimana cara membuat disk virtual ukuran tetap dengan qemu-img?

Ada beberapa interaksi, di sini. Server X, misalnya, mengalihkan terminal virtual ke mode kode kunci, membaca kode kunci dan mengubahnya menjadi simbol kunci X, meneruskannya melalui mekanisme penanganan keyboard X. Ini berarti bahwa emulator terminal bawaan kernel tidak pernah dapat melakukan pemrosesan khusus untuk Alt +Sn urutan keyboard. Ini adalah server X yang harus mengenali sendiri Ctrl +Alt +Sn .

Bacaan lebih lanjut

  • Arthur Taylor (2013-02-02). systemd tidak boleh memanggil KDSKBMODE pada VT dengan X . systemd-devel.
  • Adam Jackson (2012-11-16). [PATCH] vt:Jatuhkan K_OFF untuk VC_MUTE . Milis kernel Linux.
  • Adam Jackson (2012-11-16). [PATCH] linux:Lebih suka ioctl(KDSKBMUTE, 1) daripada ioctl(KDSKBMODE, K_OFF) . xorg-devel.
  • Michael K. Johnson (1994-06-01). Petunjuk Pemrograman Linux . Jurnal Linux.

Linux
  1. Temukan Font Terbaik Untuk Merender Codepoint?

  2. MOC – Pemutar Musik Terbaik untuk Konsol Linux Anda

  3. Hyper – Aplikasi Terminal Terbaik untuk Linux

  1. 10 Aplikasi Pengeditan Media Terbaik untuk Linux

  2. 10 Perangkat Lunak Konferensi Video Terbaik untuk Linux pada tahun 2020

  3. 10 Alternatif Skype Gratis Terbaik untuk PC Linux

  1. vlock – Cara Cerdas untuk Mengunci Konsol atau Terminal Virtual Pengguna di Linux

  2. Port Serial Virtual untuk Linux

  3. Apa praktik terbaik untuk komunikasi antara instans Amazon EC2?