В образовательных целях я хотел бы написать приложение в среде Linux, которое может обрабатывать события клавиатуры и рисовать графику без огромных зависимостей, таких как X или SDL. Я предполагаю, что это должно быть возможно, потому что X и SDL являются просто программами, поэтому они должны полагаться на другие методы, присущие среде. Это понимание правильно?
Если да, где я могу научиться писать такую программу? Мой ограниченный опыт говорит мне, что это будет включать в себя вызовы ядра и / или запись в специальные файлы; Тем не менее, я не смог найти какие-либо учебники по этому вопросу (я даже не уверен, что с Google).
Также, если это актуально, я запускаю Debian Squeeze на Virtualbox. Я использовал компакт-диск netinst без подключения к сети, поэтому в настоящее время на нем установлено не так много. Я установлю gcc
, но я надеюсь, что смогу обойтись ни с чем больше.
Ответы:
X (или X Window System ) - практически самый низкоуровневый графический API, который приложение Linux, вероятно, будет использовать на современном рабочем столе Linux. Большинство приложений даже не будут углубляться в это и будут использовать реализацию инструментария GUI, такую как GTK или Qt.
Ниже представлены только драйверы оборудования и, возможно, некоторые X-внутренние API для драйверов. Но они не предназначены и не предназначены для использования в обычных приложениях пользовательского пространства.
Вы можете использовать устройство фреймбуфера ядра (fbdev), но я не знаю, насколько хорошо он поддерживает современный графический API.
Редактировать: Wayland является альтернативой X, которая только недавно нашла широкое распространение. Теперь возможно запускать Linux-Desktop исключительно на Wayland без работающей системы X-Windows. Сам Wayland зависит от драйвера EGL (API, тесно связанный с OpenGL).
источник
Если вы хотите получать входные события без использования X, вам придется считывать их с узлов устройства. В Linux есть общая подсистема ввода, называемая evdev, которой пользуется большинство драйверов. Таким образом, для чтения входных событий вы можете читать с любого из узлов устройства в / dev / input.
Простой способ найти узел устройства мыши - запустить «кошку» на узлах устройства по одному, перемещая мышь во время каждой «кошки». Если вы видите данные, поступающие на экран, то это ваш узел устройства мыши. Соответствующий заголовочный файл - linux / input.h. Для примера того, как его использовать, посмотрите на источник для драйвера xevdev.
Для низкоуровневых манипуляций с графикой, если вы действительно чувствуете себя честолюбивым, вы можете, как правило, отображать в памяти фрейм-буфер и делать свои собственные битовые блики.
источник
Хорошее руководство для низкоуровневой графики в Linux доступно здесь .
Хороший пост о переполнении стека для низкоуровневого ввода доступен здесь .
Несмотря на это, вы, вероятно, захотите использовать framebuffer или drm / kms (framebuffer - самый простой из двух) для графики и evdev для прямого ввода в Linux.
источник