¿Cómo evitar el efecto de alternancia de bloqueo de mayúsculas, sin reasignarlo o deshabilitarlo?

22

Tengo un programa X11 que toma el bloqueo de mayúsculas y lo usa. El problema es que quiero deshabilitar la alternancia de bloqueo de mayúsculas normal, pero al hacerlo parece deshabilitar la clave.

Entonces, lo que sea que X11 obtenga para una pulsación de tecla de bloqueo de mayúsculas, aún debe obtener (no deshabilitar la tecla o reasignarla a alguna otra tecla), pero sin que nada traduzca la pulsación de tecla en un interruptor de mayúsculas (que podría estar en el nivel del kernel? )

Intenté cambiar el código de escaneo, pero esto simplemente reasignó la clave. También eliminé la entrada de mayúsculas xmodmap, pero esto también deshabilitó las mayúsculas.

¿Cómo puedo decirle al kernel que ignore la tecla mayúscula (wrt es su funcionalidad regular), pero aún así pasar el mensaje a X?

Solo para agregar un poco más de detalle:

El 'programa' que intento ejecutar es humanizado 'enso'. Cuando no hay clave, aparece el error "CRÍTICO: raíz: no se pudo encontrar la clave de cuasimodo". Cuando no hay ningún error, puedo usar enso con mayúsculas, pero sofar no ha descubierto cómo deshabilitar la funcionalidad de mayúsculas mientras enso todavía puede acceder a ellas.

Chris2048
fuente
Proporcione detalles sobre lo que intentó, es decir, las expresiones exactas de xmodmap. Sin detalles, no podemos decir si sabía qué hacer y si lo hizo mal, o si lo hizo bien, pero el código falló por alguna otra razón. También nos da el sistema operativo que está utilizando porque algunos tienen procesamiento de código clave que ocurre por debajo del nivel del servidor X.
Kyle Jones
@Kyle Intenté "eliminar Lock = Caps_Lock" y luego "keycode 66 =" (que se asignó a CapsLock). Estoy ejecutando ubuntu 12.10 en una máquina de 64 bits.
Chris2048
Otra posibilidad es reasignar a otra clave. setxkbmap -option ctrl:nocapsreasignaciones a Control_L, por ejemplo.
Chris Down
¿Estás diciendo que estarías bien si pudiéramos darte una forma de reasignar el bloqueo de mayúsculas para decir la tecla de control o no es eso lo que buscas? Tal como está, esta pregunta es un poco confusa, realmente sería de gran ayuda si agregaras detalles a la pregunta de lo que has intentado hasta ahora.
slm
Solo para que quede claro también, hay una característica en Ubuntu 12.10 donde puede hacer que el bloqueo de mayúsculas sea una tecla de control adicional. ¿Es esto lo que estás pensando cuando dices "reasignación"? Aquí hay una captura de pantalla del diálogo: flickr.com/photos/11708996@N00/3010939023
slm

Respuestas:

28

Creo que tengo una técnica para deshabilitar la alternancia de la Capslocktecla, pero no deshabilitar la tecla por completo, o reasignarla a otra tecla en el teclado.

Si usa el comando:

setxkbmap -option caps:none

El teclado ya no se alternará. He confirmado esto en mi computadora portátil con Fedora 14, el LED ya no se ilumina y la Capslockfuncionalidad normal se ha ido.

Sin embargo, el uso de xev todavía muestra que se está presionando la tecla:

$ xev
...
...
KeyPress event, serial 35, synthetic NO, window 0x6800001,
    root 0xb1, subw 0x0, time 261504852, (167,-15), root:(353,268),
    state 0x10, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 35, synthetic NO, window 0x6800001,
    root 0xb1, subw 0x0, time 261504971, (167,-15), root:(353,268),
    state 0x10, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False
    ...

Por lo tanto, los eventos que se presionan con la tecla aún se dejan intactos para que otras aplicaciones los recojan.

