La siguiente solución es bárbara, pero funciona (siempre que esté satisfecho con un nivel 3 en lugar de un cambio de nivel 3; la diferencia es que con este último todas las teclas deben presionarse al mismo tiempo, mientras que con el primero usted primero presione LeftCtrl+ LeftAlt, suelte esto y solo luego presione la tecla para cambiar) y no requiere root.
setxkbmap -option grp:lctrl_lalt_toggle
xmodmap -e 'keycode 37 = Control_L ISO_Level3_Latch'
xmodmap -e 'keycode 64 = Alt_L ISO_Level3_Latch'
Explicación de cómo funciona esto:
La opción xkb grp: lctrl_lalt_toggle LeftCtrlcambia LeftAltal nivel 2 y viceversa (ver :) /usr/share/X11/xkb/symbols/group
. También hace que el cambio de nivel2 sea LeftCtrly LeftAltsea ISO_Next_Group, lo que no es deseable, ya que queremos que sea ISO_Level3_Latch, por lo tanto, usamos xmodmap para cambiar el nivel2 a ISO_Level3_Latch para ambos LeftCtrly LeftAlt(mientras mantenemos el nivel1 como Control_L y Alt_L). Los códigos de tecla (37 y 64) se pueden encontrar inspeccionando la salida de xmodmap -pke
o usando xev
.
Si solo aplicamos las redefiniciones de xmodmap (sin usar setxkbmap
primero), la clave responsable del cambio de nivel 2 sería Shift, como lo es para casi todas las teclas, por lo que tanto Shift+ LeftCtrlcomo Shift+ LeftAlt(pero no LeftCtrl+ LeftAlt) se convertirían en pestillos de nivel 3.
¿Por qué tenemos que usar un pestillo de nivel 3 en lugar de un cambio de nivel 3?
Si tuviera que usar ISO_Level3_Shift en lugar de ISO_Level3_Latch, tendría que presionar simultáneamente LeftCtrl+ LeftAlt+ YourDesiredKey, para que ocurra el cambio de nivel3. Desafortunadamente, LeftCtrly LeftAltsiguen siendo modificadores, por lo que, aparte de que YourDesiredKey se haya cambiado correctamente, también se "modificará" por uno de Alt o Ctrl (dependiendo de lo que presionó primero). Con el pestillo, no tienes este problema.