Làm thế nào để ngăn chặn hiệu ứng chuyển đổi mũ, mà không cần ánh xạ lại hoặc vô hiệu hóa nó?


22

Tôi có một chương trình X11 lấy caps-lock và sử dụng nó. Vấn đề là, tôi muốn tắt chức năng bật khóa thông thường, nhưng làm như vậy có vẻ như vô hiệu hóa khóa.

Vì vậy, bất cứ điều gì X11 nhận được cho một phím bấm phím, nó vẫn phải nhận được (không vô hiệu hóa khóa hoặc ánh xạ lại vào một số phím khác), nhưng không có bất cứ điều gì chuyển đổi phím nhấn thành một nút chuyển đổi (có thể ở cấp độ kernel? ).

Tôi đã thử thay đổi scancode, nhưng điều này chỉ cần ánh xạ lại khóa. Tôi cũng đã xóa mục capslock xmodmap, nhưng điều này cũng vô hiệu hóa mũ.

Làm thế nào tôi có thể bảo kernel bỏ qua phím caps (viết chức năng thông thường của nó), nhưng vẫn chuyển thông điệp tới X?

Chỉ cần thêm một chút chi tiết:

'Chương trình' Tôi đang cố chạy là nhân bản 'conso'. Khi không có khóa, tôi nhận được lỗi "CRITICS: root: Không thể tìm thấy khóa quasimode". Khi không có lỗi, tôi có thể sử dụng conso với mũ, nhưng sofar vẫn chưa tìm ra cách vô hiệu hóa chức năng của mũ trong khi vẫn có thể sử dụng được.


Vui lòng cung cấp chi tiết về những gì bạn đã thử, tức là các biểu thức xmodmap chính xác. Không có chi tiết, chúng tôi không thể biết bạn có biết phải làm gì và đã làm sai hay không, hoặc liệu bạn đã làm đúng nhưng mã không thành công vì một số lý do khác. Đồng thời cung cấp cho chúng tôi hệ điều hành bạn đang sử dụng vì một số có xử lý mã khóa xảy ra dưới cấp máy chủ X.
Kyle Jones

@Kyle Tôi đã thử "xóa Lock = Caps_Lock" và sau đó "keycode 66 =" (được ánh xạ tới CapsLock). Tôi đang chạy Ubuntu 12.10 trên máy 64 bit.
Chris2048

Một khả năng khác là ánh xạ lại cho một khóa khác. setxkbmap -option ctrl:nocapsremaps đến Control_L, ví dụ.
Chris Xuống

Bạn có nói rằng bạn sẽ ổn nếu chúng tôi có thể cung cấp cho bạn cách sắp xếp lại khóa mũ để nói phím điều khiển hay đó không phải là những gì bạn đang theo đuổi? Vì câu hỏi này khá khó hiểu, nó thực sự sẽ đi một chặng đường dài nếu bạn thêm chi tiết cụ thể vào câu hỏi về những gì bạn đã cố gắng cho đến nay.
slm

Cũng để chúng tôi rõ ràng, có một tính năng trong Ubuntu 12.10, nơi bạn có thể đặt mũ khóa thành một khóa điều khiển bổ sung. Đây có phải là những gì bạn nghĩ khi bạn nói "ánh xạ lại"? Dưới đây là ảnh chụp màn hình của hộp thoại: flickr.com/photos/11708996@N00/3010939023
slm

Câu trả lời:


28

Tôi nghĩ rằng tôi có một kỹ thuật để vô hiệu hóa việc bật Capslockphím nhưng không hoàn toàn vô hiệu hóa tất cả các phím cùng nhau hoặc ánh xạ lại nó sang một phím khác trên bàn phím.

Nếu bạn sử dụng lệnh:

setxkbmap -option caps:none

Bàn phím sẽ không còn chuyển đổi. Tôi đã xác nhận điều này trên máy tính xách tay chạy Fedora 14, đèn LED không còn sáng nữa và Capslockchức năng bình thường không còn nữa.

Tuy nhiên, sử dụng xev vẫn cho thấy phím đang được nhấn:

$ xev
...
...
KeyPress event, serial 35, synthetic NO, window 0x6800001,
    root 0xb1, subw 0x0, time 261504852, (167,-15), root:(353,268),
    state 0x10, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 35, synthetic NO, window 0x6800001,
    root 0xb1, subw 0x0, time 261504971, (167,-15), root:(353,268),
    state 0x10, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False
    ...

