Fvwm/Meta key
Problém: fvwm/Meta key
Meta key
[editovat]Na kombinaci Ctrl-Meta-šipka mám namapovaný přesun na vedlejší pracovní stránku (GotoPage). To mi ale při přechodu na Ubuntu/Lucid a připojení externí USB klávesnice k notebooku najednou přestalo fungovat. V čem je chyba?
Divné také bylo, že při držení Alt a mačkání šipek Up, Down, Right, Left se mi na terminálu psala písmena A, B, C, D. Když to dělám na klávesnici notebooku, je to ale jiné.
Inspiruji se článkem http://www.abclinuxu.cz/clanky/hardware/multimedialni-a-jinak-vylepsene-klavesnice
Zjistím, jaké eventy mi jdou do X-ek:
xev
Tak to vypadá OK, vlevo od mezerníku mám namapované klávesy Control_L, Meta_L, Alt_L
Ale je divné, že u šipek na notebooku mám eventy Prior, Next, Home, End. To vypadá na zapnutý NumLock na notebooku (přes funkční klávesu Fn). Vypnu ho a je to OK.
A kupodivu zjišťuji, že mi pak funguje i přepínání workspace. Tak to by mě tedy nenapadlo! Nastavení NumLocku na klávesnici notebooku mi ovlivní chování připojené USB klávesnice!
Problém jsem řešil skoro celý den, málem jsem si překonfiguroval kvůli tomu celý systém.
Nicméně tento problém se vyskytuje i u běžné PC klávesnice, kde potřebuji mít NumLock zapnutý a přitom mít možnost používat kombinace Ctrl-Meta-šipka na přesun mezi Stránkami (GotoPage).
Zkusím obezličku a přemapovat přesun na vedlejší na klávesy Ctrl+Super_L+šipka. Klávesa Super_L je ta klávesa mezi Ctrl a Alt, často se symbolem Windows. Výše uvedená utilita xev mi to ověří:
KeyPress event, serial 41, synthetic NO, window 0x7e00001, root 0x293, subw 0x0, time 8120478, (161,176), root:(207,280), state 0x0, keycode 133 (keysym 0xffeb, Super_L), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False KeyRelease event, serial 41, synthetic NO, window 0x7e00001, root 0x293, subw 0x0, time 8120782, (161,176), root:(207,280), state 0x40, keycode 133 (keysym 0xffeb, Super_L), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False
Teď se podívám, jak mám namapované modifikátory kláves:
xmodmap -help xmodmap xmodmap -pm
xmodmap: up to 4 keys per modifier, (keycodes in parentheses): shift Shift_L (0x32), Shift_R (0x3e) lock control Control_L (0x25), Control_R (0x69) mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd) mod2 Num_Lock (0x4d) mod3 mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf) mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
Super_L má kód 133 = 0x85 a mapuje se na mod4.
Tady čtu, jak se to dělá: Re: FVWM: Using 'Super_L' as a key modifier
Takže zkusím přidat do ~/.fvwm/config řádky:
Key Left A C4 GotoPage -1p +0p Key Right A C4 GotoPage +1p +0p Key Up A C4 GotoPage +0p -1p Key Down A C4 GotoPage +0p +1p
Bezva, Ctrl+Super_L funguje, jenže zase jen v případě, že není aktivní NumLock. Co s tím?
Hledám: NumLock site:fvwm.org
fvwm: Why do NumLock, CapsLock and ScrollLock interfere with ClickToFocus and/or my mouse bindings? – čtu, že ty všelijaké Locky s tím můžou interferovat. Co s tím?
Co je to za blbou klávesu, ten NumLock?
xev
KeyPress event, serial 41, synthetic NO, window 0x7400001, root 0x293, subw 0x0, time 9914420, (151,172), root:(178,238), state 0x10, keycode 77 (keysym 0xff7f, Num_Lock), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False KeyRelease event, serial 41, synthetic NO, window 0x7400001, root 0x293, subw 0x0, time 9914988, (151,172), root:(178,238), state 0x10, keycode 77 (keysym 0xff7f, Num_Lock), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False
keycode 77 = 0x4D
Tady je nějaká obezlička – nechat NumLock MumLockem a přemapovat si číslice na padu rovnou pomocí xmodmap:
xmodmap -e "keysym KP_Up = KP_8" xmodmap -e "keysym KP_Left = KP_4" # ...
Tedy, dotaženo do konce:
xmodmap -e "keysym KP_Delete = period" xmodmap -e "keysym KP_Insert = KP_0" xmodmap -e "keysym KP_End = KP_1" xmodmap -e "keysym KP_Down = KP_2" xmodmap -e "keysym KP_Next = KP_3" xmodmap -e "keysym KP_Left = KP_4" xmodmap -e "keysym KP_Begin = KP_5" xmodmap -e "keysym KP_Right = KP_6" xmodmap -e "keysym KP_Home = KP_7" xmodmap -e "keysym KP_Up = KP_8" xmodmap -e "keysym KP_Prior = KP_9"
Obezlička funguje.
Ještě se podívám, co je to vlastně za příkaz clear Lock: stackoverflow: xmodmap clear command
Tak tedy ještě zkusím:
xmodmap -e "clear Lock"