it-swarm.dev

Jak přemapuji určité klíče nebo zařízení?

Hledám způsob, jak přemapovat určité klíče v ubuntu.

tj.

Chtěl bych se změnit PgUp na Home nebo PgDown na End.

Existuje vestavěný příkaz nebo nástroj pro přiřazení klíčů v Ubuntu/GNOME?

253
NES

Upozornění: Od roku 2013 již Ubuntu a deriváty nepoužívají xmodmap, ale místo toho používají xkb. Více informací viz tato odpověď . Odpověď níže již není pro aktuální vydání relevantní.


Pro přemapování určitých klíčů potřebujete dva nástroje. První xev (nástroj příkazového řádku) a druhý xmodmap (také nástroj příkazového řádku). Oba by měli být k dispozici v Ubuntu, aniž by je museli instalovat.

  1. Spusťte okno terminálu a spusťte xev. Nyní je aktivní a čeká, až stisknete klávesu. Poté stiskněte klávesu, jejíž chování chcete změnit. tj. PgUp.

  2. xev vydá některé informace o stisknuté klávese. Třetí řádek je důležitý. Mělo by to vypadat podobně jako:

    state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
    

    v tomto příkladu Prior je jméno chování, kterému je klíč v současné době přiřazen, číselný kód key je interní ID pro rozpoznání klíče. Nyní to udělejte pomocí jiného klíče, tzn. PgDown dát tento výstup

    state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
    

    Zde je opět zajímavou částí keycode 115 a Next - název chování.

  3. nyní, když chcete zaměnit tyto dvě klávesy, použijte xmodmap.

     xmodmap -e "keycode 110 = Next"
    

    Tím se změní klíč s klávesovým kódem 110 na klávesnici na akci Next. Je to docela jednoduché.

    Upozorňujeme, že pokud má klíč, který mapujete, jiný význam, pokud je použit s klávesou Shift klávesa (například pro rozložení britské klávesnice, Shift+2 dává uvozovky), pak můžete jednoduše uvést sekundární příkaz za prvním. Například pokud chcete, aby se klíč s kódem 53 mapoval zpětným lomítkem normálně, ale na symbol sloupce, když se používá s posunem, můžete:

     xmodmap -e "keycode 53 = backslash bar"
    

Další informace: Pořadí těchto mapování je KeyShift+Keymode_switch+Keymode_switch+Shift+KeyAltGr+KeyAltGr+Shift+Key. Pro přeskočení sloupce použijte NoSymbol. Navíc zde je úplný seznam všech klíčových klíčů.

Poznámka: Tyto změny jsou pouze pro aktivní relaci X a po restartu budou ztraceny. Pokud chcete změny uložit trvale, musíte po výše uvedených příkazech spustit následující příkazy:

xmodmap -pke >~/.Xmodmap

(vytvoří soubor s názvem .Xmodmap ve vašem domovském adresáři (~))

Pak musíte vytvořit soubor s názvem .xinitrc ve vašem domovském adresáři, kam zadáte příkaz xmodmap .Xmodmap v.

Nyní můžete upravit .Xmodmap a spusťte xmodmap .Xmodmap z konzoly pro okamžité zobrazení změn. Změny v .Xmodmap bude přetrvávat.

zdroj: buntu Foruns

Bonusové věci:

Pokud klávesa, kterou přemapujete, má odlišné chování v závislosti na stavu (jako například to, jak klávesy v numerické klávesnici závisí na NumLock), musíte jednoduše udělat xmodmap -pm získáte seznam modifikátorů a poté proveďte:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

Předpokládejme například, že chcete získat číslici namísto čárky na numerické klávesnici (užitečné pro většinu programátorů), ale chcete zachovat chování „odstranit“, když je NumLock vypnutý.

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2, protože xmodmap -pm nám říká, že mod2 je Num_Lock, ostatní názvy se získají stisknutím kláves v xev.

265
NES

Pokud se snažíte přesunout klávesu Shift, existuje několik dalších kroků:

 xmodmap -e "keycode 62 = Up" # Shift => Up
 xmodmap -e "keycode 111 = Shift_R" # Up => Shift
 xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
 xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
 xset r 62 # Make the new Up key autorepeat
 xset -r 111 # Prevent the new Shift key from autorepeating
20
cmcginty

Právě jsem měl promyšlené .. Myslím, že můžete myslet na něco úplně jiného „přemapováním“ .. ale nechám svou odpověď tak, jak je ... (Nevím, jak znovu přiřadit jeden klíč k chovat se jako další)

