xmodmap для комбінації клавіш - як переключити поведінку Fn?


9

З клавіатурою Logitech K290 через USB, F. клавіші за замовчуванням недоступні, і мені потрібно натиснути, Fnперш ніж їх використовувати, що насправді не можна використовувати.

FnКлюч в поодинці не спрацьовує яке - або подія в xev.

Натискаючи F1без Fnпожеж дві ключові події, клавіш 50 ( Shift_L) та клавішний код 133 ( Super_L), а на моєму Kubuntu відображається повідомлення "Сенсорна панель відключена" (те саме повідомлення для всіх клавіш F1через F4)

Хоча більшість медіа-клавіш працює, я б швидше мав прямий доступ F. Клавіші. Чи знаєте ви будь-який спосіб переключити Fnповедінку?

Ось результат для, коли я натискаю F1без 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

А для F2(ще ні 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

F1з Fnдає очікуваний результат:

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
Зазвичай <kbd> Fn </kbd> працює на апаратному рівні клавіатури. Сподіваємось , клавішні коди , на відміну від клавішних клавіш, F-клавіші все ще відрізняються, коли вони не натискаються. Чи можете ви, будь ласка, запустити xevще раз і вставити вихід для двох різних клавіш F?
9000

Я зіткнувся з тією ж проблемою :(. Ця відповідь ( askubuntu.com/a/285604/121193 ) може бути корисною, але було б непогано чимось ... простіше.
Еш,

1
На жаль, Solaar працює лише для бездротових випромінювачів, а не провідних :(
user55574

Я б почав, заглянувши в налаштування BIOS. Деякі дозволяють поміняти клавішу Fn, наприклад, F-клавіші за замовчуванням ..
Jonas Berlin

дуже неприємний , що F1 повторно скан 50, так що ви не можете просто змінити те , що 50 робить або ..: P
Jonas Берлін

Відповіді:


1

Я отримав той самий результат, замінивши кодові клавіші між Fn+Fxі Fxде х є 1,2,...12.

  1. Використовуйте xmodmap -pkeдля отримання списку поточних кодів клавіш та клавіш.
  2. Потім запустіть xevі натисніть F1через F12збереження до відома його клавіатурним.
  3. Потім зробіть своп у своєму ~/.Xmodmapфайлі.

Наприклад, наприклад, у моїй системі результат (1):

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
..

Потім я поміняв його на ~/.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
...

Потім прийняти вплив бігати xmodmap ~/.Xmodmap.


0

xevне може відображати події, захоплені середовищем робочого столу. Кращий спосіб перевірити ключі - це використання showkeyкоманди (на консолі Linux, а не в X11). Я здогадуюсь, що ОС насправді отримує комбінацію клавіш Shift + Super +.

Хоча ви могли б перезаписати комбінацію лише на клавішу F, це, ймовірно, буде проблематичним: вам доведеться "відпустити" клавішу Shift (оскільки клавіатура імітує її натискання), і зробити роботу Shift + F1 буде ще складніше , як це вимагатиме відстеження, якщо клавіша Shift була натиснута раніше.

Ця проблема дуже часто зустрічається на ноутбуках, у яких часто є або комбінація клавіш для перемикання мультимедійних гарячих клавіш, або опція в їх BIOS / мікропрограмному забезпеченні. Але як ви згадали, що це стосується конкретної моделі зовнішньої клавіатури, дивлячись в Інтернеті, я знайшов цей проект:

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

В описі проекту зазначено, що він "перенастроює спосіб роботи функціональних клавіш на клавіатурах Logitech K290", тому, можливо, варто спробувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.