GNU/Linux >> Linux Esercitazione >  >> Linux

Linux – Tasti di rimappatura hard della tastiera?

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/... o
input-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.)

Correlati:Linux:il numero maggiore TTY del tuo Unix?

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.


Linux
  1. 8 suggerimenti per la riga di comando di Linux

  2. Avere una mucca sulla riga di comando di Linux

  3. Entra nella riga di comando di Linux

  4. Backup dell'intero disco rigido Linux?

  5. Rimappa i tasti Win, Ctrl e Alt su Linux

Come avviare la riga di comando di Linux

Padroneggia la riga di comando di Linux

Nozioni di base sulla riga di comando di Linux:sudo

Rimappa i tasti della tastiera personalizzati in Linux - Tutorial

Linux:scorciatoia per ridurre al minimo tutte le finestre?

Cedilla sotto C (ç) nel layout di tastiera "US internazionale con tasti morti" in Linux