Caps Lock 토글 효과를 다시 매핑하거나 비활성화하지 않고 방지하는 방법은 무엇입니까?

Caps Lock 토글 효과를 다시 매핑하거나 비활성화하지 않고 방지하는 방법은 무엇입니까?

Caps Lock을 설정하고 사용하는 X11 프로그램이 있습니다. 문제는 일반 Caps Lock 토글을 비활성화하고 싶지만 그렇게 하면 키가 비활성화되는 것 같습니다.

따라서 X11이 Caps Lock 키 입력을 얻을 때마다 여전히 이를 얻어야 하지만(키를 비활성화하거나 다른 키에 다시 매핑하지 않고) 키 입력을 대문자 토글로 변환하는 기능이 없습니다(아마도 이 위치에 있을 것입니다). 커널 수준?).

스캔 코드를 변경해 보았으나 키가 다시 매핑되었습니다. Caps Lock 항목도 제거했지만 xmodmap이로 인해 대문자도 비활성화되었습니다.

커널이 대문자 키를 무시하고(일반적인 기능을 사용하지 않음) 여전히 메시지를 X에 전달하도록 지시하려면 어떻게 해야 합니까?

자세한 내용을 추가하면 됩니다.

내가 운영하려는 '프로그램'은 인간적인 '엔소'다. 키가 없으면 "CRITICAL: 루트: 준모드 키를 찾을 수 없습니다"라는 오류가 발생합니다. 오류가 없을 때 enso를 caps와 함께 사용할 수 있지만, enso가 여전히 사용할 수 있는 동안 caps 기능을 비활성화하는 방법을 아직 찾지 못했습니다.

답변1

키 토글을 비활성화하는 기술이 있지만 Capslock키를 완전히 비활성화하거나 키보드의 다른 키에 다시 매핑하지는 않는 기술이 있다고 생각합니다.

다음 명령을 사용하는 경우:

setxkbmap -option caps:none

키보드가 더 이상 전환되지 않습니다. Fedora 14를 실행하는 노트북에서 이를 확인했는데, LED가 더 이상 켜지지 않고 정상적인 Capslock기능이 사라졌습니다.

그러나 xev를 사용하면 여전히 누르고 있는 키가 표시됩니다.

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

따라서 누른 키 이벤트는 다른 응용 프로그램이 이를 선택할 수 있도록 그대로 유지됩니다.

xkbmap 설정

이 파일에는 /usr/share/X11/xkb/rules/xorg.lst제공할 수 있는 옵션의 전체 목록이 포함되어 있습니다 setxkbmap.

이 파일에서 "cap"을 찾다가 다음 줄을 발견했습니다.

caps:none            CapsLock is disabled

파일에는 다른 값도 있으므로, 이것이 원하는 값이 아닐 경우에는 대체 값 중 하나가 더 적합할 수 있습니다.

$ 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

인용하다

답변2

Caps Lock키의 일반적인 효과를 원하지 않는 경우 키 기호를 Lock유지하면서 수정자를 끌 수 있습니다.Caps_Lock

xmodmap -e 'clear Lock'

답변3

제가 답변드린 답변과 매우 유사합니다또 다른 문제. 이 xkb 코드가 트릭을 수행해야 합니다.

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

답변4

나는 전에 그것을 사용했다@slm이 설명하는 방법그러나 (적어도 KDE Neon을 사용하는 KDE 플라즈마에서는) 어느 시점에서는 작동이 중지됩니다.

그러나 비결은 아래 설명된 대로 KDE 내부 설정입니다.https://askubuntu.com/a/439230/626920

관련 정보