[~ # ~] aktualizace [~ # ~] : moje 'dodatečná myšlenka' byla potvrzena; (Odpověděl jsem na špatnou otázku:) ... viz odpověď komunity WES na komunitu NES (přijato výše).

Existují dva obecné způsoby přemapovat přetočte klíč.

  • místně do konkrétního programu
    (klíč lze použít pro různé věci v různých aplikacích/oknech)
  • globálně pro konkrétního uživatele
    (klíč má stejnou funkci ve všech oknech)

Pro metody „local to a program“ existuje někdy způsob, jak změnit keybindings nabízené samotnou aplikací ... např.

Firefox má doplněk s názvem keyconfig ... pro některé informace viz tento příspěvek MozillZine

Většina programů Ubuntu je založena na Gnome a existuje specifický nástroj pro úpravu keybinding pro jakoukoli položku nabídky těchto aplikací Gnome ... Jmenuje se Editable Menu Accelerator ... Je to velmi „citlivý“ nástroj, ale docela silný .. Můžete jej povolit spuštěním gconf-editor (přes Terminál nebo Alt + F2) ... přejděte na desktop - gnome - interface a vyberte can_change_accels .... Potom můžete změnit položky nabídky na virtuální, co se vám líbí (na program/okno) ... Navrhuji, abyste ji deaktivovali, jakmile uděláte, co potřebujete.

Jinak můžete nastavit globální klávesové zkratky. Používám program s názvem xbindkeysInstall xbindkeys a také je k dispozici možnost z hlavní nabídky - Předvolby, nazvaná Keyboard Shortcuts

Pokud používáte xbindkeys, musíte je přidat do „Startup Applications“ (Hlavní menu - Předvolby) ... Také (jak navrhl Stefano Palazzo) V odpovědi na tuto otázku jsem již dříve napsal podrobnější popis xbindkeys askubuntu stránka

16
Peter.O

Zde je návod, jak jsem se pokusil změnit mapování ENTER klíč k SHIFT klíč (a naopak):

$ uname -a

ZPRÁVY:

Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux

$ which xmodmap

ZPRÁVY:

/usr/bin/xmodmap

$ which xev

ZPRÁVY:

/usr/bin/xev

$ xev

(ignorovat dalších padesát řádků)

PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XmbLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
    state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
    state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

Důležitý je třetí řádek každého stisknutí klávesy:

FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".

state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".

ZPĚT NA MAPOVÁNÍ:

$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"

ULOŽIT VÝSLEDKY:

$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc

PŘIDAT

 xmodmap ~/.Xmodmap

$ Sudo reboot

Hlavním problémem bylo, že zrušení nefungovalo. ENTER klíč byl mapován na SHIFT_R klíč; ale SHIFT_R klíč nebyl mapován na ENTER klíč. Jdi zjistit.

11
Bill Davis

Chcete-li provádět globální remapy nezávisle na X, můžete místo toho použít console-setup (5).

V mém případě jsem chtěl přemapovat Caps Lock klíč k D, od mého D-key je rozbité :)

Nejprve jsem použil dumpkeys (1) k získání šablony pro mapování, v případě D-key, zajímavým bitem je mapování keycode 32 (na mé klávesnici); Všimněte si, že v grepovém vzoru jsou dvě mezery!

$ Sudo dumpkeys | grep "keycode  32" > tempfile
$ cat tempfile
keycode  32 = +d
    shift   keycode  32 = +D
    altgr   keycode  32 = +eth
    shift   altgr   keycode  32 = +ETH
    control keycode  32 = Control_d
    shift   control keycode  32 = Control_d
    altgr   control keycode  32 = Control_d
    shift   altgr   control keycode  32 = Control_d
(121 lines total...)

Chcete-li změnit mapu tak, aby se vztahovala na Caps Lock (kód klávesnice 58 na mé klávesnici)

sed 's/32/58/' -i tempfile

Teď to čte

keycode  58 = +d
    shift   keycode  58 = +D
    altgr   keycode  58 = +eth
(etc...)

Chcete-li přidat tuto remapu na výchozí mapu, musí být jednoduše připojena k souboru remap zahrnout pro console-setup

Sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'

a console-setup je třeba překonfigurovat (přeskočení otázek s nízkou prioritou pomocí -phigh)

Sudo dpkg-reconfigure console-setup -phigh

Nyní by mělo být přemapování dokončeno a automaticky načteno při spuštění.

8
arand

Celý den jsem se snažil vytvořit zkratku pro Ctrl+Pageup.

Poprvé jsem se pokusil xmodmap, ale to nedokáže generovat modifikátorové události. Není tedy možné vytvořit zástupce, který generuje například událost Control.

Potom jsem zkusil xbindkeys s xmacro. Takový druh prací, ale xbindkeys není schopen zachytit některé kombinace kláves v mém systému, jako je například Alt + ___.

Nakonec jsem použil vlastní klávesové zkratky Unity -> Vlastní klávesové zkratky pro nastavení své zkratky.

A místo xmacro jsem nyní použil program xvkbd ke generování událostí na klávesnici, ale to je jen osobní preference. xmacro i xvkbd fungují téměř stejně. Jedním z dalších tipů je přidání parametru zpoždění do xmacro nebo xvkbd, aby se zajistilo, že se události neztratí.

3
HRJ

Pro mě AutoKey ze Softwarového centra pracoval nejlépe. Má intuitivní GUI, pro přidání nové vazby klikněte na New -> Phrase and

  1. Přidejte jméno, klikněte na OK
  2. V části „Nastavení frází“ zkontrolujte, zda je použití vložení nastaveno na klávesnici
  3. Přidejte klávesovou zkratku, kterou chcete použít
  4. Přidejte příkaz do textového pole, např. Napodobujte levou šipku - bude to <left> (seznam speciálních klíčů je zde ).
3
ego

Pokud potřebujete přemapovat klíč pouze pro konkrétní program, jsem právě přidán tuto funkci na hax11.

Chtěl bych se změnit PgUp na Home nebo PgDown na End.

Chcete-li to provést s hax11, otevřete konfigurační soubor profilu programu pod ~/.config/hax11/profiles (např. ~/.config/hax11/profiles/usr\lib\firefox\firefox) a přidejte:

Enable=1
MapK112=K110
MapK117=K115
0