Comment empêcher l'effet de basculement du verrouillage des majuscules, sans le remapper ou le désactiver?

22

J'ai un programme X11 qui saisit le verrouillage des majuscules et l'utilise. Le problème est que je souhaite désactiver le basculement du verrouillage des majuscules, mais cela semble désactiver la clé.

Donc, quel que soit le X11 obtenu pour une touche de verrouillage des majuscules, il doit toujours l'obtenir (pas de désactivation de la clé, ni de remappage sur une autre clé), mais sans rien traduire la pression de touche en bascule (ce qui pourrait être au niveau du noyau? ).

J'ai essayé de changer le scancode, mais cela a juste remappé la clé. J'ai également supprimé l'entrée capslock xmodmap, mais cela a également désactivé les majuscules.

Comment puis-je dire au noyau d'ignorer la touche majuscule (par rapport à sa fonctionnalité habituelle), tout en transmettant le message à X?

Juste pour ajouter un peu plus de détails:

Le «programme» que j'essaie de lancer est «enso» humanisé. Quand il n'y a pas de clé, j'obtiens l'erreur "CRITICAL: root: Impossible de trouver la clé quasimode". Lorsqu'il n'y a pas d'erreur, je peux utiliser enso avec des majuscules, mais sofar n'a pas compris comment désactiver la fonctionnalité des majuscules alors qu'enso est toujours en mesure d'y accéder.

Chris2048
la source
Veuillez fournir des détails sur ce que vous avez essayé, à savoir les expressions xmodmap exactes. Sans détails, nous ne pouvons pas dire si vous saviez quoi faire et si vous avez mal agi, ou si vous l'avez fait correctement, mais le code a échoué pour une autre raison. Donnez-nous également le système d'exploitation que vous utilisez, car certains ont un traitement par code clé qui se produit sous le niveau du serveur X.
Kyle Jones
@Kyle J'ai essayé de "supprimer Lock = Caps_Lock", puis "keycode 66 =" (qui a été mappé sur CapsLock). J'utilise Ubuntu 12.10 sur une machine 64 bits.
Chris2048
Une autre possibilité consiste à remapper vers une autre clé. setxkbmap -option ctrl:nocapsremappe Control_L, par exemple.
Chris Down
Dites-vous que vous seriez d'accord si nous pouvions vous donner un moyen de remapper le verrouillage des majuscules pour dire la clé de contrôle ou n'est-ce pas ce que vous recherchez? Dans l'état actuel des choses, cette question est un peu déroutante, cela irait vraiment loin si vous ajoutiez des détails à la question de ce que vous avez essayé jusqu'à présent.
slm
Juste pour que nous soyons clairs aussi, il y a une fonctionnalité dans Ubuntu 12.10 où vous pouvez faire du verrouillage des majuscules une touche de contrôle supplémentaire. Est-ce à cela que vous pensez lorsque vous dites "remappage"? Voici une capture d'écran de la boîte de dialogue: flickr.com/photos/11708996@N00/3010939023
slm

Réponses:

28

Je pense que j'ai une technique pour désactiver le basculement de la Capslocktouche, mais pas complètement pour désactiver la clé ensemble, ou pour la remapper sur une autre touche du clavier.

Si vous utilisez la commande:

setxkbmap -option caps:none

Le clavier ne basculera plus. J'ai confirmé cela sur mon ordinateur portable exécutant Fedora 14, la LED ne s'allume plus et la Capslockfonctionnalité normale a disparu.

Cependant, l'utilisation de xev montre toujours que la touche est enfoncée:

$ 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
    ...

Ainsi, les événements sur lesquels vous appuyez sur la touche restent intacts pour que d'autres applications puissent les récupérer.

setxkbmap

Le fichier /usr/share/X11/xkb/rules/xorg.lstcontient la liste complète des options que vous pouvez donner setxkbmap.

En parcourant ce fichier pour "cap", j'ai remarqué cette ligne:

caps:none            CapsLock is disabled

Il y a d'autres valeurs dans ce fichier, donc si ce n'est pas ce que vous recherchez, peut-être qu'une de ces valeurs alternatives conviendrait.

$ 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

Les références

slm
la source
5
Si vous exécutez accidentellement la commande avec votre capslock activé, vous pouvez réinitialiser xkbmap en exécutant setxkbmap -option "".
Nemo
Il apparaît dans xev, mais ne fonctionne pas vraiment dans le moteur Valve Source 2.
Velkan
1

Si vous ne voulez pas que la Caps Locktouche ait son effet habituel, vous pouvez désactiver le Lockmodificateur, tout en conservant le Caps_Locksymbole de touche.

xmodmap -e 'clear Lock'
Gilles 'SO- arrête d'être méchant'
la source
Cela ne semble pas désactiver le verrouillage des majuscules.
Chris2048
@ Chris2048 Works For Me ™. Il peut être incompatible avec certains paramètres XKB ou avec certaines applications (les applications font leur propre traitement de verrouillage des majuscules, la plupart d'entre elles utilisent les mêmes fonctions de bibliothèque mais il y a des exceptions).
Gilles 'SO- arrête d'être méchant'
0

Ceci est très similaire à la réponse que j'ai donnée pour une autre question . Cet extrait de code xkb devrait faire l'affaire.

partial modifier_keys
xkb_symbols "capsoff" {
    key <CAPS> {
        type[Group1] = "ONE_LEVEL",
        symbols[Group1] = [ Caps_Lock ],
        actions[Group1] = [ NoAction() ]
    };
};
billyjmc
la source
où cela devrait-il aller? Je regarde ce genre d'extraits depuis 10 minutes sans le comprendre. Doit-il faire partie d'un fichier plus complet ou peut-il être autonome et s'appliquer à la configuration par défaut?
Nikana Reklawyks