setxkbmap

El archivo /usr/share/X11/xkb/rules/xorg.lstcontiene la lista completa de las opciones que puede dar setxkbmap.

Buscando en este archivo "cap", noté esta línea:

caps:none            CapsLock is disabled

Hay otros valores en este archivo, por lo que si esto no es lo que está buscando, quizás uno de esos valores alternativos se ajuste en su lugar.

$ grep cap /usr/share/X11/xkb/rules/xorg.lst
  grp:caps_switch      CapsLock (while pressed), Alt+CapsLock does the original capslock action
  grp:caps_toggle      CapsLock
  grp:shift_caps_toggle Shift+CapsLock
  grp:shift_caps_switch CapsLock (to first layout), Shift+CapsLock (to last layout)
  grp:alt_caps_toggle  Alt+CapsLock
  lv3:caps_switch      CapsLock
  lv3:caps_switch_latch CapsLock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)
  ctrl:nocaps          Make CapsLock an additional Ctrl
  ctrl:swapcaps        Swap Ctrl and CapsLock
  grp_led:caps         CapsLock
  caps                 CapsLock key behavior
  caps:internal        CapsLock uses internal capitalization. Shift "pauses" CapsLock
  caps:internal_nocancel CapsLock uses internal capitalization. Shift doesn't affect CapsLock
  caps:shift           CapsLock acts as Shift with locking. Shift "pauses" CapsLock
  caps:shift_nocancel  CapsLock acts as Shift with locking. Shift doesn't affect CapsLock
  caps:capslock        CapsLock toggles normal capitalization of alphabetic characters
  caps:numlock         Make CapsLock an additional NumLock
  caps:swapescape      Swap ESC and CapsLock
  caps:escape          Make CapsLock an additional ESC
  caps:backspace       Make CapsLock an additional Backspace
  caps:super           Make CapsLock an additional Super
  caps:hyper           Make CapsLock an additional Hyper
  caps:shiftlock       CapsLock toggles Shift so all keys are affected
  caps:none            CapsLock is disabled
  compose:caps         CapsLock
  shift:breaks_caps    Shift cancels CapsLock
  shift:both_capslock  Both Shift-Keys together toggle CapsLock
  shift:both_capslock_cancel Both Shift-Keys together activate CapsLock, one Shift-Key deactivates

Referencias

slm
fuente
55
Si accidentalmente ejecuta el comando con su mayúsculas activado, puede restablecer xkbmap ejecutando setxkbmap -option "".
Nemo
Aparece en xev, pero realmente no funciona en el motor Valve Source 2.
Velkan
1

Si no desea que la Caps Lockclave tenga su efecto habitual, puede desactivar el Lockmodificador, mientras conserva el Caps_Lockkeyym.

xmodmap -e 'clear Lock'
Gilles 'SO- deja de ser malvado'
fuente
Eso no parece deshabilitar el bloqueo de mayúsculas.
Chris2048
@ Chris2048 Works For Me ™. Puede ser incompatible con algunas configuraciones de XKB o con algunas aplicaciones (las aplicaciones realizan su propio procesamiento de bloqueo de mayúsculas, la mayoría de ellas usan las mismas funciones de biblioteca pero hay excepciones).
Gilles 'SO- deja de ser malvado'
0

Esto es muy similar a la respuesta que di para otra pregunta . Este fragmento de código xkb debería hacer el truco.

partial modifier_keys
xkb_symbols "capsoff" {
    key <CAPS> {
        type[Group1] = "ONE_LEVEL",
        symbols[Group1] = [ Caps_Lock ],
        actions[Group1] = [ NoAction() ]
    };
};
billyjmc
fuente
¿A dónde debería ir esto? He estado mirando este tipo de fragmentos durante 10 minutos sin darme cuenta. ¿Tiene que ser parte de un archivo más completo o puede ser independiente y aplicarse a la configuración predeterminada?
Nikana Reklawyks