¿Cómo vuelvo a asignar ciertas teclas o dispositivos?

236

Estoy buscando una forma de reasignar ciertas claves en ubuntu.

es decir

Me gustaría cambiar PgUpa Homeo PgDownpara End.

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

NES
fuente
Mira mi respuesta aquí . No vale la pena copiar y pegar la misma respuesta. Quizás te ayude.
Rahul Virpara
1
¿Algún enlace similar a Emacs aquí para CTRL-P / N para pasos de unidad?
Léo Léopold Hertz 준영
¡Ya que xmodmapse dedica algo de tiempo ! para obtener una configuración de todo el sistema que tiene que usar xkb. Edite el archivo de idioma /usr/share/X11/xkb/symbols/para agregar sus cambios allí. Consulte askubuntu.com/a/898462/34298
rubo77 el

Respuestas:

249

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


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

  1. Inicie la ventana de terminal y ejecute xev. Ahora está activo y espera a que presione una tecla. Luego presione la tecla cuyo comportamiento desea cambiar. es decir PgUp.

  2. xevgenerará información sobre la tecla presionada. La tercera línea es importante. Debería ser similar a:

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

    en este ejemplo Priores el nombre del comportamiento al que está asignada la clave en este momento, el código de clave de número es la identificación interna para reconocer la clave. Ahora haga esto con otra tecla, es decir, PgDowndé esta salida

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

    Aquí nuevamente la parte interesante para nosotros es keycode 115y Next- el nombre del comportamiento.

  3. ahora cuando quiera intercambiar las dos teclas de uso xmodmap.

     xmodmap -e "keycode 110 = Next"
    

    Esto cambia la tecla con el código de tecla 110 en su teclado a la acción Next. Es muy simple

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

     xmodmap -e "keycode 53 = backslash bar"
    

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

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 nombrado .Xmodmapen su directorio de inicio ( ~))

Luego, debe crear un archivo con el nombre .xinitrcen su directorio de inicio donde ingrese el comando xmodmap .Xmodmap.

Ahora puede modificar .Xmodmapy ejecutar xmodmap .Xmodmapdesde la consola para ver los cambios de inmediato. Los cambios en .Xmodmappersistirán.

fuente: Ubuntu Foruns

Cosas de bonificación:

Si la tecla que está reasignando tiene un comportamiento diferente dependiendo de un estado (como la forma en que las teclas del teclado numérico dependen de NumLock) simplemente tiene que hacer xmodmap -pmpara obtener una lista de modificadores y luego hacer:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Supongamos, 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 "eliminación" cuando NumLock está desactivado.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2, porque xmodmap -pmnos dice que mod2es Num_Lock, los otros nombres se obtienen presionando las teclas xev.

NES
fuente
3
xevno puede capturar Fnpulsaciones de teclas
om-nom-nom
3
La respuesta seleccionada no funcionó para reasignar la tecla de bloqueo de mayúsculas para mí en Ubuntu 12.10. Pude hacer esto yendo a Configuración del sistema -> Teclado -> Configuración de diseño -> Opciones, que tiene una lista de teclas y comportamientos alternativos. Trabajó sin problemas en Unity y terminal.
Allyl Isocyanate
1
Si tiene varios teclados conectados, ¿verán estas herramientas una diferencia entre la misma tecla en otro teclado?
stommestack
1
Extraño, hice todo, pero mis combinaciones de teclas todavía se restablecen después de reiniciar.
Costa
1
No creo que tenga una -eventbandera en Ubuntu 12.04. Lanza un error y no menciona "evento" en man xev.
isomorfismos
20

Si está intentando mover una tecla Mayús, 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
cmcginty
fuente
+1 La respuesta más unix-y de todas para un modificador (ya lo había hecho de regreso con mi iBook 2, cuando quería que la tecla enter tuviera la función de Control_R, pero había olvidado los detalles).
rbrito
2
Una respuesta importante para los usuarios que usan teclados en laptops Lenovo
Einar Ólafsson
16

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

ACTUALIZACIÓN : mi 'idea de último momento' ha sido confirmada; (He respondido la pregunta incorrecta:) ... por favor vea la respuesta Wiki de la comunidad de NES (aceptada anteriormente).

