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


22

Caps-Lock을 잡고 사용하는 X11 프로그램이 있습니다. 문제는 일반 캡 잠금 토글을 비활성화하고 싶지만 키를 비활성화하는 것 같습니다.

따라서 X11이 caps-lock 키 누르기를 위해 얻는 것이 무엇이든 여전히 키를 사용하지 않아야하거나 다른 키로 다시 매핑하지 않아야하지만 키 누르기를 caps-toggle로 변환하지 않아도됩니다 (커널 수준에있을 수 있습니까?) ).

스캔 코드를 변경하려고 시도했지만 키가 다시 매핑되었습니다. capslock 항목 xmodmap도 제거 했지만 이것도 대문자를 비활성화했습니다.

커널에게 caps-key를 무시하되 (정상적인 기능은하지 않습니까) 여전히 메시지를 X로 전달할 수 있습니까?

조금 더 자세하게 추가하십시오.

내가 실행하려고하는 '프로그램'은 인간화 된 'enso'입니다. 키가 없으면 "CRITICAL : root : Cumsimode key를 찾을 수 없습니다"라는 오류가 발생합니다. 오류가 없으면 cap과 함께 enso를 사용할 수 있지만 sofar은 enso가 여전히 도달 할 수있는 동안 cap 기능을 비활성화하는 방법을 찾지 못했습니다.


시도한 내용, 즉 정확한 xmodmap 표현식에 대한 세부 사항을 제공하십시오. 세부 정보가 없으면 수행해야 할 작업을 알고 잘못했는지 또는 올바르게 수행했지만 코드가 다른 이유로 실패했는지 알 수 없습니다. 일부는 X 서버 수준 아래에서 발생하는 키 코드 처리 기능이 있기 때문에 사용중인 OS도 알려주십시오.
Kyle Jones

@Kyle "remove Lock = Caps_Lock"을 시도한 다음 "keycode 66 ="(CapsLock에 매핑 됨)을 시도했습니다. 64 비트 시스템에서 우분투 12.10을 실행 중입니다.
Chris2048

또 다른 가능성은 다른 키로 다시 매핑하는 것입니다. 예를 들어로 다시 setxkbmap -option ctrl:nocaps매핑합니다 Control_L.
Chris Down

제어 키를 말하기 위해 캡 잠금 장치를 다시 매핑하는 방법을 제공 할 수 있다면 당신이 괜찮을 것이라고 말하고 있습니까? 이 질문은 다소 혼란 스럽기 때문에 지금까지 시도한 것에 대한 질문에 구체적인 내용을 추가하면 실제로 먼 길을 갈 것입니다.
slm

우분투 12.10에는 Caps-Lock을 추가 제어 키로 만들 수있는 기능이 있습니다. "리 맵핑"이라고 할 때 생각하고있는 것입니까? 대화 상자의 스크린 샷은 다음과 같습니다. flickr.com/photos/11708996@N00/3010939023
slm

답변:


28

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

따라서 눌려지고있는 주요 이벤트는 다른 응용 프로그램에서 그대로 유지됩니다.

setxkbmap

이 파일 /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

참고 문헌


5
실수로 capslock을 켠 상태에서 명령을 실행 한 경우을 실행하여 xkbmap을 재설정 할 수 있습니다 setxkbmap -option "".
니모

xev에 나타나지만 실제로 밸브 소스 2 엔진에서는 작동하지 않습니다.
Velkan

1

Caps Lock키가 일반적인 효과 를 갖지 않게하려면 키 심을 Lock유지하면서 수정자를 끄십시오 Caps_Lock.

xmodmap -e 'clear Lock'

그것은 capslock을 비활성화하지 않는 것 같습니다.
Chris2048

@ Chris2048 Works For Me ™. 일부 XKB 설정 또는 일부 응용 프로그램과 호환되지 않을 수 있습니다 (응용 프로그램은 자체 캡 잠금 처리를 수행하지만 대부분 동일한 라이브러리 기능을 사용하지만 예외가 있습니다).
Gilles 'SO- 악마 그만해

0

이것은 다른 질문에 대한 답변과 매우 유사합니다 . 이 xkb 코드는 트릭을 수행해야합니다.

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

어디로 가야합니까? 나는이 종류의 스 니펫을 파악하지 않고 10 분 동안보고있었습니다. 더 완전한 파일의 일부 여야합니까, 아니면 독립하여 기본 구성에 적용 할 수 있습니까?
Nikana Reklawyks
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.