CapsLock come tasto modificatore per le keymap dell'applicazione


11

Sono uno sviluppatore e attualmente sto usando Ubuntu Linux con PyCharm IDE per lo sviluppo del sito web. Per migliorare le prestazioni di battitura, considero cambiare CapsLock in Hyper_L e assegnarlo a mod3 usando xmodmap. Dopo questo voglio mappare mod3 per il tasto 'i' su 'Su'. Finora quello che ho fatto è:

xmodmap -e "keysym Caps_Lock = Hyper_L"

l'output è così:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Hyper_L (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

quindi rimuovo Hyper_L da mod4

xmodmap -e "remove Mod4 = Hyper_L"

Successivamente ho provato ad assegnare Hyper_L a mod3

xmodmap -e "add Mod3 = Hyper_L"

Tuttavia ho ricevuto l'errore come segue:

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  11
  Current serial number in output stream:  11

Quindi, qual era il problema qui? Come posso farlo funzionare? Il mio approccio è giusto? O dovrei usare un approccio diverso per usare mod3 per chiavi personalizzate?

PS Sto usando la tastiera Microsoft Natural Ergonomic 7000

Risposte:


20

Ci sono un bajillion di risposte su Internet, la maggior parte confuse.

La chiave è che devi mappare 'keycode 66' sulla tua iper-chiave, rimuovere la mappatura di quella chiave dalle altre mod {1,2,4,5} (solo se presenti), e quindi impostare mod3.

Apri ~ / .Xmodmap e inserisci quanto segue:

! Unmap capslock
clear Lock
keycode 66 = Hyper_L

! Leave mod4 as windows key _only_
remove mod4 = Hyper_L

! Set mod3 to capslock
add mod3 = Hyper_L

Esegui questo

xmodmap ~/.Xmodmap

Se qualcosa va storto, puoi ripristinare la tastiera con:

setxkbmap -layout us

Probabili cause di qualcosa che esplode sono che Hyper_L è mappato da qualche altra parte. Risolvilo eseguendo xmodmap senza arg per capire cos'altro è legato a Hyper_L. Quando sai cosa devi rimuovere, aggiungi un 'remove BINDING = Hyper_L' nel tuo file .Xmodmap.

Il file .Xmodmap verrà caricato quando apri le sessioni X11, dovresti avere questa mappatura in atto al prossimo accesso o riavvio.

Questa configurazione funziona per la mia installazione di Ubuntu 14.04. Se hai un * nix diverso e questo non funziona, ti preghiamo di pubblicare ciò che hai fatto per aggirarlo qui e lo incorporerò nella risposta.


@antindexer ha funzionato per te?
heymatthew,

Ho provato molte risposte, e questa è quella che ha funzionato per me. Almeno, lo ha fatto su un'installazione Linux bare metal. Stranamente, fallisce in QEMU / KVM, lavorando solo su pressioni alternate del tasto BLOC MAIUSC.
Diagon,

0

So che questa domanda è piuttosto vecchia, ma devo condividere la mia soluzione, poiché (frustrantemente) la risposta di Heymantthew non ha funzionato per me. Cosa ha funzionato per me:

setxkbmap -layout us -option lv3:caps_switch -variant intl

Questo abilita il maiuscolo come tasto mod3, imposta il layout su "us" e imposta la variante su "intl". Se usi una shell interattiva come il pesce, puoi premere tab dopo "-outout", "-option" o "-variant" per ottenere un elenco completo di possibili parametri.

Ulteriori informazioni: ho provato l'approccio xmodmap un anno fa su una macchina Ubuntu con i3 window manager, passando dall'ambiente gnome standard. Avevo modificato il layout della tastiera "us" xkb, in particolare quello internazionale con i tasti morti - funzionava bene quando usavo gnome-desktop-manager (c'è un'opzione per impostare il blocco maiuscole come il tasto mod3), ma non ho potuto farlo funzionare con xmodmap. Questo è stato il mio errore: ho pensato che la GUI di gdm stesse usando xmodmap per mappare il blocco maiuscole su mod3, ma in realtà stava impostando questa opzione X11. Ora che sono passato ad Arch sono stato costretto a capirlo.

Consiglio a chiunque abbia intenzione di scherzare con questo per leggere le pagine man su localectl, xmodmap, setxkbmap e layout di test aggiungendo una parte sleep e ripristina:

setxkbmap ... ; sleep 10; setxkbmap <INSERT DEFAULT SETTINGS>

questo mi ha fatto risparmiare un bel po 'di tempo.

Non capisco ancora come l'approccio xmodmap non funzioni, tuttavia. Spero che questo aiuti qualcuno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.