Sto cercando di trovare un modo per rimappare i tasti della tastiera con forza.
Ho provato a usare xmodmap e setxkbmap, ma non funzionano per un'applicazione specifica. Tali comandi funzionano per altre normali applicazioni/finestre su Xtho.
Penso che l'applicazione possa leggere i dati grezzi della tastiera e ignorare l'input X?
Quindi, come rimappare le chiavi senza usare xmodmap e setxkbmap? se mai è possibile farlo utilizzando qualche software.
Ho anche provato xkeycaps, xkbcomp, ma non ho provato loadkeys, poiché è in esecuzione su X.
Ho scoperto qui che potevo provare setkeycodes
, "perché dopo aver assegnato il codice chiave del kernel il pulsante dovrebbe funzionare in xorg", ma ho anche scoperto che "non puoi usare 'setkeycodes' sulle tastiere USB", questo è il mio caso (sono interessato nel caso qualcuno lo faccia funzionare su ps2 come Penso che potrei usare un adattatore).
Sembrava promettente "Mappa scancode ai codici chiave", ma dopo alcuni test non è cambiato nulla, eccoli:
Ho trovato il codice chiave "36" (chiave "j") su vt1 con showkey
Ho trovato lo scancode “7e” (tastiera “.”) su vt1 con showkey --scancodes
$cat >/etc/udev/hwdb.d/90-custom-keyboard.hwdb
keyboard:usb:v*p*
keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
KEYBOARD_KEY_7e=36
$udevadm hwdb --update #updates file: /lib/udev/hwdb.bin
$udevadm trigger #should apply the changes but nothing happened
$cat /lib/udev/hwdb.bin |egrep "KEYBOARD_KEY_7e.{10}" -ao
KEYBOARD_KEY_7eleftmeta
$#that cat on hwdb.bin did not change after the commands..
Oss.:non funzionava neanche con:KEYBOARD_KEY_7e=j
Altri modi alternativi (di @vinc17) per trovare le chiavi:evtest /dev/input/by-id/...
oinput-kbd 3
(inserisci l'indice id trovato in ls -l /dev/input/by-id/*
da es. evento3)
PS.:*Se sei interessato a testare te stesso, il thread relativo all'applicazione è questo:http://forums.thedarkmod.com/topic/14266-keyboard-issue-in-new-version-108/ I problemi I sono uguali:alcune chiavi (KP_Decimal, DownArrow, UpArrow, RightArrow) vengono ignorate e considerate tutte con lo stesso valore lì “0x00”
Risposta accettata:
Per prima cosa trova lo scancode della chiave che deve essere rimappata, ad es. con il evtest
utilità. Una riga come la seguente (con MSC_SCAN
in esso) dovrebbe essere visualizzato:
Event: time 1417131619.686259, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70068
seguito da un secondo che fornisce il codice chiave corrente. Se nessun MSC_SCAN
viene emessa la riga, ciò è dovuto a un bug del driver del kernel, ma lo scancode può ancora essere trovato con input-kbd
utilità; evtest
dovrebbe aver fornito il codice della chiave, in modo che sia facile trovare la riga corrispondente in input-kbd
output (ad esempio utilizzando grep
).
Una volta determinati gli scancode delle chiavi da rimappare, creare un file come /etc/udev/hwdb.d/98-custom-keyboard.hwdb
contenente le rimappature. L'inizio del file /lib/udev/hwdb.d/60-keyboard.hwdb
fornisce alcune informazioni. Nel mio caso (che funziona), ho:
evdev:input:b0003v05ACp0221*
KEYBOARD_KEY_70035=102nd # Left to z: backslash bar
KEYBOARD_KEY_70064=grave # Left to 1: grave notsign
KEYBOARD_KEY_70068=insert # F13: Insert
(Prima di udev 220, dovevo usare keyboard:usb:v05ACp0221*
per la prima riga.)
Il evdev:
la stringa deve trovarsi all'inizio della riga.
Tieni presente che le lettere nell'ID fornitore e prodotto devono essere lettere maiuscole.
Ogni KEYBOARD_KEY_
le impostazioni dovrebbero avere esattamente uno spazio prima (nota:una riga senza spazi darà un messaggio di errore e una riga con due spazi era silenziata ignorato con le vecchie versioni di udev). KEYBOARD_KEY_
è seguito dallo scancode in esadecimale (come quello di entrambi evtest
e input-kbd
dare). I valori validi possono essere ottenuti da evtest
output o input-kbd
output, o anche da /usr/include/linux/input.h
file:ad esempio, KEY_102ND
darebbe 102nd
(rimuovendo KEY_
e la conversione in minuscolo), che ho usato sopra.
Dopo aver salvato il file, digita:
udevadm hwdb --update
per (ri)costruire il database /etc/udev/hwdb.bin
(puoi controllare il suo timestamp). Allora,
udevadm trigger --sysname-match="event*"
terrà conto delle nuove impostazioni. Puoi controllare con evtest
.
Nel 2014, l'udev rilasciato aveva informazioni incomplete/con errori in /lib/udev/hwdb.d/60-keyboard.hwdb
, ma puoi guardare l'ultima versione di sviluppo del file e/o la mia segnalazione di bug e la discussione relativa alla documentazione e ai problemi di spaziatura.
Se questo non funziona, il problema potrebbe essere riscontrato dopo aver temporaneamente aumentato il livello di registro di udevd
con udevadm control
(vedi la pagina man di udevadm(8) per i dettagli).
Per il vecchio udev
versioni come 204, questo metodo dovrebbe comunque funzionare.