Para fins educacionais, eu gostaria de escrever um aplicativo em um ambiente Linux que possa processar eventos de teclado e desenhar gráficos sem grandes dependências, como X ou SDL. Presumo que isso deve ser possível, porque X e SDL são apenas programas em si, portanto, eles devem confiar em outros métodos inerentes ao ambiente. Este entendimento está correto?
Em caso afirmativo, onde posso aprender a escrever esse programa? Minha experiência limitada me diz que isso envolveria fazer chamadas para o kernel e / ou gravar em arquivos especiais; no entanto, não consegui encontrar nenhum tutorial sobre o assunto (nem tenho certeza do que fazer com o Google).
Além disso, caso seja relevante, estou executando o Debian Squeeze no Virtualbox. Eu usei um CD netinst sem rede, portanto, não há muito instalado nele atualmente. Vou instalar gcc
, mas espero poder me virar com nada mais.
Respostas:
O X (ou o X Window System ) é praticamente a API gráfica de mais baixo nível que um aplicativo Linux provavelmente usará em um desktop Linux moderno. A maioria dos aplicativos nem se preocupa em ir tão fundo e, em vez disso, usa uma implementação de kit de ferramentas da GUI como GTK ou Qt.
Abaixo disso, existem apenas os drivers de hardware e provavelmente algumas APIs internas para os drivers. Mas esses não foram criados ou projetados para serem usados por aplicativos normais do espaço do usuário.
Você pode usar o dispositivo framebuffer do kernel (fbdev), mas não sei o quão bem ele suporta a API gráfica moderna.
Edit: Wayland é uma alternativa ao X que só recentemente encontrou alguma adoção convencional. Agora é possível executar um Linux-Desktop puramente em Wayland sem nenhum sistema X-Windows em execução. O próprio Wayland depende de um driver EGL abaixo (uma API fortemente relacionada ao OpenGL).
fonte
Se você deseja obter eventos de entrada sem usar o X, será necessário lê-los nos nós do dispositivo. O Linux possui um subsistema de entrada genérico chamado evdev, do qual a maioria dos drivers tira proveito. Portanto, para ler eventos de entrada, você pode ler de qualquer um dos nós do dispositivo em / dev / input.
Um truque fácil para encontrar o nó do dispositivo do mouse é executar "gato" nos nós do dispositivo, um de cada vez, movendo o mouse durante cada "gato". Se você vir dados saindo da tela, esse é o nó do dispositivo do mouse. O arquivo de cabeçalho relevante é linux / input.h. Para um exemplo de como usá-lo, consulte a fonte do driver xevdev.
Para manipulação de gráficos de baixo nível, se você está realmente se sentindo ambicioso, geralmente pode mapear a memória do buffer de quadros e fazer seus próprios bits de bits.
fonte
Um bom tutorial para gráficos de baixo nível no Linux está disponível aqui .
Uma boa publicação sobre estouro de pilha para entrada de baixo nível está disponível aqui .
Independentemente, você provavelmente deseja usar o framebuffer ou o drm / kms (o framebuffer é o mais simples dos dois) para gráficos e evdev para entrada direta no Linux.
fonte