Xmodmap

Xmodmap

Xmodmap을 사용하여 독일어 움라우트/분음 부호를 키보드에 추가하려고 하는데 Xmodmap이 작동하지 않습니다(그러나 다른 재매핑은 작동합니다).

나는 이 가이드를 따르고 있습니다:X 중국어 및 미국 키보드의 독일어 분음 부호(Ubuntu 10.04).

Xmodmap

나는 이것을 내 것에 추가했습니다 ~/.Xmodmap:

keysym a = a A adiaeresis Adiaeresis
keysym o = o O odiaeresis Odiaeresis
keysym u = u U udiaeresis Udiaeresis
keysym s = s S ssharp ssharp

시프

그러나 그것은 작동하지 않습니다. xev를 누르고 o, 길게 누르고 AltGr, 누르고 , 누를 o때의 출력 은 다음과 같습니다 x.

KeyPress event, serial 34, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 642618, (108,138), root:(173,190),
    state 0x10, keycode 32 (keysym 0x6f, o), same_screen YES,
    XLookupString gives 1 bytes: (6f) "o"
    XmbLookupString gives 1 bytes: (6f) "o"
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 642644, (108,138), root:(173,190),
    state 0x10, keycode 32 (keysym 0x6f, o), same_screen YES,
    XLookupString gives 1 bytes: (6f) "o"
    XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 643792, (108,138), root:(173,190),
    state 0x10, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 645365, (108,138), root:(173,190),
    state 0x90, keycode 32 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 645409, (108,138), root:(173,190),
    state 0x90, keycode 32 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 647660, (108,138), root:(173,190),
    state 0x90, keycode 53 (keysym 0xd7, multiply), same_screen YES,
    XLookupString gives 2 bytes: (c3 97) "×"
    XmbLookupString gives 2 bytes: (c3 97) "×"
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 647722, (108,138), root:(173,190),
    state 0x90, keycode 53 (keysym 0xd7, multiply), same_screen YES,
    XLookupString gives 2 bytes: (c3 97) "×"
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
    root 0x8e, subw 0x0, time 650223, (108,138), root:(173,190),
    state 0x90, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

눌렀을 때 AltGr로 해석된다는 것을 알 수 있습니다 . 즉, 을 누르면 의 세 번째 수준으로 설정됩니다 . 그래서 작동합니다.ISO_Level3_Shiftxkeysym 0xd7, multiply×xAltGr

$ xmodmap -pke | grep 53
keycode  53 = x X x X multiply approximate

그러나 세 번째 수준을 설정했는데도 누르면 다음과 같은 o결과가 나타납니다 .keysym 0x0, NoSymbol

$ xmodmap -pke | grep 32
keycode  32 = o O odiaeresis Odiaeresis

AltGr+( a| u| ) 를 사용해도 s같은 일이 발생합니다 .

Xmodmap은 다른 리맵과 함께 작동합니다.

내 노트북의 키가 작기 때문에 숫자 키패드를 Page Up에 PgUp다시 매핑했는데 잘 작동합니다. 그래서 내 XModmap 파일을 (부분적으로) 읽고 있습니다.+~/.Xmodmap

o/a/u 재할당이 작동하지 않는 이유는 무엇입니까?

저는 Ubuntu 14.0.1과 Ubuntu Unity를 사용하고 있습니다.

답변1

xmodmap예비 참고 사항: 최근 변경된 것으로 보이며 이전 설정은 작동하지 않습니다.

귀하의 경우 x X x X multiply approximate유효한 키코드 53(6개 값:) 값의 개수와 o O odiaeresis Odiaeresis유효하지 않은 키코드 32(4개 값:) 값의 개수를 살펴보세요.

ISO_Level3_Shift5번째 또는 6번째 값이 선택되지만 귀하의 경우에는 키코드 32로 설정되어 있지 않습니다. 그래서 keysym 0x0, NoSymbol결과 가 나왔습니다 .

당신에게 필요한 것은:

keysym a = a A a A adiaeresis Adiaeresis
keysym o = o O o O odiaeresis Odiaeresis
keysym u = u U u U udiaeresis Udiaeresis
keysym s = s S s S ssharp ssharp

그러나 XKB를 직접 사용하는 것이 더 나을 수도 있습니다().

편집하다:세 번째와 네 번째 값은 키로 선택됩니다 Mode_switch. 각 값 쌍에 대해 Shift쌍의 두 번째 값이 선택됩니다. 보다ArchWiki xmodmap 페이지.

답변2

올바른 Alt키가 작동 하려면 대신 Alt Gr키를 매핑해야 합니다 .Mode_switchISO_Level3_Shift

keycode 108 = Mode_switch

도착하다 ~/.Xmodmap:

keycode 108 = Mode_switch
keycode  38 = a A adiaeresis Adiaeresis
keycode  30 = u U udiaeresis Udiaeresis
keycode  32 = o O odiaeresis Odiaeresis
keycode  39 = s S ssharp

독일어 키보드의 키에 발음 구별 부호를 사용하려면 다음을 사용하세요.

keycode 108 = Mode_switch
keycode 48 = apostrophe quotedbl adiaeresis Adiaeresis
keycode 47 = semicolon colon odiaeresis Odiaeresis
keycode 34 = bracketleft braceleft udiaeresis Udiaeresis
keycode 20 = minus underscore ssharp

(물론 합쳐서 사용하셔도 됩니다.)

관련 정보