Solución al problema de la conmutación mediante alt+shift en Linux, en aplicaciones de Electron

¡Hola, colegas!

Quiero compartir mi solución a un problema que se menciona en el título. Me inspiré en la escritura de un artículo de un colega. brnovk, que se tomó la molestia de proponer una solución parcial (para mí) al problema. Hice mi "apaño", que me ayudó. Lo comparto con ustedes.

Descripción del problema

Utilicé Ubuntu 18.04 para trabajar y últimamente noté que, al cambiar el idioma con alt+shift en aplicaciones como Visual Studio Code, Skype, Slack y otras creadas con Electron, ocurre el siguiente problema: el enfoque del campo de entrada se desplaza a la barra superior de la ventana (menú). Por otras razones, me cambié a Fedora + KDE y entendí que el problema no desapareció. En busca de una solución, encontré un artículo maravilloso. Reparamos Skype nosotros mismos. Muchas gracias al compañero brnovk, que explicó detalladamente el problema y compartió su forma de resolverlo. Pero el método mencionado en el artículo solo abordaba el tema con una aplicación, especialmente Skype. Para mí, era crítico resolver el problema con Visual Studio Code, porque escribir mensajes con un menú que salta, aunque irrita, no es tan grave cuando estás desarrollando. Además, el colega propuso una solución en la que el menú de la aplicación desaparece por completo, y no me gustaría perder el menú en VS Code.

Intenté entender de qué se trataba

Así que decidí dedicar tiempo a entender de qué se trataba. Ahora describiré brevemente el camino que seguí; tal vez alguien más conocedor en este tema ayude a aclarar las dificultades con las que me encontré.

Abrí Visual Studio Code y comencé a presionar diferentes combinaciones Alt+, observando la reacción de la aplicación. En casi todos los casos, todas las combinaciones, excepto Alt+Shift, funcionaban sin perder el enfoque. Tenía la impresión de que alguien estaba robando el Shift presionado después de mantener el Alt, y la aplicación pensaba que había presionado Alt, luego no presioné nada, solté Alt y felizmente desviaba mi enfoque a su menú, lo que le parecía bastante lógico.

Abrí la configuración de cambio de diseño del teclado (ya saben, esa larga lista con casillas de verificación y diversas configuraciones para las teclas) e instalé el cambio de diseño con la tecla Alt, sin ningún otro tipo de presión adicional.

Solución al problema de la conmutación mediante alt+shift en Linux, en aplicaciones de Electron

Después de esto, dejó de funcionar Alt+Tab para cambiar entre ventanas. Solo funcionaba Tab, es decir, alguien nuevamente "se estaba comiendo" mi Alt. Ya no quedaban preguntas sobre quién era ese "alguien", pero no tengo idea de qué hacer con él.

Pero como había que resolver el problema de alguna manera, se me ocurrió una solución:

  1. Desactivar el atajo para cambiar el diseño del teclado en la configuración (desmarcar todas las casillas en la sección Cambiar a otro diseño);
  2. Crear mi propio atajo que cambie el diseño

Descripción de la solución

Primero, instalaremos un programa que permita asignar comandos a las teclas, Xbindkeys. Lamentablemente, las herramientas estándar no me permitieron crear un atajo para combinaciones como Alt+Shift a través de una interfaz bonita. Se puede hacer para Alt+S, Alt+1, Alt+shift+Y, etc., pero para nuestra tarea no es adecuado.

sudo dnf install xbindkeysrc

Hay más detalles sobre él en ArchWiki
A continuación, crearemos un ejemplo del archivo de configuración para el programa. El ejemplo es bastante corto, con varios comandos, exactamente lo que necesitamos para entender cómo trabajar con él:

xbindkeys -d > ~/.xbindkeysrc

Como se puede ver en el ejemplo que se encuentra en el archivo, necesitamos indicar el atajo que queremos usar y el comando que debe ejecutarse. Parece simple.


# Examples of commands:
"xbindkeys_show"
  control+shift + q
# set directly keycode (here control + f with my keyboard)
"xterm"
  c:41 + m:0x4

Para el atajo se puede utilizar una escritura comprensible o usar códigos de teclas. A mí solo me funcionó con los códigos, pero nadie prohíbe que experimentes un poco.

Para obtener los códigos, debes usar el comando:

xbindkeys -k

Se abrirá una pequeña ventana de "X". ¡Debes presionar las teclas solo cuando esta ventana esté en foco! Solo en ese caso verás algo como esto en la terminal:


[podkmax@localhost ~]$ xbindkeys -k
Presiona una combinación de teclas o haz clic en la ventana.
Puedes usar una de las dos líneas después de "NoCommand"
en $HOME/.xbindkeysrc para vincular una tecla.
"(Función del esquema)"
    m:0x4 + c:39
    Control + s

En mi caso, la combinación para las teclas Alt+Shift se ve así:

m:0x8 + c:50

Ahora necesitamos hacer que al presionar esta combinación, realmente cambie el diseño. Solo encontré un comando que funciona para indicar el diseño:


setxkbmap ru
setxkbmap us

Como se puede ver en el ejemplo, solo puede activar uno u otro diseño, así que no se me ocurrió nada más que escribir un script.


vim ~/layout.sh
#!/bin/bash
LAYOUT=$(setxkbmap -print | awk -F + '/xkb_symbols/ {print $2}')
if [ "$LAYOUT" == "ru" ]
        then `/usr/bin/setxkbmap us`
        else `/usr/bin/setxkbmap ru`
fi

Ahora, si los archivos .xbindkeysrc y layout.sh están en el mismo directorio, el aspecto final del archivo .xbindkeysrc es el siguiente:


# Examples of commands:

"xbindkeys_show"
  control+shift + q

# set directly keycode (here control + f with my keyboard)
"xterm"
  c:41 + m:0x4

# specify a mouse button
"xterm"
  control + b:2
#А вот то, что добавил я
"./layout.sh"
  m:0x8 + c:50

Después de eso, aplicamos los cambios:


xbindkeys -p

Y se puede comprobar. No olvides desactivar cualquier opción para cambiar el teclado en la configuración predeterminada.

Summary

Colegas, espero que este artículo pueda ayudar rápidamente a alguien a deshacerse de este molesto problema. Personalmente, pasé todo mi día libre tratando de entender y resolver el problema de alguna manera, para no distraerme de esto en el trabajo. Escribí este artículo con el objetivo de ahorrar tiempo y nervios a alguien. Muchos de ustedes utilizan un método alternativo para cambiar el teclado y no comprenden cuál es el problema. A mí personalmente me gusta cambiar con Alt+Shift. Y quiero que funcione exactamente así. Si compartes mi opinión y has enfrentado este problema, este artículo debería ayudarte.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster