Estou tentando capturar a entrada do teclado em um programa C / C ++ sem exigir privilégios de root e sem o uso de X11 XNextEvent()
.
Eu tentei abrir o dispositivo diretamente, mas por razões óbvias de segurança, acessar o hardware diretamente requer permissões de root. O dispositivo que estou tentando abrir é /dev/input/by-id/(my keyboard name here)
, que mapeia para um canal de eventos ( /dev/input/event<#>
) que requer raiz para ler.
A biblioteca X11 me permite capturar eventos de teclado (usando XNextEvent
), mas não posso contar com o cliente tendo o X11 instalado para os casos em que eles querem executar sem cabeça e sem a GUI.
Eu preciso capturar todas as teclas do teclado, incluindo o shift , o alt , o ctrl eo super (windows ou mac). De preferência, eu também gostaria de capturar teclas de mídia como play, volume up / down, etc e somente quando o aplicativo tiver foco.
Alguém sabe como eu posso fazer isso?
Eu pensei em apenas fazer dois caminhos de código diferentes para entrada, um para headless em que eles puxariam eventos usando apenas stdin (mas isso não pegaria a tecla shift AFAIK), e o outro caminho usa X11, mas Gostaria de ter apenas que manter um sistema de entrada de teclado, se possível.