Atacando otro bug de gnome 3.12: forzar la distribución del teclado en español

Hola a todos y todas. Gracias por la buena onda con el asunto del tema y los íconos. _

HAY UN POST MEJORADO DE ESTO, CON UNA MEJOR SOLUCIÓN. PÁSENSE POR AĆA.

Les cuento que hay otro bug que me molesta mucho de gnome 3.12 y me refiero a que el idioma se cambia a inglés sólo. Ahí vamos.

El bug: me cambia a idioma inglés el teclado

Qué es lo que pasa? Bueno, es bastante simple. Si instalamos algo en gnome-shell y queremos ver cómo es, una nueva extensión por ejemplo… o como me pasa a mi cada vez que toco algo en el tema de la shell tengo que reiniciar todo el entorno para que me tome bien los cambios. Las teclas de la injusticia: alt+f2, r.

Luego de apretar alt+f2, r, la shell se reinicia pero el idioma del teclado se cambia a inglés. No importa si no tenemos el idioma instalado. No importa si seleccionamos español por defecto con las herramientas que se les ocurran. No importa nada, el hijo de putasss se cambia al inglés. _

Para cambiarlo al español, nada, hay que seleccionar con el mouse (arriba a la derecha) el lenguaje “en” y luego volver a seleccionar “es”. Un dolor de bolas.

Lo atamos con alambre: crónicas de cosas que no funcionan.

Antes que nada, debo disculparme por la no elegancia de esta cosa que hice. De hecho lidié con ella desde el inicio de 3.12, pensé que en algún momento se iba a solucionar, pero acá estamos: 3.12.2 estable y todavía a todo developer le chupa un huevo o todos usan su fakin teclado en inglés, no sé… algo raro pasa. En fin…

Dadas las limitadísimas “habilidades programativas” que tengo, todo lo que pude hacer es una script en bash, jeje, como siempre. El script ejecuta el comando “setxkbmap es“, que es el salvavidas que nos retorna el teclado a nuestro idioma. Lo ridículamente arcaico del script es que ejecuta setxkbmap regularmente, o sea una vez cada cierta cantidad de tiempo, así no tengo que hacerlo manualmente nunca más. La contra es que ejecuta el comando regularmente, incluso cuando el idioma no es inglés.

Un poco más de detalle (la historia de un incomprendido): la estrategia de repetir como loro el comando que nos cambia el idioma es lo que en economía se llama un “second best”, o sea, no es lo ideal, pero de algún modo funciona. Lo ideal sería que cada vez que gnome-shell se reincia luego de apretar alt+f2, r lea un archivito en el que le podamos meter nuestros scripts… lamentablemente no pude hacer eso. En el proceso que recarga el tema y las extensiones activadas, debería leer ese archivito y ejecutarlo. Si alguien sabe cómo hacerlo, por favor, ayuda. _ ( porque .profile, .scripts, .bashrc… aplicaciones al inicio, nada… nada se recarga nuevamente luego de apretar alt+f2,r…). Entonces. La alternativa ideal no funcionó. Empecé a ejecutar el comando manualmente luego de reiniciar. Como habrán visto es una cosa muy cortita y no tarda absolutamente nada en aplicarse. Luego dije, ok, esto se tendría que poder repetir, basta de hacer esto cada vez que reinicio la shell (porque por ejemplo, cuando hago un tema, esto es básicamente… bueh… cada vez que modifico una línea -lo cual hace muy inconveniente cambiar a la terminal luego de cada reinicio-). Así que busqué en gugul y me encontré con “cron” y todas las herramientas “cronianas”… bueno. No me funcionó ninguna. Todavía no entiendo por qué. Tampoco me funciona “alias”, pero es claramente otro tema para quejarme otro día jajaja. Sigo: entonces como con el puto cron el comandito no se repetía ni se ejecutaba, tuve que encontrar otra forma (se supone que la función de cron es repetir comandos). La solución que encontré es “bien cabeza” como decimos en los suburbios de buenos aires _, porque loopeo (léase: lupéo) al infinito una condición y ejecuto el comando en cada vuelta del loop. Más simple que eso, no essiste papá. Y esa es la forma arcaica de hacer un parrot-command :P (hoy estoy on fire!).

Soluciones de menor a mayor.

Solución 1: ejecutar el comando manualmente

Lamentablemente esta es una opción. Si no reiniciamos la shell todo el tiempo por algún motivo, hasta la recomiendo. Simplemente abran una terminal y peguen:

setxkbmap es

Así de simple.

Solución 2: cron (no me funcionó)

