Zu Bildungszwecken möchte ich eine Anwendung in einer Linux-Umgebung schreiben, die Tastaturereignisse verarbeiten und Grafiken ohne große Abhängigkeiten wie X oder SDL zeichnen kann. Ich gehe davon aus, dass dies möglich sein muss, da X und SDL nur Programme selbst sind und sich daher auf andere Methoden stützen müssen, die der Umgebung eigen sind. Ist dieses Verständnis richtig?
Wenn ja, wo könnte ich lernen, ein solches Programm zu schreiben? Meine begrenzte Erfahrung zeigt mir, dass es erforderlich wäre, den Kernel aufzurufen und / oder in spezielle Dateien zu schreiben. Ich konnte jedoch keine Tutorials zu diesem Thema finden (ich bin mir nicht einmal sicher, was ich bei Google tun soll).
Falls es relevant ist, führe ich Debian Squeeze auf Virtualbox aus. Ich habe eine netinst-CD ohne Netzwerk verwendet, daher ist derzeit nicht viel darauf installiert. Ich werde installieren gcc
, aber ich hoffe, dass ich mit nichts mehr auskommen kann.
Antworten:
X (oder das X Window System ) ist praktisch die einfachste Grafik-API, die eine Linux-Anwendung wahrscheinlich auf einem modernen Linux-Desktop verwenden wird. Die meisten Anwendungen werden sich nicht einmal die Mühe machen, so tief zu gehen, sondern stattdessen eine GUI-Toolkit-Implementierung wie GTK oder Qt verwenden.
Darunter befinden sich nur die Hardwaretreiber und wahrscheinlich einige X-interne APIs für die Treiber. Diese sind jedoch nicht für die Verwendung durch normale Userspace-Anwendungen gedacht oder vorgesehen.
Sie könnten das Kernel-Framebuffer-Gerät (fbdev) verwenden, aber ich weiß nicht, wie gut dies die moderne Grafik-API unterstützt.
Bearbeiten: Wayland ist eine Alternative zu X, die erst kürzlich eine allgemeine Akzeptanz gefunden hat. Es ist jetzt möglich, einen Linux-Desktop nur auf Wayland auszuführen, ohne dass ein X-Windows-System ausgeführt wird. Wayland selbst hängt von einem darunter liegenden EGL- Treiber ab (eine API, die stark mit OpenGL verwandt ist).
quelle
Wenn Sie Eingabeereignisse ohne Verwendung von X abrufen möchten, müssen Sie diese aus Geräteknoten auslesen. Linux hat ein generisches Eingabesubsystem namens evdev, das die meisten Treiber nutzen. Um Eingabeereignisse zu lesen, können Sie von jedem der Geräteknoten in / dev / input lesen.
Ein einfacher Trick, um den Mausgeräteknoten zu finden, besteht darin, "cat" einzeln auf den Geräteknoten auszuführen und die Maus während jeder "cat" zu bewegen. Wenn Daten auf dem Bildschirm angezeigt werden, ist dies Ihr Mausgeräteknoten. Die relevante Header-Datei ist linux / input.h. Ein Beispiel für die Verwendung finden Sie in der Quelle für den xevdev-Treiber.
Wenn Sie sich bei ehrgeizigen Grafikmanipulationen wirklich ehrgeizig fühlen, können Sie den Framebuffer im Allgemeinen im Speicher abbilden und Ihre eigenen Bit-Blts erstellen.
quelle
Ein gutes Tutorial für Low-Level-Grafiken unter Linux finden Sie hier .
Ein guter Beitrag zum Stapelüberlauf für Eingaben auf niedriger Ebene ist hier verfügbar .
Unabhängig davon möchten Sie wahrscheinlich Framebuffer oder drm / kms (Framebuffer ist der einfachere von beiden) für Grafiken und evdev für die direkte Eingabe unter Linux verwenden.
quelle