xmodmap cho tổ hợp phím - làm thế nào để chuyển đổi hành vi Fn?


9

Với bàn phím Logitech K290 qua USB, các phím F. không thể truy cập theo mặc định và tôi cần nhấn Fntrước khi sử dụng chúng, điều này không thực sự có thể sử dụng được.

Các Fnchính mình không sa thải bất kỳ sự kiện trong xev.

Nhấn F1mà không Fnkích hoạt hai sự kiện chính, mã khóa 50 ( Shift_L) và mã khóa 133 ( Super_L) và hiển thị thông báo "Touchpad bị vô hiệu hóa" trên Kubfox của tôi (cùng một thông báo cho mọi phím F1thông qua F4)

Althoug hầu hết các khóa phương tiện đều hoạt động, tôi muốn có quyền truy cập khóa F. trực tiếp. Bạn có biết cách nào để chuyển đổi Fnhành vi không?

Đây là đầu ra khi tôi nhấn F1mà không có 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

Và cho F2(vẫn không 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

F1với Fnkết quả mong đợi:

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
Thông thường <kbd> Fn </ kbd> hoạt động ở cấp độ phần cứng của bàn phím. Hy vọng rằng các mã khóa , trái ngược với các phím, các phím F vẫn khác nhau khi không được nhấn. Bạn có thể vui lòng chạy xevmột lần nữa và dán đầu ra cho hai phím F khác nhau không?
9000

Tôi đã gặp phải cùng một vấn đề :(. Câu trả lời này ( Askubfox.com/a/285604/121193 ) có thể hữu ích, nhưng sẽ tốt cho một cái gì đó ... đơn giản hơn.
Ash

1
Đáng buồn thay, Solaar chỉ hoạt động cho các trình phát không dây, không phải là có dây :(
user55574

Tôi sẽ bắt đầu bằng cách tìm trong các thiết lập BIOS. Một số cho phép hoán đổi khóa Fn, ví dụ: F-key-default ..
Jonas Berlin

thực sự khó chịu khi F1 sử dụng lại mã khóa 50, vì vậy bạn không thể thay đổi những gì 50 làm ..: P
Jonas Berlin

Câu trả lời:


1

Tôi đã thu được kết quả tương tự bằng cách hoán đổi các mã khóa giữa Fn+FxFxvị trí x 1,2,...12.

  1. Sử dụng xmodmap -pkeđể có được danh sách các mã khóa và ký hiệu phím hiện tại.
  2. Sau đó chạy xevvà nhấn F1thông qua F12việc lưu ý mã khóa của nó.
  3. Sau đó thực hiện trao đổi trong ~/.Xmodmaptập tin của bạn .

Ví dụ: trong hệ thống của tôi, kết quả của (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
..

Sau đó, tôi đổi nó trong ~/.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
...

Sau đó để có ảnh hưởng đến chạy xmodmap ~/.Xmodmap.


0

xevkhông thể hiển thị các sự kiện được ghi lại bởi môi trường máy tính để bàn. Một cách tốt hơn để kiểm tra các khóa là sử dụng showkeylệnh (tại bảng điều khiển Linux, không phải bên trong X11). Tôi đoán rằng HĐH thực sự đang nhận được tổ hợp phím Shift + Super +.

Mặc dù bạn có thể hiểu được sự kết hợp lại một cách có thể hiểu được sự kết hợp thành một phím F, nhưng nó có thể gây rắc rối: bạn phải "giải phóng" phím Shift (vì bàn phím mô phỏng nhấn nó) và làm cho Shift + F1 hoạt động thậm chí còn phức tạp hơn , vì nó sẽ yêu cầu theo dõi nếu phím Shift được giữ trước đó.

Vấn đề này rất phổ biến trên máy tính xách tay, thường có tổ hợp phím để chuyển các phím nóng đa phương tiện hoặc tùy chọn trong BIOS / chương trình cơ sở. Nhưng như bạn đã đề cập rằng điều này liên quan đến một mô hình cụ thể của bàn phím ngoài, khi tìm kiếm trực tuyến tôi đã tìm thấy dự án này:

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

Mô tả của dự án nói rằng nó "cấu hình lại cách các phím chức năng trên bàn phím Logitech K290 hoạt động", vì vậy có thể đáng để thử.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.