Saltar al contenido principal

Teclados diferentes y udev

Tengo un pequeño pasatiempo con teclados mecánicos (nada serio aún). Uno de los problemas que tuve recientemente fue sobre modificar algunas opciones del teclado; específicamente intercambié las teclas de Esc con Bloq Mayus.

Esto es muy sencillo gracias a gnome-tweaks:

  • Abrir la aplicación gnome-tweaks
  • Click en Keyboard & Mouse
  • Click en el botón de Additional Layout Options
  • Click en la opción Caps Lock behavior
  • Seleccionar Swap Esc and Caps Lock

Hasta aquí todo está bien, pero después inicié a usar teclados programables. En resumen, actualmente tengo 2 de esos:

  1. Vortex - Cypher 65% (doble barra espaciadora)
  2. Ducky - One 2 SF

La cosa es que el primero me permite programar la tecla Bloq Mayus como la tecla Esc, así que no hay más necesidad de cambiar ninguna configuración dentro del Escritorio/SO. Sin embargo, El teclado Ducky NO permite reprogramar la tecla Bloq Mayus, ¡Una pena!

En resumen, esta es la situación:

  • Cuando conecto el teclado Vortex Cyher, No necesito ninguna configuración sobre la distribución de teclado
  • Cuando conecto el teclado Ducky one 2 SF (o cuando uso una laptop), SI necesito configurar el intercambiar Esc y Bloq Mayus

¿Qué podría hacer para obtener este resultado, Además de hacer el cambio manualmente cada vez? ¡Una regla de udev!

Udev

Para no hacerlo muy largo, No entraré a detalles sobre qué es udev o cómo funciona, pero sí mencionaré que puedo resolver el problema que anteriormente describí al definir una regla de udev que cambie estas opciones por mi cada vez que el teclado es conectado/desconectado.

Lo que se quiere es:

  • Habilitar la opción de Intercambiar Esc y Bloq Mayus por defecto
  • Deshabilitar la opción previa siempre que mi teclado Vortex Cypher es conectado

Encontré que el idVendor y el idProduct son 04d9 y 0282, respectivamente. Adicionalmente, puedo cambiar estas configuraciones usando gsettings en lugar de gnome-tweaks (así sería más programable y no dependería de una solución gráfica/basada en clicks).

Esta es la regla udev con la que terminé:

# reset layout options when vortex cypher keyboard is plugged
ACTION=="add", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="0282" \
, ENV{DISPLAY}=":0" \
, ENV{XAUTHORITY}="/run/user/1000/gdm/Xauthority" \
, ENV{DBUS_SESSION_BUS_ADDRESS}="unix:path=/run/user/1000/bus" \
, RUN+="/usr/bin/sudo -u mrkz /usr/bin/gsettings reset org.gnome.desktop.input-sources xkb-options"

# set layout options when vortex cypher keyboard is unplugged
ACTION=="remove", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="0282" \
, ENV{DISPLAY}=":0" \
, ENV{XAUTHORITY}="/run/user/1000/gdm/Xauthority" \
, ENV{DBUS_SESSION_BUS_ADDRESS}="unix:path=/run/user/1000/bus" \
, RUN+="/usr/bin/sudo -u mrkz /usr/bin/gsettings set org.gnome.desktop.input-sources xkb-options \"['caps:swapescape']\""

Al final necesitará refinarse un poco más para hacerla más genérica (y poderla incluir en mi repositorio de dotfiles), pero eso será para otro momento.