À des fins éducatives, je voudrais écrire une application sur un environnement Linux qui peut traiter les événements du clavier et dessiner des graphiques sans énormes dépendances comme X ou SDL. Je suppose que cela doit être possible, car X et SDL ne sont que des programmes eux-mêmes, ils doivent donc s'appuyer sur d'autres méthodes inhérentes à l'environnement. Cette compréhension est-elle correcte?
Si oui, où pourrais-je apprendre à écrire un tel programme? Mon expérience limitée me dit que cela impliquerait de faire des appels au noyau et / ou d'écrire dans des fichiers spéciaux; cependant, je n'ai pas pu trouver de tutoriels sur le sujet (je ne sais même pas quoi faire de Google).
De plus, au cas où cela serait pertinent, j'utilise Debian Squeeze sur Virtualbox. J'ai utilisé un cd netinst sans réseau, donc il n'y en a pas beaucoup installé actuellement. Je vais installer gcc
, mais j'espère pouvoir m'en tirer sans plus.
Réponses:
X (ou le système X Window ) est pratiquement l'API graphique la plus bas niveau qu'une application Linux utilisera probablement sur un bureau Linux moderne. La plupart des applications ne prendront même pas la peine d'aller aussi loin et utiliseront plutôt une implémentation de boîte à outils GUI comme GTK ou Qt.
En dessous, il n'y a que les pilotes matériels et probablement quelques API X-internes pour les pilotes. Mais ceux-ci ne sont pas destinés ou conçus pour être utilisés par les applications normales de l'espace utilisateur.
Vous pouvez utiliser le périphérique framebuffer du noyau (fbdev), mais je ne sais pas si cela prend en charge l'API graphique moderne.
Edit: Wayland est une alternative à X qui n'a que récemment trouvé une certaine adoption générale. Il est maintenant possible d'exécuter un Linux-Desktop uniquement sur Wayland sans aucun système X-Windows en cours d'exécution. Wayland lui-même dépend d'un pilote EGL en dessous (une API fortement liée à OpenGL).
la source
Si vous souhaitez obtenir des événements d'entrée sans utiliser X, vous devrez les lire à partir des nœuds de périphérique. Linux a un sous-système d'entrée générique appelé evdev dont la plupart des pilotes profitent. Ainsi, pour lire les événements d'entrée, vous pouvez lire à partir de n'importe quel nœud de périphérique dans / dev / input.
Une astuce simple pour trouver le nœud du périphérique de la souris consiste à exécuter "cat" sur les nœuds du périphérique un par un, en déplaçant la souris pendant chaque "chat". Si vous voyez des données sortir à l'écran, c'est le nœud de votre périphérique de souris. Le fichier d'en-tête pertinent est linux / input.h. Pour un exemple d'utilisation, regardez la source du pilote xevdev.
Pour la manipulation graphique de bas niveau, si vous vous sentez vraiment ambitieux, vous pouvez généralement mapper la mémoire du framebuffer et faire vos propres bit blts.
la source
Un bon tutoriel pour les graphiques de bas niveau sur Linux est disponible ici .
Un bon article sur le débordement de pile pour les entrées de bas niveau est disponible ici .
Quoi qu'il en soit, vous voudrez probablement utiliser framebuffer ou drm / kms (framebuffer étant le plus simple des deux) pour les graphiques et evdev pour une entrée directe sur Linux.
la source