GNU/Linux >> Znalost Linux >  >> Linux

Linux – Hard Remap Keys?

Snažím se najít způsob, jak násilně přemapovat klávesy klávesnice.
Zkoušel jsem použít xmodmap a setxkbmap, ale nefungují pro jednu konkrétní aplikaci. Takové příkazy fungují pro ostatní normální okna/aplikace na X tho.

Myslím, že aplikace možná čte nezpracovaná data klávesnice a ignoruje vstup X?

Jak tedy přemapovat klíče bez použití xmodmap a setxkbmap? pokud je to vůbec možné provést pomocí nějakého softwaru.

Zkoušel jsem také xkeycaps, xkbcomp, ale nezkoušel jsem loadkeys, protože běží na X.

Zde jsem našel, že bych mohl zkusit setkeycodes , „protože po přiřazení kernel keycode by tlačítko mělo fungovat v xorg“, ale také jsem zjistil, že „nemůžete použít 'setkeycodes' na USB klávesnici“, to je můj případ (zajímá mě, jestli to někdo zprovozní na ps2 jako Myslím, že bych mohl použít adaptér).

Zdálo se to slibné „Map scancodes to keycodes“, ale po několika testech se nic nezměnilo, tady jsou:
Našel jsem keycode „36“ („j“ key) na vt1 s showkey
Našel jsem scancode „7e“ (klávesnice „.“) na vt1 s 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..

Pozor:nefungovalo ani s:KEYBOARD_KEY_7e=j

Některé další alternativní způsoby (od @vinc17) k nalezení klíčů:
evtest /dev/input/by-id/... nebo
input-kbd 3 (uveďte nalezený id index na ls -l /dev/input/by-id/* od ex. událost3)

PS.:*Pokud máte zájem o testování, související vlákno pro aplikaci je toto:http://forums.thedarkmod.com/topic/14266-keyboard-issue-in-new-version-108/ The issues I mají stejné:některé klíče (KP_Decimal, DownArrow, UpArrow, RightArrow) jsou ignorovány a všechny jsou považovány za stejnou hodnotu „0x00“

Přijatá odpověď:

Nejprve najděte skenovací kód klíče, který je třeba přemapovat, např. pomocí evtest užitečnost. Řádek podobný následujícímu (s MSC_SCAN v něm) by měl být výstup:

Event: time 1417131619.686259, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70068

následuje druhý s aktuálním kódem klíče. Pokud není MSC_SCAN linka je na výstupu, je to kvůli chybě ovladače jádra, ale skenovací kód lze stále najít pomocí input-kbd užitečnost; evtest měl zadat kód klíče, takže by mělo být snadné najít odpovídající řádek v input-kbd výstup (např. pomocí grep ).

Jakmile určíte skenovací kódy klíčů, které mají být přemapovány, vytvořte soubor, například /etc/udev/hwdb.d/98-custom-keyboard.hwdb obsahující přemapování. Začátek souboru /lib/udev/hwdb.d/60-keyboard.hwdb dává nějaké informace. V mém případě (který funguje) mám:

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

(Před udev 220 jsem musel používat keyboard:usb:v05ACp0221* pro první řádek.)

Související:Linux – hlavní číslo TTY vašeho Unixu?

evdev: řetězec musí být na začátku řádku.
Všimněte si, že písmena v ID dodavatele a produktu by měla být velká písmena.
Každý KEYBOARD_KEY_ nastavení by mělo mít přesně jednu mezeru (poznámka:řádek bez mezer zobrazí chybovou zprávu a řádek se dvěma mezerami byl tiše ignorováno se starými verzemi udev). KEYBOARD_KEY_ za ním následuje skenovací kód v šestnáctkové soustavě (jako evtest a input-kbd dát). Platné hodnoty lze získat buď z evtest výstup nebo input-kbd výstup, nebo dokonce z /usr/include/linux/input.h soubor:například KEY_102ND by dalo 102nd (odstraněním KEY_ a převod na malá písmena), který jsem použil výše.

Po uložení souboru zadejte:

udevadm hwdb --update

k (znovu)sestavení databáze /etc/udev/hwdb.bin (můžete zkontrolovat jeho časové razítko). Potom,

udevadm trigger --sysname-match="event*"

zohlední nová nastavení. Můžete to zkontrolovat pomocí evtest .

V roce 2014 měl vydaný udev neúplné/chybné informace v /lib/udev/hwdb.d/60-keyboard.hwdb , ale můžete se podívat na nejnovější vývojovou verzi souboru a/nebo moji zprávu o chybě a diskuzi týkající se dokumentace a problémů s mezerami.

Pokud to nefunguje, problém může být nalezen po dočasném zvýšení úrovně protokolu udevd s udevadm control (podrobnosti viz manuálová stránka udevadm(8).).

Pro staré udev verze jako 204 by tato metoda měla stále fungovat.


Linux
  1. 8 tipů pro příkazový řádek Linuxu

  2. Mít krávu na příkazovém řádku Linuxu

  3. Přihlaste se do příkazového řádku Linuxu

  1. Linux – režim Raw klávesnice?

  2. Zálohovat celý pevný disk Linux?

  3. Přemapujte klávesy Win, Ctrl a Alt na Linuxu

  1. Jak vyměnit pevný disk v systému Linux

  2. Jak odstranit řádek ve Vim na Linuxu

  3. Jak přemapovat klíče pod Linuxem pouze pro konkrétní klávesnici