¿Escribiendo usando combinaciones de teclas?

12

Soy un usuario de Ubuntu 10.04 que busca una forma de, por ejemplo, hacer que mi computadora escriba un carácter "+" cuando presiono la Windowstecla (creo que se llama Superen el mundo Linux) y presiono la Ktecla. Necesito que esto funcione en todas las aplicaciones. (Soy una persona con una discapacidad de escritura y necesito adaptar Ubuntu a mis necesidades). ¡Gracias!

Kris Harper
fuente

Respuestas:

15

Como desea reasignar las claves para todas las aplicaciones, la mejor opción es utilizar xmodmap. Es flexible y muy potente, pero implica escribir algunos comandos en un terminal.

Paso 0 - El enfoque

El servidor X administra el teclado y todos los eventos clave y lo traduce a códigos clave para todas las aplicaciones.

El enfoque sería asignar una tecla modificadora (como la tecla Súper o la tecla Alt derecha) como la tecla "cambio de modo" y decirle al servidor X que genere diferentes códigos dependiendo de si se presiona una tecla con la tecla Modo presionada o no.

Por defecto, no hay una tecla de cambio de modo definida y también todas las teclas están configuradas para generar el mismo código cuando se presionan con o sin cambio de modo. Esto es bueno ya que significa que, excepto por las teclas que anula explícitamente, ninguna otra tecla se comportará de manera diferente o necesitará una configuración adicional.

Sin embargo, me gustaría que considere usar la tecla Alt derecha como cambio de modo, especialmente si también está usando compiz, ya que algunos complementos de mapeo asignan accesos directos de súper teclas (por ejemplo, selector de ventanas, selector de cambios, etc.). Si no está interesado en controlar compiz a través del teclado, Super está bien.

Para xmodmap, las superclaves se identifican como Super_L o Super_R. Debe elegir uno para usarlo como tecla de cambio de modo. Alternativamente, la tecla alt derecha es Alt_R. Puede confirmar esto ejecutando xev y presionando las teclas necesarias en su teclado. Ver esta publicación para los pasos.

Paso 1 - Configurando el mapa modificador

  1. Abra una terminal ( Applications -> Accesories -> Terminal) y ejecute el siguiente comando para crear un archivo con las combinaciones de teclas actuales . Usaremos esto como punto de partida.

    xmodmap -pke > curkeys.map
    xmodmap -pm >> curkeys.map
    
  2. Abre esto en tu editor de texto favorito. gedit curkeys.map &lo abre en gedit. Hacia el final del archivo, verá algunas líneas como esta:

    keycode 253 =
    keycode 254 =
    keycode 255 =
    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),  Alt_R (0x6c),  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)
    
  3. Elimine la línea que comienza con "xmodmap: hasta 4 ..."

  4. Edite el mapa modificador para que se vea así. Ponga la palabra "agregar" al comienzo de cada línea e inserte "=" después del nombre del modificador. Luego, elimine los códigos entre paréntesis y comas. También tenga en cuenta que me he movido Mode_switchde una mod5línea a otra mod3ya que estaba vacía. La tabla modificada debería verse así: el contenido real variará ligeramente en su caso de los siguientes (depende de la distribución de su teclado).

    add shift =      Shift_L  Shift_R
    add lock  =      Caps_Lock
    add control =    Control_L  Control_R
    add mod1    =    Alt_L Meta_L Alt_R 
    add mod2    =    Num_Lock
    add mod3    =    Mode_switch
    add mod4    =    Super_L Super_R Super_L Hyper_L 
    add mod5    =    ISO_Level3_Shift
    
  5. Reasigne la tecla de cambio de modo físico. Agregue una línea como esta al final (Reemplace Super_L con Super_R o Alt_R si es necesario).

    keysym Super_L = Mode_switch
    
  6. Elimine el nombre clave (Super_L) de cualquier definición de modificador. Para Super_L esto significa eliminarlo de la línea mod4.

    add mod4    =    Super_R Hyper_L 
    

    Ahora la tecla "Súper" derecha seguirá actuando como una súper tecla normal, mientras que la tecla izquierda tendrá propiedades especiales.

  7. Ahora necesitamos reasignar las teclas para producir diferentes códigos, ya sea que se presionen mientras se mantiene presionada la tecla Super_L o no. Cada línea en nuestro archivo que comienza con keycodeespecifica 4 keyyms para cada tecla que se generará en función de si se presionan Mod1 (teclas shift) y las teclas de cambio de modo. ( Enlace )

    !...........................................................................
    !        Key            Base              Shift           Mode    Mode+Shift
    !---------------------------------------------------------------------------
    keycode  13             = 4               dollar          4       quotedbl
    keycode  14             = 5               percent         5       colon
    keycode  15             = 6               asciicircum     6       comma
    keycode  16             = 7               ampersand       7       period
    ...
    keycode  45             = k               K               k       K
    

    Si queremos que la pulsación de tecla Super_L + k genere una tecla "+", entonces debemos modificarla para que se lea

    keycode  45 = k K plus plus
    

    La ventaja final también asigna Mayús + Super_L + k a más, pero esto se puede asignar a otra cosa. Para cada tecla hay exactamente 1 línea para modificar. Edite más líneas para reasignar más teclas: deje las 2 primeras entradas intactas para mantener el comportamiento normal de pulsación de teclas.

  8. Guarde el archivo y salga del editor.

  9. Instale el mapa de teclas ejecutando los siguientes comandos en una terminal. El primero lo configura para esta sesión, el segundo lo hace permanente para futuras sesiones.

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    
  10. Puede probar esto inmediatamente presionando las teclas modificadas (Super_L + k, por ejemplo).

Paso 3 - Agregar / revisar el mapa

Una vez que se instala el mapa modificado, es fácil agregar nuevas claves.

  1. Use xev para encontrar los códigos de teclas y los símbolos de teclas

  2. pruébelo ejecutando este comando para asignar la clave:

    xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
    

    Reemplace los elementos entre paréntesis angulares (como <code> <base>etc.) con valores apropiados.

  3. Copia de seguridad del curkeys.maparchivo.

  4. Abra curkeys.mapy edite la línea para el código clave correspondiente.
  5. Vuelva a aplicar los siguientes comandos (el primero no es necesario si realizó el paso 2)

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    

Nota: 1 : las modificaciones realizadas en los atajos de teclado (por ejemplo, System -> Preferences -> Keyboard Shortcuts) afectan el mapa del modificador y generalmente se perderán en el próximo inicio de sesión. Así que por favor evita eso.

Nota: 2 : a veces recibo mensajes de error como este al usar este método. No sé lo que esto significa, sin embargo, estos son generalmente inofensivos.

X Error of failed request:  BadValue (integer parameter out of range for operation)
Major opcode of failed request:  118 (X_SetModifierMapping)
Value in failed request:  0x17
Serial number of failed request:  263
Current serial number in output stream:  263

La ayuda detallada para xmodmap está disponible aquí .

koushik
fuente
alguna suerte con este? Si esto no está ayudando o de alguna manera no está claro, por favor comente, lo revisaré y lo haré más útil.
koushik
1
Tenga en cuenta que en Linux Mint 17 Xfce (o al menos allí), tiene que ser ~/.Xmodmap, ~/.xmodmapse ignora.
zbr
2
No olvide clearlas teclas que se están restableciendo según unix.stackexchange.com/a/4526/2512
Andy