Con fines educativos, me gustaría escribir una aplicación en un entorno Linux que pueda procesar eventos de teclado y dibujar gráficos sin grandes dependencias como X o SDL. Supongo que esto debe ser posible, porque X y SDL son solo programas en sí mismos, por lo que deben confiar en otros métodos inherentes al entorno. ¿Es correcto este entendimiento?
Si es así, ¿dónde podría aprender a escribir dicho programa? Mi experiencia limitada me dice que implicaría hacer llamadas al núcleo y / o escribir en archivos especiales; sin embargo, no he podido encontrar ningún tutorial sobre el tema (ni siquiera estoy seguro de qué hacer con Google).
Además, en caso de que sea relevante, estoy ejecutando Debian Squeeze en Virtualbox. He usado un cd netinst sin red, por lo que no hay mucho instalado actualmente. Lo instalaré gcc
, pero espero poder sobrevivir sin nada más.
Respuestas:
X (o el sistema X Window ) es prácticamente la API de gráficos de más bajo nivel que una aplicación Linux probablemente usará en un escritorio Linux moderno. La mayoría de las aplicaciones ni siquiera se molestarán en ir tan profundo y en su lugar usarán una implementación de kit de herramientas GUI como GTK o Qt.
Debajo de eso solo están los controladores de hardware y probablemente algunas API X-internas para los controladores. Pero esos no están diseñados o diseñados para ser utilizados por aplicaciones normales de espacio de usuario.
Podría usar el dispositivo kernel framebuffer (fbdev), pero no sé qué tan bien es compatible con la API de gráficos moderna.
Editar: Wayland es una alternativa a X que solo recientemente ha encontrado alguna adopción convencional. Ahora es posible ejecutar un escritorio Linux únicamente en Wayland sin ningún sistema X-Windows ejecutándose. Wayland en sí depende de un controlador EGL debajo (una API fuertemente relacionada con OpenGL).
fuente
Si desea obtener eventos de entrada sin usar X, deberá leerlos desde los nodos del dispositivo. Linux tiene un subsistema de entrada genérico llamado evdev que la mayoría de los controladores aprovechan. Entonces, para leer eventos de entrada, puede leer desde cualquiera de los nodos del dispositivo en / dev / input.
Un truco fácil para encontrar el nodo del dispositivo del mouse es ejecutar "cat" en los nodos del dispositivo uno a la vez, moviendo el mouse durante cada "cat". Si ve datos que salen a la pantalla, entonces ese es el nodo de su dispositivo de mouse. El archivo de encabezado relevante es linux / input.h. Para ver un ejemplo de cómo usarlo, consulte la fuente del controlador xevdev.
Para la manipulación de gráficos de bajo nivel, si realmente se siente ambicioso, generalmente puede mapear la memoria del framebuffer y hacer sus propios bit blts.
fuente
Aquí hay un buen tutorial para gráficos de bajo nivel en Linux .
Aquí está disponible una buena publicación sobre el desbordamiento de pila para la entrada de bajo nivel .
De todos modos, probablemente desee usar framebuffer o drm / kms (framebuffer es el más simple de los dos) para gráficos y evdev para entrada directa en Linux.
fuente