Rimappare il Blocco maiuscole per controllare ed uscire (non nel solito modo)


28

So usare xmodmap per rimappare il tasto BLOC MAIUSC in modo che funga da tasto Control o tasto Esc. Vorrei combinare entrambe le funzionalità come segue:

Quando premo, quindi rilascio, il tasto BLOC MAIUSC, invia Esc. Quando tengo premuto Blocco maiuscole e premo un altro tasto (ad esempio A), invia Control-A.

Esiste una combinazione di xkb, xmodmap e qualcos'altro che potrebbe far sì che il blocco maiuscole si comporti in questo modo in X?

Sto usando Ubuntu Precise su un Macbook Air 3,1.

Risposte:


-2

Puoi fare il primo (mappando Caps Locka Esc) ma non puoi fare il secondo.

Spiegazione semplice: Caps Lock non è progettato per fare qualcosa quando viene premuto.

Spiegazione elaborata: esistono molti tipi di chiavi. Due di questi sono i tasti modificatori e i tasti di blocco .

Caps Lockè una chiave di blocco mentre i tasti, come Ctrl, Alte Shiftsono Tasti modificatori .

Dai loro nomi risulta evidente che i tasti modificatori modificano la funzione dei tasti successivi e che i tasti di blocco fungono da interruttore per attivare o disattivare alcune funzioni particolari.

Ora, poiché Caps Lock è un tasto di blocco , non è possibile farlo comportare come un tasto modificatore senza mapparlo su uno. Caps Lockda solo non può funzionare come un tasto modificatore .


Grazie per aver confermato che X non è progettato per fare ciò che voglio. Se un guru X vuole hackerare qualcosa per farlo funzionare, ti preghiamo di contattarci.
user372737

4
Come risposta non accettata di seguito, puoi certamente fare la seconda parte con numerose utility come xcape o At-Home-Modifier.
Sparhawk,

35

Ho questa configurazione sul mio Mac e ho provato a trovare un modo per Ubuntu senza fortuna.

Bene, ora funziona. Grazie mille per avermi invitato a xcape . Quello che ho fatto è davvero semplice e diretto.

  1. In Preferenze di Sistema> Layout tastiera> Opzioni ...> Posizione tasto Ctrl, ho selezionato "Bloc Maiusc come Ctrl".

  2. xcape -e 'Control_L = Escape'

Fatto, Caps Lock funziona come Ctrl quando usato come un modificatore e come Esc se premuto da solo (c'è un leggero ritardo di alcune centinaia di millisecondi, come notato nel file README di xcape, quindi non è ancora ottimale come la soluzione Mac che utilizza KeyRemap4MacBook.)


4
Ho usato gnome-tweak-toolper mappare Caps Locka Ctrlquanto non v'è Keyboard layoutin System Settingssu Ubuntu 14.04. Poi xcape -e 'Control_L=Escape'non ha funzionato, ma dopo aver usato xcape -dho scoperto che Caps Lockgenera codice tasto 66 e rimappato è rispettivamente: xcape -e '#66=Escape'.
Sergiy Belozorov,

3
Come da questo post del blog , è possibile farlo 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

Questa avrebbe davvero dovuto essere la risposta accettata @ user372737
Assaf Lavie il

@LouisSimoneau questo mille volte.
Spencer Boucher,

1
Qualche progresso con il problema del ritardo?
Toothrot,

6

Sto cercando anche questo. Fino a una settimana fa ho trovato una soluzione parziale usando xmodmap:

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

Questo ovviamente non funziona perfettamente, in effetti invia sia Escape che Ctrl contemporaneamente quando premo CapsLock, ma per un po 'ne sono rimasto contento.

Alla fine ho trovato questa piccola utility https://github.com/alols/xcape . Quindi ora posso semplicemente rimappare CapsLock su Ctrl e lasciare che xcape faccia il suo lavoro.


Un'altra opzione è Modificatore di casa. Non è in sviluppo attivo e differisce leggermente da xcape installandolo alla radice. Tuttavia, si innesca attraverso xorg.conf, e quindi può agire solo su tastiere specifiche, usando contemporaneamente altre tastiere.
Sparhawk,

4

EDIT: risolto questo problema per i gestori di display più intelligenti (più recenti).

I commenti di Per Louis e Sergiy ho trovato questa soluzione che funziona per me su Ubuntu 16.04 (Xenial) con LightDM e Unity.

Ho inserito la seguente riga di codice nel mio .xprofilefile nella mia home directory.

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

Il trailing & mette il comando xcape in background in modo che non blocchi la sessione. Setxkbmap apporta immediatamente le modifiche.

Sergiy:

Ho usato gnome-tweak-tool per mappare Caps Lock su Ctrl poiché non c'è layout di tastiera in Impostazioni di sistema su Ubuntu 14.04. Quindi xcape -e 'Control_L = Escape' non ha funzionato, ma dopo aver usato xcape -d ho scoperto che Caps Lock genera il keycode 66 e lo ha rimappato rispettivamente: xcape -e '# 66 = Escape'. - Sergiy Byelozyorov, 4 settembre 14 alle 10:08

Louis:

Come da questo post del blog, è possibile farlo 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 agosto 15 alle 10:06


3

Installare xcape

sudo apt-get install xcape

Aggiungi le due righe nel tuo ~/.bashrc

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

Nota la parte -t 100, se non la imposti, potresti notare un ritardo in Esc se usi vim.


sudo apt-get install xcape(errore di battitura)
David Shaked

1

Ho creato uno strumento in C appositamente per questo scopo che risolve molti problemi con la soluzione xcape / xmodmap :


Esiste un modo per disattivare lo "scambio" di Esc in Caps, preferisco non avere affatto un Caps e mantenere sia la vecchia che la nuova Esc come Fuga.
dragon788,


Grazie, dovrò mettere un link per compilare automaticamente questo nei miei dotfile. Potrei anche PR il README.md come su Ubuntu 16.04 che richiedeva libudev-dev e libevdev-dev per compilare.
dragon788,

@ dragon788 vieni ad Arch (potresti persino provare Antergos). Mi sono trasferito da Ubuntu anni fa e non ci tornerò mai più, è semplicemente meglio.
pepper_chico,
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.