¿Cómo asignar otro modificador a la tecla Alt para X11?

9

Objetivo:

Me gustaría asignar Alt a la tecla Bloq Mayús y Meta a la tecla Alt. Pero de esa manera, Alt-key ya no se reconocería como Alt, y CapsLock-key ya no se reconocería como CapsLock.

openSUSE 11.4

Previamente:

openSUSE 11.1: como soy el único usuario de mi computadora, "simplemente" edité el archivo / usr / share / X11 / xkb / keycodes / xfree86 y funcionó sin problemas. Las llaves estaban conectadas a sus símbolos en el nivel más bajo.

Problemas:

  1. xkb

    Creé una variante de diseño polaco (pl_ext) que (para prueba) consta de tales entradas:

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    

    Sin embargo, esto simplemente no hace nada, la tecla CapsLock en xev se reconoce (símbolo) como Alt_L, pero cuando presiono la tecla CapsLock se comporta como CapsLock (por ejemplo, suponiendo que tenga File en el menú, Alt + F debería abrir este menú, no )

    Pregunta: ¿Cómo definir un archivo de diseño para configurar la tecla Bloq Mayús como Alt y la tecla Alt como Meta?

    Editar: ¡La mitad del éxito aquí! Ahora tengo tales entradas:

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { <CAPS> }; // this is a difference
    

    Y esto funciona como se desea. Esto no lo hace:

    key <LALT> { [ Meta_L ] } ;
    key <RALT> { [ Meta_R ] } ;
    modifier_map Mod5 { <LALT>,<RALT> };
    

    Las teclas Alt son reconocidas como Meta por xev, pero aún puedo abrir los menús con Alt + F, cambiar de ventana, y no debería. Y, por otro lado, no puedo ingresar ningún carácter nacional, y debería.

  2. xfree86

    Pero ahora esto no funciona, supongo que se lee otra tabla de archivos en lugar de xfree86.

    Pregunta: ¿Cómo averiguar qué archivo de tabla de códigos clave utiliza el sistema (X / Gnome)?

    Editar: ¡ La mejor opción para mí, editar tablas de códigos de teclas, se resolvió con la respuesta de Macías !

  3. xmodmap

    La mitad del éxito aquí. Esta parte funciona según lo deseado:

    eliminar Lock = Caps_Lock keysym Caps_Lock = Alt_L

    Ahora, tengo realmente la tecla Bloq Mayús que está asignada a Alt. Pero esto:

    keysym Alt_L = Meta_L

    ... hace algo extraño. xev muestra que la tecla Alt está asignada a Meta, pero cuando presiono Alt + F (esto debería asignarse a Meta + F -> no hacer nada) se abre el menú Archivo. Además, cuando presiono Alt + Tabulador, obtengo un conmutador de ventanas (no debería, Alt es Meta ahora).

    Pregunta: ¿Cómo "eliminar" el comportamiento anterior de Alt-key?

    Editar: Esta parte se resuelve con la respuesta de Gilles .

Resumen:

Responder cualquier pregunta resolvería (con suerte) mi problema, sin embargo, prefiero usar xkb por completo porque podría empaquetar todos los archivos para xkb y cambiar el diseño en un solo lugar. ¡Gracias de antemano por cualquier ayuda!

Greenoldman
fuente
Si ha encontrado una respuesta, publíquela como tal y brinde suficiente información para otras personas que puedan estar interesadas. (No hay ningún problema para responder a su propia pregunta si encontró la respuesta en otro lugar o por sí mismo, incluso se puede marcar su respuesta como aceptada si lo desea.)
Gilles 'SO- estar parada mal'
@Gilles, está bien, pero mantengo su respuesta como respuesta, solo para evitar posibles acusaciones, lo hice por puntos. Además, tu ayuda fue muy valiosa para mí.
greenoldman
No obtienes puntos por aceptar tu propia respuesta de todos modos. (Usted obtiene puntos por los votos en su propia respuesta, lo cual es justo desde que hizo el trabajo). Lo más importante es tener la información claramente presentada. Ahora hay dos respuestas a esta pregunta, una con xmodmap y otra con xkb, y la página se leería más claramente si ambas se publicaran como respuestas.
Gilles 'SO- deja de ser malvado'

Respuestas:

7

(Esta respuesta es solo sobre xmodmap. Estoy seguro de que es posible hacer esto con XKB, simplemente no sé cómo hacerlo).

Los modificadores y los keyyms se asignan de forma independiente. Pero obtienes efectos extraños si no los configuras consistentemente. Creo que todo lo que falta es el addcomando para asignar un modificador Meta_L, aunque es posible que también deba borrar y reasignar las teclas modificadoras. Puede reemplazar Mod1y Mod2por Mod3, Mod4y Mod5: son intercambiables, solo asegúrese de no usar uno para dos propósitos diferentes.

