¿Cómo reasignar ciertas claves o dispositivos?

213

Estoy buscando una forma de reasignar ciertas claves en ubuntu.

i.e.

Me gustaría cambiar PgUp a Inicio o PgDown a Finalizar .

¿Existe un comando incorporado o una herramienta para reasignar claves en Ubuntu / GNOME?

    
pregunta NES 05.02.2011 - 14:20

7 respuestas

232

Aviso: a partir de 2013, Ubuntu y sus derivados ya no usan xmodmap , sino que usan xkb . Para obtener más información, consulte esta respuesta . La respuesta a continuación ya no es relevante para las versiones actuales.

Para reasignar ciertas claves necesita dos herramientas. Primero xev (herramienta de línea de comandos) y segundo xmodmap (también herramienta de línea de comandos) . Ambos deben estar disponibles en Ubuntu sin necesidad de instalarlos.

  1. Inicia la ventana del terminal y ejecuta xev . Ahora está activo y espera a que presione una tecla. Luego presione la tecla cuyo comportamiento desea cambiar. es decir, PgUp .

  2. xev dará como resultado cierta información sobre la tecla presionada. La tercera línea es importante. Debe ser similar a:

    state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
    

    en este ejemplo Prior es el nombre del comportamiento al que está asignada la tecla en este momento, el código clave numérico es la identificación interna para reconocer la clave. Ahora haga esto con otra clave, es decir, PgDown dé esta salida

    state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
    

    Nuevamente, la parte más interesante para nosotros es keycode 115 y Next - el nombre del comportamiento.

  3. ahora, cuando quiera cambiar las dos teclas, use xmodmap .

     xmodmap -e "keycode 110 = Next"
    

    Esto cambia la clave con el código clave 110 en su teclado a la acción Next . Es bastante simple.

    Tenga en cuenta que si la clave que está mapeando debe tener un significado diferente cuando se usa con la tecla Shift (por ejemplo, para diseños de teclado británicos, Shift + 2 da comillas) luego puede simplemente enumerar el comando secundario después del primero. Por ejemplo, si desea que la clave con el código 53 se asigne normalmente a la barra diagonal inversa, pero al símbolo de la barra cuando se utiliza con desplazamiento, puede hacer:

     xmodmap -e "keycode 53 = backslash bar"
    

Información adicional: La secuencia de estas asignaciones es Clave , Mayús + Clave , mode_witch + Clave , mode_switch + Shift + Key , AltGr + Key , AltGr + Shift + Key . Para omitir una columna, use NoSymbol . Además, aquí es una lista completa de todos los keysyms.

Nota: Estos cambios son solo para la sesión X activa y se perderán después del reinicio. Cuando desee guardar los cambios de forma permanente, debe ejecutar los siguientes comandos después de los anteriores:

xmodmap -pke >~/.Xmodmap

(crea un archivo llamado .Xmodmap en su directorio de inicio ( ~ ))

Luego debes crear un archivo llamado .xinitrc en tu directorio de inicio donde pones el comando xmodmap .Xmodmap in.

Ahora puede modificar .Xmodmap y ejecutar xmodmap .Xmodmap desde la consola para ver los cambios inmediatamente. Los cambios en .Xmodmap persistirán.

source: Ubuntu Foruns

Cosas de bonificación:

Si la clave que está reasignando tiene un comportamiento diferente según un estado ( al igual que la forma en que las teclas del teclado numérico dependen de NumLock) simplemente tiene que hacer xmodmap -pm para obtener una lista de modificadores y luego hacer:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Suponga, por ejemplo, que desea obtener un punto en lugar de una coma en el teclado numérico (útil para la mayoría de los programadores), pero desea mantener el comportamiento de "eliminar" cuando NumLock está desactivado.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2 , porque xmodmap -pm nos dice que mod2 es Num_Lock , los otros nombres se obtienen presionando las teclas en xev .

    
respondido por el NES 08.02.2015 - 11:17
18

Si intenta mover una tecla Shift, hay algunos pasos adicionales:

 xmodmap -e "keycode 62 = Up" # Shift => Up
 xmodmap -e "keycode 111 = Shift_R" # Up => Shift
 xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
 xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
 xset r 62 # Make the new Up key autorepeat
 xset -r 111 # Prevent the new Shift key from autorepeating
    
respondido por el cmcginty 17.12.2012 - 19:46
16

Acabo de tener una idea de último momento ... Creo que puede querer decir algo completamente diferente con "reasignación" ... pero dejaré mi respuesta tal como está ... (No sé cómo volver a asignarla) una clave para comportarse como otro)

ACTUALIZACIÓN : mi 'idea tardía' ha sido confirmada; (He respondido la pregunta incorrecta:) ... consulte la respuesta Wiki de Comunidad de NES (aceptada anteriormente).

Hay dos formas generales de reasignar volver a enlazar una clave.

  • localmente a un programa particular
    (una clave se puede usar para diferentes cosas en diferentes aplicaciones / ventanas)
  • globalmente para un usuario específico
    (una tecla tiene la misma función en todas las ventanas)

Para los métodos "locales a un programa", a veces hay una forma de cambiar las combinaciones de teclas que ofrece la aplicación en sí ... ej.

Firefox tiene un complemento llamado keyconfig ... para ver información, consulte Publicación de MozillZine

