xmodmap을 사용하여 개별 키 매핑 구성

xmodmap을 사용하여 개별 키 매핑 구성

AltGR+Right_Windows를 다시 매핑하고 싶지만 방법을 모르겠습니다. 무엇을 시도하든 오른쪽 Windows 키를 누르면 오른쪽 Alt 키를 눌렀는지 여부에 관계없이 키심이라는 이름이 표시됩니다.

제가 지금 테스트하고 있는 xmodmap 파일의 내용입니다. 내 키보드에서 38은 "a"에 대한 키코드이고, 48은 아포스트로피/큰따옴표에 대한 키코드이고, 134는 오른쪽에 있는 Windows 키에 대한 키코드입니다.

keycode  38 = 1 2 3 4 5 6 7 8
keycode  48 = 1 2 3 4 5 6 7 8
keycode 134 = 1 2 3 4 5 6 7 8

Right_Alt+아포스트로피를 누르면 5가 출력되지만 Right_Alt+a 및 Right_Alt+Right_Windows는 1(오른쪽 Alt를 누르거나 누르지 않을 때)을 제공하는데 이는 내가 원하는 것이 아닙니다.

현재 키보드 레이아웃은 us(alt-intl)올바른 Alt가 분명히 AltGr/Iso_Level3_Shift로 작동하도록 설정되어 있다는 것입니다. 출력은 xmodmap -pm다음과 같습니다.

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

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

답변1

xmodmap을 사용하여 개별 키 매핑 구성

이제 내 자신의 연구 결과를 적어볼 시간이다.

내 생각에는 xmodmap에 뭔가 빠진 것이 있는 것 같은데 잘 문서화되어 있지 않아 사람들이 혼란스러워하고 있습니다. 그러나 X.Org의 XKB 및 xmodmap 설계는 어리석은 것으로 밝혀졌습니다.

엄청난 실패: xmodmap

원래 키보드 레이아웃에 실제로 존재하는 한 xmodmap을 사용하여 기존 매핑을 재정의할 수 있습니다. 질문에 설명된 상황에서는 AltGr을 사용하기 위해 키의 동작을 확장할 수 없습니다. 사용된 AltGr 키코드에 대한 AltGr 키 기호만 변경할 수 있습니다.

또한보십시오:http://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

해결책: Mode_switch

이 해결 방법은 @ Ned64의 답변에 설명되어 있습니다. 에서 AltGr으로 다시 매핑할 수 있습니다 .ISO_Level3_ShiftMode_switch

다음 명령줄을 사용하여 성공적으로 다시 매핑했습니다 AltGr.

xmodmap -e 'keycode 108 = Mode_switch'

xmodmap단점은 현재 키보드 레이아웃이 파괴된다는 것입니다. 그러나 이미 언급한 @Ned64 방법을 사용하여 모든 매핑을 하나씩 다시 만들 수 있습니다.

해결 방법: 키보드 레이아웃 수정

키보드 레이아웃을 사용하고 us(cz_sk_de)있으며 확장하려는 키에 대한 구성을 추가하여 수정하려고 합니다.

key <AB08>  { [ comma, less, doublelowquotemark, leftdoublequotemark ] };
key <AB09>  { [ period, greater, ellipsis, rightdoublequotemark ] };

( xkb_symbols "cz_sk_de"일부 /usr/share/X11/xkb/symbols/us)

수정된 버전을 사용하려면 키보드 레이아웃을 재설정하세요.

setxkbmap 'us(cz_sk_de)'

,이제 (1) ., 및 키 Shift조합을 사용하여 체코어 및 영어 따옴표와 줄임표를 입력 AltGr하거나 (2) xmodmap정의된 키를 사용하여 이러한 키를 다시 매핑할 수 있습니다.

가장 큰 단점은 setxkbmap어디에서도 키보드 레이아웃을 지원하지 않는 것 같아서 홈 디렉토리 대신 시스템 구성에 작성해야 한다는 것입니다.

결론적으로

이는 X.Org가 과도하게 엔지니어링되고 제대로 설계되지 않은 예인 것으로 보이며, 키 코드 및 수정자 조합을 기호에 매핑하는 것과 같은 사소한 것조차도 문제가 될 수 있습니다. 이러한 도구는 부작용 없이 사용자 구성의 개별 키맵을 변경하는 합리적인 방법을 제공하지 않는 것 같습니다.

답변2

1단계: AltGr을 사용할 수 있도록 설정

Mode_switch다음과 같이 AltGr-Key를 에 다시 매핑하는 경우에만 AltGr 수정 키가 내 시스템에서 작동한다는 것을 알았습니다 .

xmodmap -e "keycode 108 = Mode_switch Mode_switch Mode_switch Mode_switch"

