¿Por qué mis enlaces xmodmap que involucran AltGr solo funcionan en algunas teclas?

12

Quiero reasignar mi AltGR + Right_Windows pero no puedo entender cómo. No importa lo que intente, al presionar la tecla derecha de Windows se emite el nombre del teclado cuando se presiona alt derecha o no.

Estos son los contenidos del archivo xmodmap que estoy probando en este momento. En mi teclado, 38 es el código de tecla para "a", 48 es el código de tecla para una cita / doble cita y 134 es el código de tecla para la tecla de Windows correcta.

keycode  38 = 1 2 3 4 5 6 7 8
keycode  48 = 1 2 3 4 5 6 7 8
keycode 134 = 1 2 3 4 5 6 7 8

Cuando presiono Right_Alt + apostrophe, genera 5 pero Right_Alt + a y Right_Alt + Right_Windows dan 1 (tanto cuando se presiona right alt como cuando no), que no es lo que quería.

Mi distribución de teclado actual es us(alt-intl)y la alt correcta aparentemente está configurada para actuar como AltGr / Iso_Level3_Shift. La salida de xmodmap -pmes la siguiente:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
hugomg
fuente
No tengo idea de lo que está sucediendo exactamente, pero si aún no lo ha hecho, es posible que desee ejecutar xevy presionar las diversas combinaciones de teclas para ver si el hardware y hasta el nivel de Xwindows están presionando teclas distinguibles para comenzar.
Joe
Estoy experimentando el mismo problema. Quería modificar comas y puntos para admitir también la impresión de comillas dobles en checo e inglés („/“ / ”) que de lo contrario tengo que escribir usando la tecla componer. Estoy usando la us(cz_sk_de)distribución del teclado y xmodmap.
Pavel Šimerda
¿Y ahora qué? No es práctico desperdiciar otra recompensa ni comenzar una nueva pregunta cuando ésta describe muy bien el problema. Parece un error en xorg pero no he encontrado ninguna referencia. La respuesta existente es claramente errónea a pesar de ser premiada automáticamente.
Pavel Šimerda
Terminé renunciar y utilizar diferentes vínculos de teclado, que yo sepa el trabajo: / estoy de acuerdo que este se ve como un error pero no sé qué sistema relacionado con su y dónde denunciar que ...
hugomg
Encontré información aquí ... blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html
Pavel Šimerda

Respuestas:

7

Usando xmodmap para configurar asignaciones de teclas individuales

Es hora de anotar los resultados de mi propia investigación.

Pensé que debía haber perdido algo en xmodmap y que simplemente no está muy bien documentado y la gente está confundida. Pero resultó que el diseño de X.Org con respecto a XKB y xmodmap es simplemente estúpido.

Error épico: xmodmap

Puede usar xmodmap para redefinir las asignaciones existentes siempre y cuando esas asignaciones realmente existan en su diseño de teclado original. En el caso descrito en la pregunta, no puede extender el comportamiento de ninguna tecla para usar AltGr. Solo puede cambiar los símbolos de teclas AltGr para códigos de teclas que ya están usando AltGr.

Ver también: http://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

Solución alternativa: Mode_switch

Esta solución se describe en la respuesta de @ Ned64. Puedes reasignar AltGrde ISO_Level3_Shifta Mode_switch.

Utilicé con éxito la siguiente línea de comando para reasignar AltGr.

xmodmap -e 'keycode 108 = Mode_switch'

La desventaja es que romperá la distribución actual del teclado, pero puede recrear todas las asignaciones una por una utilizando xmodmap@ Ned64 ya mencionado.

Solución alternativa: diseño de teclado modificado

Lo estoy usando us(cz_sk_de)como diseño de mi teclado e intenté modificarlo agregando la configuración para las teclas que quería extender.

key <AB08>  { [ comma, less, doublelowquotemark, leftdoublequotemark ] };
key <AB09>  { [ period, greater, ellipsis, rightdoublequotemark ] };

(En la sección xkb_symbols "cz_sk_de"de /usr/share/X11/xkb/symbols/us)

Simplemente restablezca la distribución del teclado para usar la versión modificada.

setxkbmap 'us(cz_sk_de)'

Ahora se puede (1) tipo checas e inglesas comillas y elipses que utilizan combinaciones de ,, ., Shifty AltGrlas teclas y / o (2) reasignar esas llaves utilizando xmodmapahora que se definen.

La principal desventaja es que setxkbmapno parece admitir ubicaciones arbitrarias para diseños de teclado y, por lo tanto, debe escribir en la configuración del sistema en lugar de su directorio de inicio.

Conclusión

Esto parece ser un ejemplo de diseño excesivo y mal diseñado de X.Org donde incluso algo tan trivial como mapear un código clave y una combinación de modificadores en un símbolo resulta ser un problema. Las herramientas no parecen proporcionar una forma razonable de cambiar las asignaciones de teclas individuales en la configuración del usuario sin ningún efecto secundario.

Pavel Šimerda
fuente
"no puede extender el comportamiento de ninguna tecla para usar AltGr" - ¡parece que este fue el problema todo el tiempo! Gracias.
hugomg
5

Paso uno: haga que AltGr sea utilizable