La mayoría de los programas de Ubuntu están basados ​​en Gnome y hay una utilidad específica para modificar la vinculación de teclas para cualquier elemento de menú de estas aplicaciones de Gnome ... Se llama Editable Menu Accelerator ... Es una herramienta muy "sensible", pero bastante poderoso .. Puede habilitarlo ejecutando gconf-editor (a través de Terminal o Alt + F2) ... navegue a desktop - gnome - interface y seleccione can_change_accels .... Puede entonces cambie los elementos del menú a cualquier cosa virtual que desee (por programa / ventana) ... Le sugiero que lo desactive tan pronto como haya hecho lo que necesita ...

De lo contrario, puede configurar teclas rápidas globales. Uso un programa llamado xbindkeys , y también hay una opción disponible a través del menú principal - Preferencias, llamado Keyboard Shortcuts

Si usa xbindkeys, deberá agregarlo a sus "Aplicaciones de inicio" (Menú principal - Preferencias) ... También (como lo sugirió Stefano Palazzo) Anteriormente escribí una descripción más detallada de xbindkeys en un Responda en esta página de askubuntu

    
respondido por el Peter.O 05.02.2011 - 15:04
8

Así es como traté de cambiar la asignación de la tecla ENTER a la tecla MAYÚS (y viceversa):

$ uname -a

INFORMES:

Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux

$ which xmodmap

INFORMES:

/usr/bin/xmodmap

$ which xev

INFORMES:

/usr/bin/xev

$ xev

(ignore las siguientes cincuenta líneas más o menos)

PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XmbLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
    state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
    state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

Lo importante es la tercera línea de cada pulsación de tecla:

FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".

state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".

REVERSE EL MAPEO:

$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"

GUARDAR LOS RESULTADOS:

$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc

AGREGAR

 xmodmap ~/.Xmodmap

$ sudo reboot

El problema principal era que la inversión NO funcionaba. La tecla ENTER se asignó a la tecla SHIFT_R ; pero la clave SHIFT_R no estaba asignada a la tecla ENTER . Ve figura.

    
respondido por el Bill Davis 27.01.2012 - 04:04
6

Para hacer remapeados globales independientemente de X, puede utilizar console-setup (5) en su lugar.

En mi caso, quería reasignar la clave Bloq Mayús a D , ya que mi clave D está rota:)

Primero utilicé dumpkeys (1) para obtener una plantilla para una asignación, en el caso de la tecla D , el bit interesante es la asignación para el código clave 32 (en mi teclado); ¡Tenga en cuenta que hay dos espacios en el patrón grep!

$ sudo dumpkeys | grep "keycode  32" > tempfile
$ cat tempfile
keycode  32 = +d
    shift   keycode  32 = +D
    altgr   keycode  32 = +eth
    shift   altgr   keycode  32 = +ETH
    control keycode  32 = Control_d
    shift   control keycode  32 = Control_d
    altgr   control keycode  32 = Control_d
    shift   altgr   control keycode  32 = Control_d
(121 lines total...)

Para cambiar el mapa para aplicar a Bloq Mayús (código clave 58 en mi teclado) en su lugar

sed 's/32/58/' -i tempfile

Ahora dice

keycode  58 = +d
    shift   keycode  58 = +D
    altgr   keycode  58 = +eth
(etc...)

Para agregar esta reasignación al mapa predeterminado, simplemente debe agregarse al archivo de inclusión de remape para console-setup

sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'

y console-setup deben reconfigurarse (omitiendo preguntas de baja prioridad con -phigh )

sudo dpkg-reconfigure console-setup -phigh

Ahora el remapeo debe completarse y cargarse automáticamente al arrancar.

    
respondido por el arand 09.01.2014 - 13:09
3

Pasé un día entero tratando de crear un atajo para Ctrl+Pageup .

Primero probé xmodmap pero eso no puede generar eventos de modificación. Por lo tanto, es imposible crear un acceso directo que genere, por ejemplo, el evento Control .

Luego probé xbindkeys con xmacro . Ese tipo de trabajo funciona, pero xbindkeys no puede capturar algunas combinaciones de teclas en mi sistema, como Alt + ___ .

Así que finalmente utilicé los atajos de teclado de Unity - & gt; Accesos directos personalizados para configurar mi acceso directo.

Y en lugar de xmacro , ahora he usado xvkbd program para generar los eventos del teclado, pero eso es solo una preferencia personal. Ambos xmacro y xvkbd funcionan casi igual. Un consejo adicional es agregar un parámetro de retraso en xmacro o xvkbd para garantizar que los eventos no se pierdan.

    
respondido por el HRJ 20.01.2014 - 06:30
0

Para mí AutoKey de Software Center funcionó mejor. Tiene GUI intuitiva, para agregar un nuevo enlace, haga clic en Nuevo - & gt; Frase y

  1. Agregue nombre, haga clic en Aceptar
  2. En la sección "Configuración de frase", asegúrese de que el uso de pegar está configurado en el teclado
  3. Agregue la tecla de acceso rápido que desea usar
  4. Agregar comando en el campo de texto, por ejemplo, para emular la tecla de flecha izquierda: sería <left> (la lista de teclas especiales es aquí ).
respondido por el bruddha 28.07.2018 - 14:15

Lea otras preguntas en las etiquetas