clear Mod1
clear Mod2
remove Lock = Caps_Lock
keysym Caps_Lock = Alt_L
keysym Alt_L = Meta_L
add Mod1 = Alt_L Alt_R
add Mod2 = Meta_L Meta_R
Gilles 'SO- deja de ser malvado'
fuente
Muchas gracias. De hecho, usé Mod5 en lugar de Mod2 para Meta, y ahora puedo escribir como se esperaba (uso la tecla meta + para muchos caracteres nacionales). Pero curiosamente, ahora tengo un problema con la tecla de bloqueo de mayúsculas nuevamente, está unida a ... Meta. Supongo por qué, porque una vez que se vincula a Alt, pero luego Alt se redefine. Entonces, ¿cómo marcar la diferencia e insistir una vez en el código y la segunda vez en el símbolo? Me gustaría no usar códigos de teclas sin formato porque podrían cambiar de teclado a teclado. No puedo cambiar el orden de los keyyms, porque en la última línea obtendría un error.
greenoldman
El problema keysym Caps_Lock = Alt_Les que si lo ejecuta dos veces, vuelve a poner el sistema en un estado no deseado. Por eso uso códigos de teclas ; varían entre sistemas operativos y arquitecturas (no entre teclados), pero no con tanta frecuencia.
Gilles 'SO- deja de ser malvado'
Gracias por la explicación, supuse en ese momento :-). Si no le importa, lo guardaré un poco más como una pregunta sin respuesta, tal vez alguien podría resolver mi problema a nivel de xkb, lo que sería más flexible (el cambio de diseño mata a xmodmaps).
greenoldman
Muchas gracias, seguí luchando con símbolos / pc sin éxito.
Cody Craven el
9

Enfoque de edición de códigos clave

Encontré la respuesta en el foro polaco de Ubuntu. Ahora no se edita el archivo "xfree86" sino el archivo "evdev". De esta manera, puede realizar cambios permanentes que funcionen para todos los diseños.

Ejemplo (a petición de Gilles): inicie sesión como root, vaya a

/usr/share/X11/xkb/keycodes

haga una copia de seguridad del archivo "evdev" y luego edítelo. Cambie los códigos a su gusto, por ejemplo en mi caso:

<LALT> = 66; // when I press CapsLock (66 code) system will report pressing LeftAlt
<LMTA> = 64; // I will get LeftMeta when pressing LeftAlt (64 code)

Puede encontrar los códigos ejecutando el comando "xev", pero simplemente puede mirar el archivo original "evdev".

Cierre sesión, inicie sesión, disfrute de su nuevo teclado :-).

Greenoldman
fuente
Esta es probablemente la forma correcta de ir con XKB. Estoy ejecutando Linux Mint y tengo problemas donde las Keyboard Preferencesopciones para Capslockanular la XKBconfiguración personalizada que escribo. Como se trata de un botón de selección de selección, no hay forma de que pueda evitar que se aplique una de las reglas de la GUI.
dcunited001
¿Se puede preservar el comportamiento de LALT? Es decir, ¿no cambiarlo a LMTA? Lo intenté pero aparentemente no puedes tener dos asignaciones de la forma <LALT> = ...
Daniel
con esto fue muy fácil cambiar LALT y RALT en ubuntu ... muchas gracias. para todos los googlers: mapear alt a otra clave ubuntu alt a altgr ubuntu remap alt a ctrl
Noel Schenk
4

prueba esto:

    key <CAPS>  { [ Alt_L, Alt_L ] };
    key <LALT> { [ Meta_L, Meta_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    modifier_map Mod5 { Meta_L, Meta_R };

tenga en cuenta las dos definiciones de nivel. Esto se debe a que el valor predeterminado para LALT es [Alt_L, Meta_L]; Si no redefine el segundo, seguirá siendo Meta_L.

Mire esta respuesta en xkb para ver cómo redefinir algunas claves sin necesidad de editar los archivos predeterminados principales (por lo tanto, no es necesario ser root). En tal caso, necesitará en el archivo de símbolos locales una pequeña sección como:

partial modifier_keys
xkb_symbols "capsasalt_altasmeta" {
        replace key <CAPS>  { [ Alt_L, Alt_L ] };
        replace key <LALT> { [ Meta_L, Meta_L ] };
        modifier_map Mod1 { Alt_L, Alt_R };
        modifier_map Mod5 { Meta_L, Meta_R };
};
Pablo Saratxaga
fuente