Anahtar kombinasyonu için xmodmap - Fn davranışını nasıl değiştirebilirim?


9

USB üzerinden Logitech K290 klavye ile F. tuşlarına varsayılan olarak erişilemez ve Fnbunları kullanmadan önce basmam gerekir , ki bu gerçekten kullanışlı değildir.

FnAnahtar yalnız herhangi bir olayı patlamaz xev.

Basmak F1olmadan Fniki anahtar olaylar, tuş kodu 50 (yangınlar Shift_L) ve tuş kodu 133 ( Super_L) ve görüntüler bir mesaj benim Kubuntu'da "Dokunmatik özürlü" (her anahtarlar için aynı mesajı F1yoluyla F4)

Çoğu medya tuşu çalışırsa, doğrudan F. tuşlarına erişmeyi tercih ederim. FnDavranışı değiştirmenin herhangi bir yolunu biliyor musunuz ?

Ben F1olmadan bastığım zaman çıktı Fn:

KeyPress event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64638420, (-352,274), root:(1462,621),
    state 0x10, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64638420, (-352,274), root:(1462,621),
    state 0x11, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

FocusOut event, serial 40, synthetic NO, window 0x1a00001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 40, synthetic NO, window 0x1a00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 40, synthetic NO, window 0x0,
    keys:  4294967238 0   0   0   0   0   4   0   0   0   0   0   0   0   0   0   
           32  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64638436, (-352,274), root:(1462,621),
    state 0x51, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64638436, (-352,274), root:(1462,621),
    state 0x50, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

MappingNotify event, serial 40, synthetic NO, window 0x0,
    request MappingPointer, first_keycode 0, count 0

Ve F2(hala hayır Fn):

KeyPress event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64782724, (-202,438), root:(1491,799),
    state 0x10, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64782724, (-202,438), root:(1491,799),
    state 0x18, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

FocusOut event, serial 40, synthetic NO, window 0x1a00001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 40, synthetic NO, window 0x1a00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 40, synthetic NO, window 0x0,
    keys:  4294967238 0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   
           32  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64782780, (-202,438), root:(1491,799),
    state 0x58, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64782780, (-202,438), root:(1491,799),
    state 0x50, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

F1ile Fnbeklenen sonucu verir:

KeyPress event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64820204, (-856,-213), root:(1097,247),
    state 0x10, keycode 67 (keysym 0xffbe, F1), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x1a00001,
    root 0x2c6, subw 0x0, time 64820284, (-856,-213), root:(1097,247),
    state 0x10, keycode 67 (keysym 0xffbe, F1), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

2
Genellikle <kbd> Fn </kbd> klavyenin donanım düzeyinde çalışır. İnşallah F tuşlarının tuştakımlarının aksine tuş kodlarına basılmadığında hala farklıdır. Lütfen bir xevkez daha koşup iki farklı F tuşu için çıktıyı yapıştırabilir misiniz?
9000

Aynı sorunla karşılaştım :(. Bu cevap ( askubuntu.com/a/285604/121193 ) faydalı olabilir, ancak bir şey için iyi olurdu ... daha basit.
Ash

1
Ne yazık ki, Solaar sadece kablosuz yayıcılar için çalışıyor, kablolu olanlar için değil :(
user55574

BIOS ayarlarına bakarak başlardım. Bazıları Fn tuşunun değiştirilmesine izin verir, örneğin varsayılan olarak F tuşlarıyla ..
Jonas Berlin

F1'in 50 tuş kodunu yeniden kullandığı gerçekten kötü, bu yüzden 50'nin de ne yaptığını değiştiremezsiniz ..: P
Jonas Berlin

Yanıtlar:


1

Aynı sonucu x'in bulunduğu Fn+Fxve arasındaki anahtar kodlarını değiştirerek elde ettim .Fx1,2,...12

  1. xmodmap -pkeGeçerli anahtar kodlarının ve anahtar sembollerinin bir listesini elde etmek için kullanın .
  2. O zaman kaç xevbasın F1yoluyla F12kendi keycode'lu not tutarak.
  3. Ardından ~/.Xmodmapdosyanızda takas yapın .

Örneğin benim sistemimde (1) sonucu:

keycode 67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode 68 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2
keycode 69 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3
keycode 70 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4
...

keycode 121 = XF86AudioMute NoSymbol XF86AudioMute
keycode 122 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
keycode 123 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
keycode 198 = XF86AudioMicMute NoSymbol XF86AudioMicMute
..

Sonra takas ettim ~/.Xmodmap:

keycode 121 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode 122 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2
keycode 123 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3
keycode 198 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4
...


keycode 67 = XF86AudioMute NoSymbol XF86AudioMute
keycode 68 = XF86AudioLowerVolume NoSymbol XF86AudioLowerVolume
keycode 69 = XF86AudioRaiseVolume NoSymbol XF86AudioRaiseVolume
keycode 70 = XF86AudioMicMute NoSymbol XF86AudioMicMute
...

Sonra etkilemek çalıştırmak çalıştırın xmodmap ~/.Xmodmap.


0

xevmasaüstü ortamı tarafından yakalanan olayları gösteremez. Anahtarları test etmenin daha iyi bir yolu showkeykomutu kullanmaktır (Linux konsolunda, X11'in içinde değil). İşletim sisteminin aslında bir Shift + Super + bazı tuş kombinasyonu aldığını tahmin ediyorum.

Bahsedilen kombinasyonu sadece bir F anahtarıyla yeniden eşleştirebilmenize rağmen, muhtemelen zahmetli olacaktır: Shift tuşunu "bırakmanız" gerekir (çünkü klavye basmayı simüle eder) ve Shift + F1 çalışması yapmak daha karmaşık olurdu , Shift tuşunun önceden basılı tutulması durumunda izleme gerektireceği için.

Bu sorun, genellikle multimedya kısayol tuşlarını değiştirmek için tuş kombinasyonuna sahip olan veya BIOS / belleniminde bir seçenek olan dizüstü bilgisayarlarda çok yaygındır. Ancak, bunun harici bir klavye modeliyle ilgili olduğunu belirttiğiniz gibi, çevrimiçi bakıldığında bu projeyi buldum:

https://github.com/milgner/k290-fnkeyctl

Projenin açıklaması, "Logitech K290 klavyelerdeki işlev tuşlarının çalışma şeklini yeniden yapılandırdığını" belirtir, bu nedenle denemeye değer olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.