키 재매핑(수정자 포함)

키 재매핑(수정자 포함)

Ubuntu 18.04에서 대체 독일어 키보드 레이아웃을 사용하고 있습니다.

~$ setxkbmap de koy

이제 다음과 같이 세 개의 키(Mod3 → f → ß → Mod3)를 교환하고 싶습니다. 열쇠 3개 교환

이러한 키의 키코드는 다음과 같습니다.

~$ xmodmap -pke | grep -E 'keycode  (33|48|51)'
keycode  33 = ssharp U1E9E ssharp U1E9E ampersand Greek_finalsmallsigma KP_Add KP_Add jot NoSymbol ampersand Greek_finalsmallsigma KP_Add KP_Add jot
keycode  48 = f F f F at Greek_phi period KP_Decimal Greek_PHI NoSymbol at Greek_phi period KP_Decimal Greek_PHI
keycode  51 = ISO_Level3_Shift NoSymbol ISO_Level3_Shift

Q1: f 키와 ß 키에 열이 15개 있는 이유는 무엇입니까? /usr/share/X11/xkb/symbols/de8개의 열만 정의되었습니다!

다음 xmodmap 명령을 사용하여 키를 교환할 수 있습니다.

~$ xmodmap -e "keycode  51 = ssharp U1E9E ssharp U1E9E ampersand Greek_finalsmallsigma KP_Add KP_Add jot NoSymbol ampersand Greek_finalsmallsigma KP_Add KP_Add jot"
~$ xmodmap -e "keycode  33 = f F f F at Greek_phi period KP_Decimal Greek_PHI NoSymbol at Greek_phi period KP_Decimal Greek_PHI"
~$ xmodmap -e "keycode  48 = ISO_Level3_Shift NoSymbol ISO_Level3_Shift"

이제 열쇠는 교환되었지만...

  • ß(ssharp) 키는 ß모든 레벨에서 반환됩니다! 예상(스왑 전과 동일):ß ẞ & + ς ∘
  • 키 48(이전의 f 키)은 다른 수정자와 함께 사용되는 경우를 제외하고 Mod3와 동일하게 작동합니다. Shift+Mod3+a는 하나를 제공해야 α하지만 이제는 하나를 제공합니다 A.

다시 한번 확인해 보세요:

~$ xmodmap -pke | grep -E 'keycode  (33|48|51)'
keycode  33 = f F f F ampersand Greek_phi KP_Add KP_Add Greek_PHI NoSymbol ampersand Greek_phi KP_Add KP_Add Greek_PHI NoSymbol f F ampersand Greek_phi KP_Add KP_Add Greek_PHI NoSymbol f F ampersand Greek_phi KP_Add KP_Add Greek_PHI
keycode  48 = ISO_Level3_Shift NoSymbol ISO_Level3_Shift NoSymbol NoSymbol NoSymbol NoSymbol NoSymbol NoSymbol NoSymbol NoSymbol NoSymbol NoSymbol NoSymbol NoSymbol NoSymbol ISO_Level3_Shift NoSymbol NoSymbol NoSymbol NoSymbol NoSymbol NoSymbol NoSymbol ISO_Level3_Shift
keycode  51 = ssharp NoSymbol ssharp U1E9E at Greek_finalsmallsigma period KP_Decimal

키코드 48과 51은 제가 설정한 것이 아닙니다.

질문 2: 무엇이 잘못됐나요?

StackExchange에 대한 다른 질문에서 사람들은 수정자를 변경하기 전에 수정자를 제거하거나 지우는 것이 중요하다고 말했습니다. 그러나 이것은 항상 실패합니다.

~$ xmodmap -pm
xmodmap:  up to 3 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Shift_L (0x32)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        BadKey (0xcf)
mod3        ISO_Level5_Shift (0xcb)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce)
mod5        ISO_Level3_Shift (0x5c)

~$ xmodmap -e "remove mod5 = ISO_Level3_Shift"
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  11
  Current serial number in output stream:  11

~$ xmodmap -e "clear mod5"
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  8
  Current serial number in output stream:  8

Q3: 이러한 오류는 무엇을 의미합니까?

관련 정보