Obtenha entrada de teclado sem necessitar de root e sem x11

1

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.

    
por Ken Noland 16.06.2014 / 13:09

1 resposta

0

A melhor solução que consegui encontrar é criar um daemon separado que seja executado como um serviço que monitore /dev/input/.. events e permita que as outras ferramentas do usuário se conectem a si mesmo e escutem eventos de entrada.

Pense em algo que substitua o XEvent. (trazendo esses eventos de entrada para o espaço do usuário)

    
por user.dz 09.07.2015 / 20:03