Vì vậy, các sự kiện được nhấn phím vẫn còn nguyên cho các ứng dụng khác chọn chúng.

setxkbmap

Các tập tin /usr/share/X11/xkb/rules/xorg.lstchứa danh sách đầy đủ các tùy chọn bạn có thể cung cấp cho setxkbmap.

Cắt qua tập tin này cho "cap" Tôi nhận thấy dòng này:

caps:none            CapsLock is disabled

Có các giá trị khác trong tệp này vì vậy nếu đây không phải là giá trị mà bạn có thể là một trong những giá trị thay thế đó sẽ thay thế.

$ grep cap /usr/share/X11/xkb/rules/xorg.lst
  grp:caps_switch      CapsLock (while pressed), Alt+CapsLock does the original capslock action
  grp:caps_toggle      CapsLock
  grp:shift_caps_toggle Shift+CapsLock
  grp:shift_caps_switch CapsLock (to first layout), Shift+CapsLock (to last layout)
  grp:alt_caps_toggle  Alt+CapsLock
  lv3:caps_switch      CapsLock
  lv3:caps_switch_latch CapsLock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)
  ctrl:nocaps          Make CapsLock an additional Ctrl
  ctrl:swapcaps        Swap Ctrl and CapsLock
  grp_led:caps         CapsLock
  caps                 CapsLock key behavior
  caps:internal        CapsLock uses internal capitalization. Shift "pauses" CapsLock
  caps:internal_nocancel CapsLock uses internal capitalization. Shift doesn't affect CapsLock
  caps:shift           CapsLock acts as Shift with locking. Shift "pauses" CapsLock
  caps:shift_nocancel  CapsLock acts as Shift with locking. Shift doesn't affect CapsLock
  caps:capslock        CapsLock toggles normal capitalization of alphabetic characters
  caps:numlock         Make CapsLock an additional NumLock
  caps:swapescape      Swap ESC and CapsLock
  caps:escape          Make CapsLock an additional ESC
  caps:backspace       Make CapsLock an additional Backspace
  caps:super           Make CapsLock an additional Super
  caps:hyper           Make CapsLock an additional Hyper
  caps:shiftlock       CapsLock toggles Shift so all keys are affected
  caps:none            CapsLock is disabled
  compose:caps         CapsLock
  shift:breaks_caps    Shift cancels CapsLock
  shift:both_capslock  Both Shift-Keys together toggle CapsLock
  shift:both_capslock_cancel Both Shift-Keys together activate CapsLock, one Shift-Key deactivates

Tài liệu tham khảo


5
Nếu bạn vô tình chạy lệnh khi bật capslock, bạn có thể đặt lại xkbmap bằng cách chạy setxkbmap -option "".
Nemo

Nó xuất hiện trong xev, nhưng không thực sự hoạt động trong công cụ Valve Source 2.
Velkan

1

Nếu bạn không muốn Caps Lockkhóa có hiệu lực như thường lệ, bạn có thể tắt công cụ Locksửa đổi, trong khi vẫn giữ Caps_Lockphím.

xmodmap -e 'clear Lock'

Điều đó dường như không vô hiệu hóa capslock.
Chris2048

@ Chris2048 Hoạt động cho tôi ™. Nó có thể không tương thích với một số cài đặt XKB hoặc với một số ứng dụng (các ứng dụng tự xử lý khóa mũ, hầu hết chúng đều sử dụng cùng chức năng thư viện nhưng vẫn có ngoại lệ).
Gilles 'SO- ngừng trở thành ác quỷ'

0

Điều này rất giống với câu trả lời tôi đưa ra cho một câu hỏi khác . Đoạn mã xkb này nên thực hiện thủ thuật.

partial modifier_keys
xkb_symbols "capsoff" {
    key <CAPS> {
        type[Group1] = "ONE_LEVEL",
        symbols[Group1] = [ Caps_Lock ],
        actions[Group1] = [ NoAction() ]
    };
};

cái này nên đi đâu Tôi đã xem loại đoạn trích này trong 10 phút mà không tìm ra. Nó có phải là một phần của một tập tin hoàn chỉnh hơn hay nó có thể độc lập và áp dụng cho cấu hình mặc định không?
Nikana Reklawyks
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.