Hay dos formas generales de reasignar una nueva clave.

  • localmente a un programa particular
    (se puede usar una tecla 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 manera de cambiar las combinaciones de teclas que ofrece la aplicación en sí ... por ejemplo.

Firefoxtiene un complemento llamado keyconfig ... para obtener más información, vea esta 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 combinació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 poderosa. Puede habilitar ejecutando gconf-editor(a través de Terminal o Alt + F2) ... navegue a desktop- gnome- interfacey seleccione can_change_accels.... Luego puede cambiar los elementos del menú a virtual lo que quiera (por programa / ventana) ... Sugiero que deshabilite tan pronto como hayas hecho lo que necesitas ...

De lo contrario, puede configurar teclas de acceso rápido globales. Utilizo un programa llamado xbindkeys Instalar xbindkeys , y también hay una opción disponible a través del Menú principal - Preferencias, llamadoKeyboard Shortcuts

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

Peter.O
fuente
+1, muy lindo! Una sugerencia: debe integrar su gran respuesta de otra pregunta en esta, tal vez también explicar un poco el formato de configuración de xbindkeys.
Stefano Palazzo
1
El bit sobre la asignación de otras teclas podría ser manejado por xdotool, consulte la página del manual, lo he usado para resolver este problema .
Stefano Palazzo
Recientemente encontré otro enfoque con una herramienta llamada xmodmap en combinación con una herramienta llamada xev. No sé cuáles son las diferencias entre xmodmap y xbindkeys, pero esto funciona bastante bien para mí. ¿Algún consejo con la herramienta para preferir de los dos nombrados? Aquí hay una guía paso a paso muy útil que describe xmodmap y xev ubuntuforums.org/showpost.php?p=7675138&postcount=2
NES
@NES ... Parece que he abordado el punto equivocado ... Parece que realmente desea reasignar la forma en que el sistema operativo interpreta una tecla en particular, es decir, una interpretación de teclado no estándar, mientras que me he referido a un interpretación estándar del teclado, y simplemente sobrecargando las asignaciones de teclas predeterminadas. (Creo que lo que buscas es similar a cambiar los botones izquierdo y derecho del mouse). Bueno, parece que mi respuesta fue buena por lo incorrecto :)
Peter.O
Sí, pero no hay problema. La respuesta también es interesante. la guía paso a paso que publiqué el enlace de arriba era la manera correcta. Así que publicaré una respuesta breve con la solución de que otros usuarios tienen una buena guía. gracias fred
NES
9

Así es como traté de cambiar la asignación de la ENTERclave a la SHIFTclave (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".

INVERTIR EL MAPEO:

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

AHORRE LOS RESULTADOS:

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

AÑADIR

 xmodmap ~/.Xmodmap

$ sudo reboot

El principal problema fue que la reversión NO funcionó. La ENTERclave fue asignada a la SHIFT_Rclave; pero la SHIFT_Rclave no se asignó a la ENTERclave. Imagínate.

Bill Davis
fuente
7

Para hacer remapeos globales independientemente de X, puede hacer uso de la configuración de la consola (5) en su lugar.

En mi caso, quería reasignar la Caps Lockclave D, ya que mi Dclave está rota :)

Primero usé dumpkeys (1) para obtener una plantilla para un mapeo, en el caso de la Dtecla, el bit interesante es el mapeo 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 aplicarlo Caps Lock(código de teclado 58 en mi teclado) en su lugar

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

Ahora se lee

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 reasignación para la configuración de la consola

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

y la configuración de la consola debe reconfigurarse (omitiendo las preguntas de baja prioridad con -phigh)

sudo dpkg-reconfigure console-setup -phigh

Ahora la reasignación debe completarse y cargarse automáticamente en el arranque.

revs y
fuente
3

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

Lo intenté por primera vez, xmodmappero eso no puede generar eventos modificadores. Por lo tanto, es imposible crear un acceso directo que genere, por ejemplo, el Controlevento.

Entonces lo intenté xbindkeyscon xmacro. Ese tipo de trabajo funciona, pero xbindkeysno puede capturar algunas combinaciones de teclas en mi sistema, como Alt + ___.

Así que finalmente utilicé los atajos de teclado propios de Unity -> Atajos personalizados para configurar mi atajo.

Y en lugar de eso xmacro, ahora he usado el xvkbdprograma para generar los eventos del teclado, pero eso es solo una preferencia personal. Ambos xmacroy xvkbdfuncionan casi lo mismo. Un consejo adicional es agregar un parámetro de retraso xmacroo xvkbdasegurarse de que los eventos no se pierdan.

HRJ
fuente
2

Para mí, AutoKey del Software Center funcionó mejor. Tiene una GUI intuitiva, para agregar un nuevo enlace haga clic en Nuevo -> Frase y

  1. Agregar nombre, haga clic en Aceptar
  2. En la sección "Configuración de frase", asegúrese de que el pegar usando esté configurado en el teclado
  3. Agregue la tecla de acceso rápido que desea usar
  4. Agregue el comando al campo de texto, por ejemplo, para emular la tecla de flecha izquierda: sería <left>(la lista de teclas especiales está aquí ).
ego
fuente
Esto funcionó a la perfección para configurar Super+Cy Super+Vpara Ctrl+Cy Ctrl+V. La solución perfecta cuando se usa Ubuntu a través de VirtualBox en una Mac
Ben
Sin embargo, esto no deshabilita otros comandos que escuchan estos accesos directos. Para desactivar Super+V"mostrar la lista de notificaciones", vaya a Configuración -> Dispositivos -> Teclado y desactívelo allí
Ben
@Ben sí, sería genial si mostrara enlaces de otras aplicaciones, pero es más que la guinda del pastel. Mi problema es que no es posible reasignar la tecla "Fn". He decidido probar el teclado uhk: esa cosa programable independientemente del sistema operativo, verá cómo funciona.
ego
0

Si necesita reasignar una clave solo para un programa específico, acabo de agregar esta función a hax11.

Me gustaría cambiar PgUpa Homeo PgDownpara End.

Para hacer esto con hax11, abra el archivo de configuración de perfil del programa en ~/.config/hax11/profiles(p ~/.config/hax11/profiles/usr\lib\firefox\firefox. Ej. ) Y agregue:

Enable=1
MapK112=K110
MapK117=K115
Vladimir Panteleev
fuente