A mi no me funcionó, pero lo pueden hacer. La idea es que hay que editar crontab y meter el comandito de arriba para que se repita. Para eso ejecutamos:

crontab -e

Y luego, al final, agregamos una línea que rece:

*/10 * * * * setxkbmap es

Para ejecutar el comando cada 10 minutos.

Solución 3: Script lupeáo cavernoso (cron sin cron)

Abrimos un gedit y pegamos esto:

#!/bin/bash
mkdir -p ~/.forzar-teclado-español
cd ~/.forzar-teclado-español
while true ;do
if [ -f teclado-español ] ;then
sleep 10;
setxkbmap es;
else
touch teclado-español;
fi
done;

Guardamos el archivo como teclado-es.sh en nuestro home. Yo tengo los scripts en una carpetita en el home que se llama .scripts. O sea que los guardo en ~/.scripts pero ya es cosa de gustos. _. Metanlo donde quieran. Luego lo ejecutamos como aplicación de inicio. Abrimos otro gedit y pegamos:

[Desktop Entry]
Type=Application
Exec=sh /home/XXXtu_nombre_de_usuarioXXX/teclado-es.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=false
Name=teclado-es
Comment[es_ES]=
Comment=
Icon=preferences-desktop-launch-feedback
StartupNotify=true
Terminal=false
Categories=GNOME;GTK;

Reiniciamos y todo tendría que correr. Acuérdense de cambiar XXXtu_nombre_de_usuarioXXX por su nombre de usuario jeje. Si pusieron el .sh en otro lado deben editar esa línea con la localización (absolute path, nada de símbolos).

Solución 4 = Solución Buena!: se me ocurrió mientras escribía el post.

Ok, así se trabaja. :P

Resulta que repasando el script me dije “y qué pasa si puedo recuperar el valor de la distribución del teclado y aplicar el script quirúrugicamente sólo cuando el teclado tiene un idioma que no sea español?”.

El truco: setxkbmap -query nos devuelve el lenguaje del teclado. Todo gracias a man setxkbmap. Un poco de bash-no-jutsu, sed, awk, if-else y la mar en coche, y podemos aislar el asunto. El script escupe todo el día el lenguaje del teclado. Si devuelve “es”, no hace nada. Si no, ejecuta el comando para cambiar la distribución a español. La cosa viene así:

#!/bin/bash

while true ;do
if [ -f /tmp/teclado-español ] ;then
sleep 3;
rm /tmp/current-keyboard ; 
setxkbmap -query | grep layout > /tmp/current-keyboard
sed "s/.*,//" /tmp/current-keyboard
value=`sed "s/.*,//" /tmp/current-keyboard`

if [ $value = "us" ]; then
       sleep 3;
else
    setxkbmap es;
fi

else
touch /tmp/teclado-español;
fi
done;

Este es el output del script. En la línea 3 reinicié la shell. Cada línea tarda 3 segundos en aparecer. :)

Esta opción es excluyente de la anterior. Guardamos el archivo como teclado-es.sh en nuestro home. Yo tengo los scripts sueltitos en el home pero ocultos. O sea que empiezan con un punto. Pero esas ya es cosa de gustos. _. Metanlo donde quieran. Luego lo ejecutamos como aplicación de inicio. Abrimos otro gedit y pegamos:

[Desktop Entry]
Type=Application
Exec=sh /home/XXXtu_nombre_de_usuarioXXX/teclado-es.sh 
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=false
Name=teclado-es
Comment[es_ES]=
Comment=
Icon=preferences-desktop-launch-feedback
StartupNotify=true
Terminal=false
Categories=GNOME;GTK;

Guardamos el archivo en ~/.config/autostart con el nombre teclado-es.desktop. Luego ejecutamos en la terminal chmod +x ~/.config/autostart/teclado-es.desktop para darle permisos de ejecución.

Reiniciamos y todo tendría que correr. Cualquier cosa comentan abajo.

Eso es todo. Como siempre, un post de 5 minutos termina siendo un chorro de cosas. Será. :)

Salú!

//

Atacando otro bug de gnome 3.12: forzar la distribución del teclado en español

