Reasignación del bloqueo de mayúsculas al control y escape (no de la manera habitual)

28

Sé cómo usar xmodmap para reasignar la tecla de bloqueo de mayúsculas para que actúe como una tecla de control o como una tecla de escape. Me gustaría combinar ambas características de la siguiente manera:

Cuando presiono, luego suelto, la tecla de bloqueo de mayúsculas, envía Escape. Cuando mantengo presionado el bloqueo de mayúsculas y presiono otra tecla (por ejemplo, A), envía Control-A.

¿Hay alguna combinación de xkb, xmodmap y algo más que pueda hacer que el bloqueo de mayúsculas se comporte de esta manera en X?

Estoy usando Ubuntu Precise en un Macbook Air 3,1.

usuario372737
fuente

Respuestas:

-2

Puede hacer el primero (mapear Caps Locka Esc) pero no puede hacer el segundo.

Explicación simple: Caps Lock simplemente no está diseñado para hacer algo cuando se presiona.

Explicación elaborada: hay muchos tipos de claves. Dos de ellos son Modifier Keys y Lock Keys .

Caps LockEs un bloqueo de teclas mientras que las claves tales como Ctrl, Alty Shiftson teclas modificadoras .

Es evidente por sus nombres que las teclas modificadoras modifican la función de las siguientes teclas presionadas, y las teclas de bloqueo actúan como un interruptor de palanca para activar o desactivar alguna función en particular.

Ahora, dado que Caps Lock es una tecla de bloqueo , no puede hacer que se comporte como una tecla modificadora sin asignarla a una. Caps Lockpor sí solo no puede funcionar como una tecla modificadora .

verde
fuente
Gracias por confirmar que X no está diseñado para hacer lo que quiero. Si un gurú X quiere hackear algo para que funcione, por favor contáctame.
user372737
44
Como la respuesta no aceptada a continuación, ciertamente puede hacer la segunda parte con numerosas utilidades como xcape o At-Home-Modifier.
Sparhawk
35

Tengo esta configuración en mi Mac e intenté encontrar una forma de Ubuntu sin suerte.

Bueno, ahora está funcionando. Gracias tungd por considerarme para xcape . Lo que he hecho es realmente simple y directo.

  1. En Preferencias del sistema> Distribución del teclado> Opciones ...> Posición de la tecla Ctrl, marqué 'Bloq Mayús como Ctrl'.

  2. xcape -e 'Control_L = Escape'

Hecho, el Bloqueo de mayúsculas funciona como Ctrl cuando se usa como un modificador, y como Esc cuando se presiona solo (hay un ligero retraso de unos cientos de milisegundos, como se indica en el archivo README de xcape, por lo que aún no es tan óptimo como la solución Mac que usa KeyRemap4MacBook.)

Vic Goldfeld
fuente
44
He usado gnome-tweak-toolpara mapear Caps Locka Ctrl, ya que no está Keyboard layouten System Settingsen Ubuntu 14.04. Entonces xcape -e 'Control_L=Escape'no funcionaba, pero después de usar xcape -dHe descubierto que Caps Lockgenera código de llave 66 y remapped que, respectivamente: xcape -e '#66=Escape'.
Sergiy Belozorov
3
Según esta publicación de blog , es posible hacer esto solo con xcape: setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape' setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape;Control_L=Escape;Control_R=Escape'
Louis Simoneau
Esta realmente debería haber sido la respuesta aceptada @ user372737
Assaf Lavie
@LouisSimoneau esto es mil veces esto.
Spencer Boucher
1
¿Algún progreso con el problema del retraso?
Toothrot
6

Estoy buscando esto también. Hace una semana, encontré una solución parcial usando xmodmap:

add Control = Caps_Lock
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

Por supuesto, esto no funciona a la perfección, envía de manera efectiva tanto Escape como Ctrl al mismo tiempo cuando presiono CapsLock, pero estuve contento por un tiempo.

Finalmente encontré esta pequeña utilidad https://github.com/alols/xcape . Entonces ahora puedo simplemente reasignar CapsLock a Ctrl y dejar que xcape haga su trabajo.

tungd
fuente
Otra opción es At-Home-Modifier. No está en desarrollo activo, y difiere ligeramente de xcape al instalarlo en la raíz. Sin embargo, se dispara a través de xorg.conf y, por lo tanto, solo puede actuar en teclados específicos, mientras usa otros teclados simultáneamente.
Sparhawk
4

EDITAR: Se corrigió esto para la mayoría de los administradores de pantallas inteligentes (más nuevos)

Según los comentarios de Louis y Sergiy, se me ocurrió esta solución que me funciona en Ubuntu 16.04 (Xenial) con LightDM y Unity.

Puse la siguiente línea de código en mi .xprofilearchivo en mi directorio de inicio.

setxkbmap -option 'caps:ctrl_modifier' && xcape -e 'Caps_Lock=Escape' &

El seguimiento y pone el comando xcape en segundo plano para que no bloquee su sesión. El setxkbmap hace su cambio de inmediato.

Sergiy

He usado gnome-tweak-tool para asignar el bloqueo de mayúsculas a Ctrl, ya que no hay diseño de teclado en la configuración del sistema en Ubuntu 14.04. Entonces xcape -e 'Control_L = Escape' no funcionó, pero después de usar xcape -d descubrí que Caps Lock genera el código clave 66 y lo reasignó respectivamente: xcape -e '# 66 = Escape'. - Sergiy Byelozyorov 4 de septiembre de 14 a 10:08

Louis

Según esta publicación de blog, es posible hacer esto solo con xcape: setxkbmap -option 'caps: ctrl_modifier' xcape -e 'Caps_Lock = Escape' setxkbmap -option 'caps: ctrl_modifier' xcape -e 'Caps_Lock = Escape; Control_L = Escape; Control_R = Escape '- Louis Simoneau 4 de agosto de 2015 a las 10:06

dragon788
fuente
3

Instalar xcape

sudo apt-get install xcape

Agregue las dos líneas en su ~/.bashrc

/usr/bin/setxkbmap -option 'caps:ctrl_modifier'⏎
/usr/bin/xcape -e 'Caps_Lock=Escape' -t 100

Observe la parte -t 100, si no la configura, puede notar un retraso en Esc si usa vim.

Searene
fuente
sudo apt-get install xcape(error tipográfico)
David sacudió el
1

He creado una herramienta en C especialmente para este propósito que supera muchos de los problemas con la solución xcape / xmodmap :

pepper_chico
fuente
¿Hay alguna forma de desactivar el "intercambio" de Esc a Caps, prefiero no tener Caps en absoluto y mantener el Esc antiguo y el nuevo comportándose como Escape.
dragon788
Gracias, voy a tener que poner un enlace para compilarlo automáticamente en mis archivos de puntos. También puedo PR README.md ya que en Ubuntu 16.04 requería libudev-dev y libevdev-dev para poder compilar.
dragon788
@ dragon788 ven a Arch (incluso podrías probar Antergos). Me mudé de Ubuntu hace años y nunca volveré, es mucho mejor.
pepper_chico