Scambiando <esc> e <maiuscole> in un modo che persiste con tastiere esterne


8

Ho un file chiamato ~ / .speedswapper che contiene quanto segue:

! Swap caps lock and escape
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

... quando corro xmodmap ~/.speedswapper, cambia i tasti esce Caps Lock. Ho questa riga nel mio ~ / .profile, in modo che ogni volta che accedo queste chiavi vengano commutate.

Tuttavia , se collego una tastiera USB esterna, questa impostazione non sembra persistere. La tastiera del mio laptop funziona perfettamente, ma devo eseguire nuovamente il comando affinché la tastiera esterna cambi i due tasti. Fortunatamente, farlo non sembra influenzare la tastiera del mio laptop: sembrano sincronizzarsi.

Una soluzione sarebbe quella di trovare un modo per eseguire quel comando xmodmap ogni volta che viene collegata una tastiera esterna, ma sarei aperto a un'altra soluzione di scambio di tasti, se fosse più robusta. Il sistema operativo è Ubuntu 13.04.

Dato il commento di justbrowsing, sembra che questo possa essere ottenuto scrivendo una regola udev: penso che dovrei usare l'opzione RUN e che dovrebbe essere attivato su / dev / hidraw0 o / dev / hidraw1, che sono i dispositivi che appare quando collego la tastiera ... ma sto ancora cercando di avvolgere la testa attorno al concetto, quindi apprezzerei l'aiuto di qualcuno che sa cosa sta facendo con udev.


Cerca di scrivere regole udev per questo.
sopraggiunge il

Risposte:


3

Dato che hai questo comando nel tuo ~/.profile, verrà eseguito solo una volta, quando effettui il login. Una soluzione, non molto elegante, sarebbe quella di inserire il comando nel tuo, ~/.bashrccosì verrà eseguito ogni volta che apri un terminale.

Una soluzione migliore sarebbe quella di definire una udevregola che verrà eseguita xmodmapquando viene inserita la tastiera USB (sto usando i valori restituiti per la mia tastiera USB, sarà necessario modificare questa soluzione per adattarla alla propria):

  1. Ottieni i dettagli della tua tastiera USB. Esegui questo comando con la tastiera inserita:

    $ /lib/udev/findkeyboards | grep USB
    USB keyboard: input/event6
    
  2. Per scrivere le udevregole, devi sapere a cosa dovrebbero corrispondere. Puoi ottenerlo cercando l'output di udevadm info --export-dbper la event6voce o analizzandolo direttamente in questo modo:

    udevadm info --export-db | perl -ne 'BEGIN{$/="\n\n"}print if /event6/'
    

    Ciò restituisce diverse righe di testo, comprese quelle che useremo:

    E: ID_MODEL_ID=0002
    [...]
    E: ID_VENDOR_ID=1c4f
    
  3. udevdiventa complicato quando si usano programmi X come xmodmap, non riuscivo nemmeno a farlo funzionare durante l'esportazione $DISPLAYe $XAUTHORITY. Comunque, non sono riuscito a farlo funzionare con il tuo metodo, quindi la mia soluzione usa keymapinvece. Innanzitutto, dovrai scoprire i codici chiave per Esce Caps Lock, puoi farlo eseguendo

    sudo /lib/udev/keymap -i input/event6
    

    e quindi premendo i tasti pertinenti. Sul mio sistema, questo restituisce:

    scan code: 0x70029   key code: esc
    scan code: 0x70039   key code: capslock
    
  4. Crea una nuova regola keymap contenente queste righe:

    0x70029 capslock
    0x70039 esc
    

    e salvalo come /lib/udev/keymaps/speedswap.

  5. Definire una nuova udevregola. Crea un file chiamato /etc/udev/rules.d/95-speedswap.rulese aggiungi queste righe:

    ACTION=="add", 
    SUBSYSTEM=="input", 
    ATTRS{idVendor}=="1c4f", 
    ATTRS{idProduct}=="0002", 
    RUN+="keymap $name speedswap"
    

Questo dovrebbe farlo, almeno sul mio sistema, collegare la mia USB esterna fa sì Escche si comporti come Caps Locke viceversa .


Sembra buono e lo proverò domani o dopodomani. Speravo in un modo agnostico di tastiera per farlo, ma è più una cosa 'sarebbe ordinata' che una vera necessità .
evilsoup,

@evilsoup dovresti essere in grado di creare una regola più generale, provare udevadm info --export-dbcon alcune tastiere e vedere il cappello che hanno in comune. Forse ID_MODEL=USB_Keykoardo ID_USB_DRIVER=usbhidma ciò potrebbe anche innescare la regola con il dispositivo sbagliato. Sta a te.
terdon
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.