25 thoughts on “Atacando otro bug de gnome 3.12: forzar la distribución del teclado en español

  1. Alex says:

    Me gustó tu solución, a mi me paso con ubuntu 14.04 con un teclado ps/2 lo solucioné poniendo en el grub : GRUB_CMDLINE_LINUX_DEFAULT=”earlymodules=atkbd modules-load=atkbd” (sudo gedit /etc/default/grub); otro detalle que me sucede con ubuntu 14.04, y que soluciné temporalmente y silvestremente, es que no me reconoce el mouse ps/2, parece que el kernel 13.13.0.xx es “modular” sea lo que sea que signifique eso, la solución que encontre fué que lo inicio poniendo manualmente “recovery en la linea del grub cada que no me fuciona el mouse (reseteo en esos casos y agrego recovery) y le indico continuar con el inicio normal.

      1. ale says:

        Editas en /etc/default/grub, es decir :

        sudo gedit /etc/default/grub

        y buscas la línea: GRUB_CMDLINE_LINUX_DEFAULT= ahi agregas dentro de las comillas “earlymodules=atkbd modules-load=atkbd”, debe decir “quiet splash” y queda algo así:

        GRUB_CMDLINE_LINUX_DEFAULT=”earlymodules=atkbd modules-load=atkbd quiet splash”

        guardas y en el siguiente reinicio va a aparecer sóloen el grub, ya no tienes que meterlo a cada rato al reiniciar. En cuanto al mouse ps/2 cuado no me lo reconoce reinicio y edito el grub cuando aparece (con tecla ) al fina de la linea donde dice lo “… quiet splash” le pongo recovery y presiono x es cuado aparece el menú de recuperación y en la primera línea dice “continuar con el inicio normal ” o algo así es entoncves que si se carga el modulo “psmouse” que es el que controla el mouse ps/2
        ¿Se comprende?

  2. Hola a todos y, antes de nada, enhorabuena por el blog.

    Yo estuve toreando este problema durante un tiempo, hasta que un día dí con una solución que quiero compartir con vosotros.

    En el caso en el que me encuento (Gnome 3.12 sobre Ubuntu 14.04) el problema realmente viene de ibus. Para solucionarlo, símplemente tenemos que navegar con dconf a “desktop > ibus > general” y modificar la entrada “use-system-keyboard-layout” para ponerla a True.
    Tras esto no deberías tener que volver a preocuparte porque se reinicie la distribución del teclado.

    http://imgur.com/VSYABQX

    Un saludo!

      1. Lo probé. Asunto completamente solucionado con esta forma.
        Voy a tratar de hacer otro post. Se tiene que poder hacer con un comando. ^_^
        Muchas gracias de nuevo Raúl. Un capo total.

  3. clp says:

    Qué bueno… a mí me pasa también continuamente, incluso cuando entra en la pantalla de bloqueo, al volver, zaaas en inglés…..

    Yo por ahora prefiero no desintalar el teclado inglés y darle a altwindows+space dos veces y vuelve el español.

    Felicidades por el blog, cada vez lo veo más intersante… ;)

    1. gracias man!

      Nada, sólo decirte que atención que Raúl posteo una solución genial acá en los comentarios, mucho más simple que todo lo que está en el post (juaas!!!)

      Así que quizás te ahorre el alt+espacio y la incomodidad de darle a la ñ y que te salgan dos puntos! :)

  4. alexcotua says:

    Yo tengo un bug en el que no me aparece el boton para bloquear la pantalla (solo aparece para apagar y configurar el sistema), tampoco se bloquea automaticamente :( , cuando cambio de usuario me sale la pantalla de ubuntu

    1. Hola Alex,
      Creo que una vez me pasó. Tenés instalado lightdm? si es así, tenés que sacarlo porque es lo que romple eso. Con gnome sólo es compatible… estemm… gnome. Gdm como default session manager y todo debería funcionar. Decime si te fue bien. :)

  5. gracias Raul por tu solucion me funciono perfecto solamente segui la ruta y active el casillero, ahora ya no jode el teclado, me tenia huevón, y tambien gracias a Rhoconlinux por que sin él no habría llegado a esa solucion de Raul. gracias y saludos desde Lima – Perú

    1. En realidad gracias a ti y a todos, los que comentáis y hacéis comunidad sois quienes dáis valor y empujáis a que existan blogs como este y que otros como yo aportemos nuestro granito de arena. Y gracias de nuevo al blog por dar voz a los comentarios.

      Un saludo!

  6. Estela says:

    Instalé ubuntu 14.04 lts y tengo problemas con el touchpad. El botón izquierdo funciona con algunas aplicaciones (por ejemplo para abrir archivos) pero no para seleccionar una acción (ejemplo doy clic en configuración del sistema pero no me deja seleccionar ratón y panel táctil, aparece una manito). Soy totalmente novata en el sistema. Agradezco solución

Y tu? qué estás mirando? :)

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s