GNU/Linux >> Tutoriels Linux >  >> Linux

Meilleure pratique pour masquer la console virtuelle lors du rendu de la vidéo dans le framebuffer ?

Je rends actuellement la vidéo sous Linux directement dans le framebuffer à l'aide de GStreamer.

Je me demandais comment j'allais cacher la console virtuelle pendant le rendu. Je peux empêcher le curseur de clignoter, mais cela ne fonctionne que lorsqu'aucun texte ne change sur la console.

X semble créer un nouvel écran accessible avec Ctrl (+ Alt) + F7 - est-il possible de faire quelque chose comme ça moi-même ? D'une manière ou d'une autre, être capable de basculer entre une console et l'écran de rendu avec Ctrl+Alt+F1 et Ctrl+Alt+F2.

Réponse acceptée :

X ne crée pas de nouvel écran.

Pour utiliser les mêmes périphériques d'affichage et d'entrée d'événements que l'émulateur de terminal intégré du noyau (pour présenter ses terminaux virtuels), un programme doit s'arranger pour les partager. L'émulateur de terminal du noyau fournit une API à travers laquelle un tel programme peut négocier quand il a la responsabilité de l'entrée et de la sortie, et quand l'émulateur de terminal intégré du noyau l'a fait.

Cette API passe par ioctl() appelle un descripteur de fichier qui est ouvert sur un périphérique caractère de terminal virtuel du noyau. Il y a 64 de ces périphériques sous Linux, 16 sous FreeBSD/PC-BSD. X ne les crée pas. Il en ouvre un existant - par convention, un qu'aucun programme TUI n'essaie simultanément d'utiliser comme terminal virtuel du noyau. En d'autres termes :par convention, aucune session de connexion TUI n'est exécutée sur le terminal virtuel du noyau que X ouvre et utilise.

