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_Shift
xkeysym 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_Shift
5번째 또는 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_switch
ISO_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
(물론 합쳐서 사용하셔도 됩니다.)