Rimappatura delle chiavi che generano più codici di scansione


33

Ho un ThinkPad W540. Sulla sua tastiera ci sono quattro tasti multimediali sopra il tastierino numerico. Due di queste chiavi generano codici chiave (e, apparentemente, scancodes) che corrispondono alla combinazione di chiavi, Win_L+ Le Win_L+ E. In altre parole, per la chiave che genera Win_L+ L,
showkey --scancodesrestituisce questo:

0xe0 0x5b 0x26 0xa6 0xe0 0xdb

Il setkeycodescomando richiede sequenze a due byte a singolo byte senza escape o con escape per indicare i codici di scansione e showkeymi dà molto di più, quindi non posso mappare completamente quella chiave su uno dei codici chiave liberi nel mio sistema con un semplice setkeycodes <scancode> <keycode>.

Gradirei davvero qualsiasi suggerimento su come posso rimappare quel tasto a qualcos'altro che non duplica semplicemente una delle combinazioni di tasti esistenti sulla mia tastiera.



1
Penso che questo possa essere complicato: almeno sui Thinkpad più vecchi, questo tipo di mappatura viene eseguita dal controller di bordo, non dal sistema operativo.
mirabilos,

1
Ho una tastiera multimediale Microsoft All-in-One che presenta lo stesso problema, sei riuscito a trovare una soluzione?
osolmaz,

5
Qualche tempo fa ho fatto qualcosa di simile su un Thinkpad t61 mappando i tasti usando /etc/acpi/events quale si trova nel acpidpacchetto e definendo semplicemente un'azione quando quei tasti funzione venivano premuti.
Cesare,

2
Hai installato Win_L come modificatore in X-windows? È predefinito per me.
sig.

Risposte:


1

Puoi farlo in due passaggi:

  1. per catturare combinazioni di tasti
  2. per simulare la digitazione di diversi tasti.

Puoi usare xchainkeysper 1. e [xdotool][2]per 2 .:

Per creare la nuova chiave simulata con xdotool, l'opzione --clearmodifiersdi keypuò essere importante per neutralizzare la pressione del modificatore simulato originale:

xdotool key --clearmodifiers Shift+a

Questo dovrebbe digitare un capitale Acome test.

Nella configurazione di xchainkeysin ~/.config/xchainkeys/xchainkeys.conf, possiamo associare il comando a una combinazione di tasti:

W-l :exec xdotool key --clearmodifiers Shift+a

Ora, la combinazione di tasti Wine l( Winsinistra o destra fanno lo stesso), così come la chiave che genera Win_L + L, dovrebbe creare un capitale A.

(Esistono molti altri programmi disponibili per entrambe le parti. Per la prima, si potrebbe usare la configurazione dei tasti di scelta rapida di un ambiente desktop, ma preferisco tenerlo indipendente dai DE.)


2
Il problema con questa soluzione, se non sbaglio, sarebbe lo stesso del semplice utilizzo di detta combinazione di tasti per attivare un'azione - quell'azione non sarebbe innescata da quel solo tasto, premendo la combinazione effettiva di tasti che genera lo stesso i codici darebbero anche lo stesso risultato. In altre parole, non soddisfa la condizione "rimappa quella chiave a qualcos'altro che non duplica semplicemente una delle combinazioni di chiavi esistenti". Ma apprezzo lo sforzo.
moonwalker,

3
Sì, è vero - non ero sicuro di cosa intendevi con quella frase, ora capisco. Ma sembra che la tua chiave produca i due codici chiave nell'hardware (vale a dire, nel firmware delle tastiere) - quindi non vedo alcuna guerra in giro, tranne che rilevi i tempi del tasto artificiale che preme "modificatore", "altro tasto", "modificatore attivo". Hmm ... forse una soluzione che coinvolge la saldatura è più semplice;)
Volker Siegel il

1
@moonwalker Puoi provare a rimappare Win_L invece dell'altra chiave e verificare se rimappa anche il modificatore dell'altro?
Volker Siegel,

1
um, non perderei combinazioni come Win_L + R, Win + Break, Win + L, Win + etc. in quel caso?
moonwalker,

1
No, non la penso così. Win-L è Win-Shift-lMa puoi anche mappare catene di combinazioni di tasti a un comando. Come Win-ae dopo b. Senza il Win-a, bsi comporta normalmente. Questa è di gran lunga la caratteristica più utile xchainkeyse piuttosto unica, credo.
Volker Siegel,

-2

Questo è quello che ho fatto sul mio Thinkpad Yoga per ricollegare la chiave barra rovesciata / pipe alla chiave corretta. Perché per qualche motivo in ogni macchina virtuale Linux ha interpretato la chiave barra rovesciata \ pipe (\ |) come chiave minore di (<).

Innanzitutto esegui il comando: xev

Premere il tasto desiderato per ottenere il codice tasto per il tasto che si desidera ricollegare:

xev Uscita evento KeyPress

In questo esempio il codice chiave è 94 e l'azione è "meno", ma vogliamo che abbia l'azione di barra rovesciata e barra aka "pipe"

Rimappa il codice chiave 94 sulla barra rovesciata e sul tasto bar aka "pipe":

xmodmap -e 'keycode 94 = backslash bar'

Ora rendiamolo persistente:

xmodmap -pke | egrep "backslash|bar" | grep 94 > ~/.Xmodmap`

Restituisce quanto segue al file ~/.Xmodmap:

keycode  94 = backslash bar backslash bar

Quindi è necessario creare il seguente file per finire di renderlo persistente:

echo "xmodmap .Xmodmap" > ~/.xinitrc

1
La chiave barra rovesciata / pipe genera un singolo codice di scansione, l'argomento riguarda la rimappatura delle chiavi che generano più codici di scansione.
moonwalker,
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.