Un programme qui partage avec l'émulateur de terminal du noyau doit …

  • … indique à l'émulateur de terminal du noyau d'arrêter d'écrire dans le framebuffer pour afficher la sortie ou le curseur. Ceci est fait avec le KDSETMODE ioctl() pour définir le KD_GRAPHICS aujourd'hui assez mal nommé mode. Quand en KD_TEXT De nos jours, l'émulateur de terminal du noyau n'a généralement rien à voir avec le fait que le matériel d'affichage soit en mode texte réel. Les soi-disant consoles de framebuffer avoir le matériel d'affichage en mode graphique. La distinction entre KD_TEXT et KD_GRAPHICS modes est que dans le premier mode, l'émulateur de terminal du noyau dessinera des glyphes de caractères sur le framebuffer lorsque la discipline de ligne terminale lui fournira une sortie, et dessinera également un curseur; alors que dans ce dernier mode, il ne fera aucun dessin du tout. Ceux-ci seraient en fait mieux considérés comme des modes "dessiner des graphiques" et "ne pas dessiner de graphiques" de nos jours, si le mauvais n'était pas nommé "graphiques". ☺
  • … négocier le changement de terminal virtuel, le cas échéant. Cela se fait avec le VT_SETMODE ioctl() , avec lequel le programme peut s'arranger pour recevoir des signaux lorsque le terminal virtuel qu'il utilise pour le ioctl() les appels sont basculés vers ou depuis.
  • … négocier la gestion des entrées avec l'émulateur de terminal du noyau.
    • Sous Linux, on peut lire directement à partir du sous-système d'événements d'entrée, auquel cas le programme dit à l'émulateur de terminal du noyau d'arrêter de lire ces mêmes événements d'entrée, dont il reçoit des copies, d'arrêter de les traduire en caractères et d'arrêter les envoyer à la discipline de ligne comme entrée. La façon dont cela est fait varie :
      • La façon originale de faire cela était avec le KDSKBMODE ioctl() , basculer le terminal virtuel en K_RAW mode. Dans ce mode, l'émulateur de terminal du noyau reçoit toujours les événements d'entrée du sous-système d'événements d'entrée du noyau, mais il n'effectue aucun traitement de ceux-ci, les transmettant à la discipline de ligne en tant qu'entrée de caractères. Cependant, ce mécanisme (qui avait ses racines dans la façon dont X fonctionnait avant qu'il y ait un sous-système d'événement d'entrée) était cassé, dans la mesure où cette entrée était toujours envoyée à la discipline de ligne et devait encore être drainée. Et il fallait que les termios l'état d'entrée du terminal soit également en mode brut, sinon les scancodes bruts seraient interprétés à tort comme des caractères spéciaux tels que les caractères STOP ou INTR par la discipline de ligne.
      • Une façon, autrefois considérée comme meilleure, de le faire était avec le KDSKBMODE ioctl() , basculer le terminal virtuel en K_OFF mode. Dans ce mode, non seulement l'émulateur de terminal du noyau ne traiterait pas les événements d'entrée, mais il ne les enverrait pas à la discipline de ligne. Cependant, ce mécanisme était cassé, car il faisait partie d'un K_OFF /K_RAW /K_CODE /K_XLATE changement de mode. systemd et d'autres systèmes similaires géreraient les modes de terminaux virtuels et finiraient par basculer les terminaux virtuels hors de K_OFF mode.
      • La meilleure façon de nos jours est d'utiliser le KDSKBMUTE drapeau. Cela désactive tous les traitements d'événements d'entrée sans affectant ou étant affecté par le K_RAW /K_CODE /K_XLATE commutateur de mode.
    • Sur FreeBSD/PC-BSD, il n'y a pas de périphérique de caractère d'événement d'entrée séparé en premier lieu. On lit les entrées au clavier via le terminal virtuel du noyau de toute façon , donc bien que l'on veuille le changer en scancode (K_RAW ) ou code clé (K_CODE ) modes, on ne veut pas le désactiver.
En relation :Linux – Comment créer un disque virtuel de taille fixe avec qemu-img ?

Il y a des interactions, ici. Un serveur X, par exemple, bascule le terminal virtuel en mode keycode, lit les keycodes et les transforme en X keysyms, en les faisant passer par les mécanismes de gestion du clavier X. Cela signifie que l'émulateur de terminal intégré au noyau ne peut jamais effectuer le traitement spécial pour Alt +Fn séquences de clavier. C'est le serveur X qui doit lui-même reconnaître Ctrl +Alt +Fn .

Autres lectures

  • Arthur Taylor (2013-02-02). systemd ne doit pas appeler KDSKBMODE sur un VT avec X . systemd-devel.
  • Adam Jackson (2012-11-16). [PATCH] vt :supprimez K_OFF pour VC_MUTE . Liste de diffusion du noyau Linux.
  • Adam Jackson (2012-11-16). [PATCH] Linux :Préférer ioctl(KDSKBMUTE, 1) à ioctl(KDSKBMODE, K_OFF) . xorg-devel.
  • Michael K. Johnson (1994-06-01). Conseils de programmation Linux . Journal Linux.

Linux
  1. vlock - Un moyen intelligent de verrouiller la console ou le terminal virtuel de l'utilisateur sous Linux

  2. 3 meilleurs émulateurs de terminaux accélérés par GPU pour Linux

  3. 7 conseils de bonnes pratiques pour gérer des équipes à distance

  4. meilleure pratique pour l'autorisation d'accès aux utilisateurs pour apache tomcat

  5. Quelle est la meilleure pratique pour la communication entre les instances Amazon EC2 ?

Meilleurs convertisseurs vidéo gratuits pour Linux [GUI, CLI et en ligne]

Top 30 des meilleurs outils VMware pour les entreprises modernes

15 meilleurs lecteurs vidéo Linux en 2022 :à essayer absolument pour les cinéphiles

15 meilleurs logiciels de montage vidéo pour le système Linux

Borne de dédouanement

Où est la vue terminale de tty7