108다른 키보드가 있는 경우 코드로 교체해야 할 수도 있습니다 . 입력하여 확인하세요.

xmodmap -pke | grep Alt_R

그런 다음 해당 번호를 사용하십시오. (이 키는 Alt_R내가 아는 시스템에서 일반적으로 호출됩니다.)

또는 Alt_R이 다른 항목에 할당되지 않은 경우에도 작동할 수 있습니다.

xmodmap -e "keysym Alt_R = Mode_switch Mode_switch Mode_switch Mode_switch"

이제 AltGr 수정자는 수정자 목록에서 위치 3(Shift: 4)을 제공합니다.

2단계: 필요에 따라 키 할당

키보드의 모든 키에 AltGr 변형을 할당할 수 있습니다. 이제 필수 코드에 해당하지 않는 다른 키가 있는 경우 다른 키(테스트한 키)와 마찬가지로 해당 키를 다시 할당해야 합니다.

3단계: 스크립트로 변환

이제 xmodmap명령을 실행하고 기본 키보드에 대한 모든 수정 사항만 파일에 기록합니다. 이는 전체 키맵을 로드하는 것보다 빠릅니다. 이 스크립트는 로그인할 때마다 한 번 실행되고 프로세스에 의해 키맵이 재설정될 때마다 실행됩니다.

나는 Solaris, IRIX, Linux에서 수년에 걸쳐 이것을 여러 번 실험해 왔고, 내가 아는 한 이것이 AltGr을 작동시키는 유일한 솔루션이며 20년 넘게 나를 위해 일했습니다.

답변3

분명히 xmodmap은 기본 AltGR을 읽지 못합니다. 아마도 특정 키보드 레이아웃(미국 이외의 레이아웃)으로 제한되어 있을 것입니다. 어느 쪽이든 실제 문제는 키보드 레이아웃을 교체할 수 있지만 일부 사람들은 그럴 가능성이 있다는 것입니다. 익숙한 레이아웃(ðæöáúíóåů와 같은 문자가 있는 스칸디나비아 키보드 레이아웃 등)에서 특수 문자를 사용해야 하기 때문에 실제로는 이 작업을 수행하고 싶지 않습니다. 이는 다른 키보드 레이아웃 구성에서는 불가능합니다. 일어나기 힘들다.

당신은 실행할 수 있습니다

xmodmap -e "keycode 108 = Mode_switch"

AltGR을 xmodmap에 다시 바인딩하려면 지금 AltGR을 누를 때 실제로 키보드의 세 번째 할당을 출력하는 것을 사용할 수 있지만 AltGR 키 바인딩이 더 이상 AltGR 키와 함께 사용되지 않기 때문에 원래 키보드 레이아웃이 완전히 파괴됩니다.

기존 키보드 레이아웃을 손상시키지 않고 레이아웃 전환을 포함하지 않는 두 가지 해결 방법을 찾았습니다., 하나는 Mode_switch를 다른 키에 바인딩하는 것입니다.

이상적인 키는 AltGR 바로 옆에 있는 Super_R이며 키 코드는 134입니다. 그러나 모든 키보드에 이 기능이 있는 것은 아니며 제 노트북에는 없기 때문에 거의 사용하지 않는 마지막 남은 키인 Right Control에 바인딩하기로 결정했습니다.

xmodmap -e "keycode 105 = Mode_switch"

미국식 물리적 키보드 레이아웃이 있지만 유럽식 레이아웃 구성이 있고 일반적으로 이러한 키보드에서 Z 옆에 less/greater/bar 키가 없습니다(ISO_Backslash라고도 함, xmodmap 자체에서는 인식하지 못함). 메뉴(135)에 바인딩하고 있지만 R_Ctrl 및 Super_R을 대체하는 역할을 합니다.

나는 이것이 더러운 수정이라고 생각합니다.

두 번째 해결책그것을 알아내는 데 더 오랜 시간이 걸렸습니다. sxhkd 사용(xbindkeys 대안)

에 추가하면~/.config/sxhkd/sxhkdrc:

~ISO_Level3_Shift
    xdotool key Mode_switch

AltGR은 정상적으로 작동하지만 Mode_switch는 누를 때 전환되며(Caps Lock과 비슷하지만 Mode_switch의 경우) 이를 사용하는 모든 xmodmap 키는 AltGR을 다시 눌러 전환을 해제할 때까지 AltGR 모드로 잠깁니다. 키를 놓았을 때 자동으로 토글을 해제하는 스크립트를 만드는 것은 간단한 일이지만 그렇게 하려는 나의 시도는 아무리 말해도 다소 의심스러웠습니다.

관련 정보