W celach edukacyjnych chciałbym napisać aplikację w środowisku Linux, która może przetwarzać zdarzenia klawiatury i rysować grafikę bez ogromnych zależności, takich jak X lub SDL. Zakładam, że to musi być możliwe, ponieważ X i SDL to same programy, więc muszą polegać na innych metodach właściwych dla środowiska. Czy to zrozumienie jest prawidłowe?
Jeśli tak, to gdzie mogę nauczyć się pisać taki program? Moje ograniczone doświadczenie mówi mi, że wymagałoby to wywoływania jądra i / lub pisania specjalnych plików; jednak nie udało mi się znaleźć żadnych samouczków na ten temat (nie jestem nawet pewien, co Google).
Ponadto, jeśli jest to istotne, uruchamiam Debian Squeeze na Virtualbox. Użyłem płyty netinst bez sieci, więc obecnie nie ma na niej wiele zainstalowanych. Zainstaluję gcc
, ale mam nadzieję, że dam sobie radę z niczym więcej.
Odpowiedzi:
X (lub X Window System ) to praktycznie najbardziej graficzny interfejs API niskiego poziomu, którego aplikacja Linux prawdopodobnie użyje na nowoczesnym pulpicie Linux. Większość aplikacji nawet nie zadaje sobie trudu, aby przejść tak głęboko i zamiast tego korzysta z implementacji zestawu narzędzi GUI, takich jak GTK lub Qt.
Poniżej znajdują się tylko sterowniki sprzętowe i prawdopodobnie niektóre X-wewnętrzne interfejsy API dla sterowników. Ale nie są one przeznaczone ani zaprojektowane do użytku przez zwykłe aplikacje w przestrzeni użytkownika.
Możesz użyć urządzenia bufora ramki jądra (fbdev), ale nie wiem, jak dobrze obsługuje nowoczesny interfejs graficzny API.
Edycja: Wayland jest alternatywą dla X, która dopiero niedawno znalazła zastosowanie w głównym nurcie. Możliwe jest teraz uruchamianie Linux-Desktop wyłącznie na Wayland, bez żadnego systemu X-Windows. Sam Wayland zależy od sterownika EGL (interfejs API silnie powiązany z OpenGL).
źródło
Jeśli chcesz otrzymywać zdarzenia wejściowe bez użycia X, będziesz musiał odczytać je z węzłów urządzenia. Linux ma ogólny podsystem wejściowy o nazwie evdev, z którego korzysta większość sterowników. Aby odczytać zdarzenia wejściowe, możesz odczytać z dowolnego węzła urządzenia w / dev / input.
Łatwym sposobem na znalezienie węzła urządzenia myszy jest uruchomienie „kota” na węzłach urządzenia pojedynczo, przesuwając mysz podczas każdego „kota”. Jeśli widzisz dane wychodzące na ekran, oznacza to, że jest to twój węzeł urządzenia myszy. Odpowiednim plikiem nagłówkowym jest linux / input.h. Aby dowiedzieć się, jak go używać, zobacz źródło sterownika xevdev.
W przypadku manipulacji grafiką na niskim poziomie, jeśli naprawdę czujesz się ambitny, możesz generalnie zmapować pamięć bufora ramki i zrobić własne bity.
źródło
Dobry samouczek dotyczący grafiki niskiego poziomu w systemie Linux jest dostępny tutaj .
Dobry wpis dotyczący przepełnienia stosu dla danych wejściowych niskiego poziomu jest dostępny tutaj .
Niezależnie od tego, prawdopodobnie chcesz użyć bufora ramki lub drm / kms (bufor ramki jest najprostszy z tych dwóch) do grafiki i evdev do bezpośredniego wprowadzania w Linuksie.
źródło