Con frecuencia trabajo en estaciones de emparejamiento donde hay varios teclados instalados. Puedo usar setxkbmap
con -device <ID>
para configurar el diseño de un teclado específico (usando una ID dexinput
), pero a menudo no es obvio en qué teclado estoy. Sería mejor evitar el ir y venir de probar ambos teclados, por lo que me gustaría escribir una herramienta rápida para obtener esta información setxkbmap
. Esperaría un caso de uso típico como el siguiente:
$ setxkbmap -device "$(get-keyboard-id)" -layout gb
Press Enter to detect keyboard ID
¿Qué interfaz proporciona esta información en Linux? Idealmente, debería funcionar sin X, pero eso no es un requisito (no parece haber muchas herramientas que lo admitan sin X).
Hallazgos hasta el momento:
- Linux debe saber en qué teclado estoy escribiendo para admitir diferentes diseños para varios teclados simultáneamente.
xinput
→ list.c →list_xi2
→XIQueryDevice
proporciona ID de dispositivo utilizables porsetxkbmap
.showkey
yxev
no imprima ID de teclado.xinput list-props $ID
muestra dónde se envían los eventos del teclado . Sin embargo, usando el código de otra respuesta parece que este dispositivo no imprime nada para identificar el teclado.Una solución casi posible es ejecutar
xinput --test <ID> &
cada ID de teclado y ver cuál devuelve algo primero. El problema con eso es descubrir qué "teclados" son en realidad teclados:$ xinput | grep keyboard ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Power Button id=8 [slave keyboard (3)] ↳ Sleep Button id=9 [slave keyboard (3)] ↳ WebCam SC-13HDL10931N id=10 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=11 [slave keyboard (3)]
less -f /dev/input/eventX
presionas una tecla en el teclado correspondiente, deberías ver aparecer "basura", por lo que tus pulsaciones de teclas se dirigen a un archivo de desarrollo y no a los demás.Respuestas:
Deshabilitar dispositivo
Aquí hay una idea para identificar qué teclado es cuál. Puede usar el comando xinput para habilitar y deshabilitar dispositivos.
Ejemplo
La salida anterior muestra los diversos dispositivos que tengo en mi computadora portátil Thinkpad. Solo tengo 1 teclado conectado, este:
Ahora eche un vistazo a las propiedades disponibles a través de este dispositivo:
De lo anterior puede ver que está habilitado, así que deshabilítelo:
Para habilitarlo:
¿La idea?
Puede habilitar deshabilitar uno de los teclados con este comando para determinar en cuál está.
Referencias
fuente
La pregunta suena un poco contradictoria ya que estás citando herramientas X pero pides una solución que "idealmente debería funcionar sin X".
Sobre su 4º hallazgo:
xinput
le dará la correspondenciaal menos con la siguiente versión
Primer paso: detectar el dispositivo de evento de teclado en C
Muchas gracias a esta pagina . Eliminé la mayoría de las comprobaciones de seguridad del código que pedí prestado allí, para mayor claridad, en el código real probablemente las desee.
Tenga en cuenta que las pulsaciones de teclas se repiten, por lo que es posible que desee pedir amablemente al usuario que presione una tecla modificadora (Shift, Control ...) en lugar de cualquier tecla.
Segundo paso: use xinput para obtener la X ID del nombre del dispositivo
Compile la fuente C anterior y úsela de esta manera:
xinput list --id-only "keyboard:$(sudo ./a.out /dev/input/event*)"
fuente
/dev/input/by-id
/dev/input/event*
- Probétail
ting, pero en vano.Más excavaciones revelaron otra solución usando Bash simple y una cuenta de usuario normal. Guión :
fuente