Descubrí que las Claves modificadas por AltGr solo funcionan en mi sistema si también reasigno la Clave AltGr de Mode_switchesta manera:

xmodmap -e "keycode 108 = Mode_switch Mode_switch Mode_switch Mode_switch"

Si tiene un teclado diferente, es posible que deba reemplazarlo 108con su código, verifique escribiendo

xmodmap -pke | grep Alt_R

entonces usa ese número. (La clave normalmente se llama Alt_Ren sistemas que conozco).

Alternativamente, esto también puede funcionar si Alt_R aún no está asignado a otra cosa:

xmodmap -e "keysym Alt_R = Mode_switch Mode_switch Mode_switch Mode_switch"

Su modificador AltGr ahora servirá en la posición 3 (con Shift: 4) dentro de su lista de modificadores.

Paso dos: asigne las teclas según sea necesario

Puede asignar variantes AltGr para cualquier tecla de su teclado que desee. Si tiene otras teclas que no se corresponden con el código deseado ahora, debe reasignarlas al igual que sus otras teclas (las que probó).

Paso tres: Convierte esto en un script

Ahora solo tome sus xmodmapcomandos y escriba todas (pero solo) modificaciones en su teclado predeterminado en un archivo, que es más rápido que cargar un mapa de teclas completo. Inicie esta secuencia de comandos una vez después de cada inicio de sesión y siempre que algún proceso restablezca el mapa de teclas.

He experimentado mucho con esto a lo largo de los años, bajo Solaris, IRIX y Linux, y que yo sepa, esta es la única solución para hacer que AltGr funcione, y me ha funcionado bien durante más de 20 años.

Ned64
fuente
1
Con esto, la tecla de la ventana derecha comenzó a actuar como "3" en lugar de "1". Sin embargo, ahora todos los modificadores altgr existentes dejó de funcionar (supongo que habría tenido que ser un "5" en lugar de un "3" para que funcionen?)
hugomg
Gracias por intentar esto. Publique xmodmap -pmy, xmodmap -pke | grep -w SOMECHANGEDKEYen esta situación, una clave que ya no funciona.
Ned64
(luego tendremos que agregar el nuevo modificador de xmodmapacuerdo con su salida)
Ned64
xmodmap -pke | grep Alt_Rno devuelve ningún resultado en mi sistema. Mi sistema es Lenovo ThinkPad X230 con Gentoo estable. También lo intenté grep -isin resultado.
Pavel Šimerda
Lo intenté y el problema es que las letras acentuadas us(cz_sk_de)dejaron de funcionar para mí. Por lo tanto, esta respuesta no funciona para mí y no funcionará para muchos otros.
Pavel Šimerda
1

Aparentemente, xmodmap no lee el AltGR predeterminado como debería, puede estar limitado a diseños de teclado específicos, tal vez todos sean diseños que no sean de EE. UU. De cualquier manera, el verdadero problema es que mientras puede reemplazar el diseño de su teclado, algunas personas podrían Realmente no quieren hacer eso, ya que necesitan usar caracteres especiales en el diseño al que están acostumbrados (como diseños de teclado escandinavos que tienen caracteres como ðþæöáúíóåů, etc.) que sería difícil de configurar para otros diseños de teclado.

Tu puedes correr

xmodmap -e "keycode 108 = Mode_switch"

Para volver a vincular AltGR a algo con lo que xmodmap puede funcionar, y de hecho, la tercera asignación de un keycoad se generará cuando presione AltGR ahora, sin embargo, romperá por completo el diseño original del teclado ya que las combinaciones de teclas AltGR ya no funcionarán con la tecla AltGR.

He encontrado dos soluciones que no rompen mi diseño de teclado existente y no implica cambiar diseños , uno es vincular Mode_switch a otra tecla.

La clave ideal para esto es Super_R, que está justo al lado de AltGR, el código clave es 134. Sin embargo, no todos los teclados los tienen y en mi caso en una computadora portátil tampoco lo tengo, así que decidí vincularlo al último clave restante que prácticamente nunca uso, Control correcto.

xmodmap -e "keycode 105 = Mode_switch"

Tengo un diseño de teclado físico americano, pero la configuración de diseño europeo, y falta la tecla menor / mayor / barra (también conocida como ISO_Backslash, aunque eso no es reconocido por xmodmap), generalmente falta junto a Z en dichos teclados. Lo vinculé al Menú (135) pero podría servir como una alternativa a R_Ctrl y Super_R

Esta es una solución sucia, supongo.

La segunda solución tardó un poco más en darse cuenta. Usando sxhkd (alternativa de xbindkeys)

Si agrega esto a ~ / .config / sxhkd / sxhkdrc :

~ISO_Level3_Shift
    xdotool key Mode_switch

Su AltGR funcionará normalmente, pero cuando se presiona, Mode_switch se alterna (como mayúsculas, pero para Mode_switch) y cualquier tecla xmodmap que lo use se bloqueará en el modo AltGR hasta que presione AltGR nuevamente para alternarlo. Debería ser un asunto simple hacer un script para alternarlo automáticamente cuando se suelta la tecla, pero mis intentos de hacerlo fueron bastante defectuosos, por decir lo menos.

Cestariano
fuente