AltGr과 관련된 xmodmap 바인딩이 일부 키에서만 작동하는 이유는 무엇입니까?


12

AltGR + Right_Windows를 다시 매핑하고 싶지만 방법을 알 수 없습니다. 무엇을 시도하든 오른쪽 alt를 누르거나 누르지 않을 때 올바른 windows 키를 누르면 이름 키 심이 나타납니다.

이것들은 지금 테스트중인 xmodmap 파일의 내용입니다. 내 키보드에서 38은 "a"의 키 코드이고 48은 aportrophe / doublequote의 키 코드이고 134는 오른쪽 창 키의 키 코드입니다.

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 + apostrophe를 누르면 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)

정확히 무슨 일이 일어나고 있는지 모르지만 아직 그렇게하지 않았다면 xev다양한 키 조합을 실행 하고 눌러 하드웨어와 Xwindows 레벨까지 구별 할 수있는 키 누르기가 시작되는지 확인할 수 있습니다.
Joe

나는 똑같은 문제를 겪고 있습니다. 쉼표와 점을 수정하여 체코 어와 영어의 큰 따옴표 ( „/“/”)를 인쇄하도록 지원하고 싶었습니다. 그렇지 않으면 compose 키를 사용하여 작성해야합니다. us(cz_sk_de)키보드 레이아웃과 xmodmap을 사용 하고 있습니다.
Pavel Šimerda

그래서 지금 무엇? 다른 현상금을 낭비하거나 문제를 잘 설명 할 때 새로운 질문을 시작하는 것은 실용적이지 않습니다. xorg의 버그처럼 보이지만 참조를 찾지 못했습니다. 자동 답변을 받았음에도 불구하고 기존 답변은 분명히 잘못되었습니다.
Pavel Šimerda

나는 일을 알고있는 다른 키 바인드를 포기하고 사용했다 : / 이것이 버그처럼 보이지만 어떤 시스템이 어떤 시스템과 관련이 있고 어디에보고
해야하는지 모르겠다

여기에 몇 가지 정보가 있습니다 ... blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html
Pavel Šimerda

답변:


7

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

내 연구 결과를 적을 시간이다.

나는 xmodmap에서 뭔가를 놓쳤을 것이라고 생각했으며 잘 문서화되지 않았고 사람들이 혼란 스럽다고 생각했습니다. 그러나 XKB 및 xmodmap에 관한 X.Org 디자인은 어리석은 것으로 나타났습니다.

에픽 실패 : xmodmap

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

참조 : http://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

해결 방법 : Mode_switch

이 해결 방법은 @ Ned64의 답변에 설명되어 있습니다. AltGr에서 (으) ISO_Level3_Shift로 다시 매핑 할 수 있습니다 Mode_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) 체코 어, 영어 인용 부호와의 조합을 사용하여 타원 입력 할 수 있습니다 ,, ., ShiftAltGr사용하여 해당 키 매핑 키 및 / 또는 (2) xmodmap지금은 정의되어 있는지를.

주요 단점은 setxkbmap키보드 레이아웃을위한 임의의 위치를 ​​지원하지 않는 것이므로 홈 디렉토리 대신 시스템 구성에 기록해야합니다.

결론

이것은 키 엔지니어링과 수정 자 조합을 기호로 매핑하는 것과 같은 사소한 일이 문제가되는 X.Org의 과도하게 설계되고 나쁜 디자인의 예인 것 같습니다. 이 도구는 부작용없이 사용자 구성에서 개별 키 매핑을 변경하는 합리적인 방법을 제공하지 않는 것 같습니다.


"AltGr을 사용하기 위해 어떤 키의 동작을 확장 할 수 없습니다"-이것이 문제가 된 것처럼 보입니다! 감사.
hugomg

5

1 단계 : AltGr 사용 가능

AltGr 키를 다음 Mode_switch과 같이 다시 매핑하면 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명령을 수행하고 기본 키보드의 모든 수정 사항을 파일에 작성하십시오. 이는 완전한 키맵을로드하는 것보다 빠릅니다. 로그인 할 때마다 그리고 프로세스에 의해 키맵이 재설정 될 때마다이 스크립트를 시작하십시오.

나는 솔라리스, IRIX 및 리눅스 환경에서 수년에 걸쳐 이것을 많이 실험 해 왔으며 이것이 알기에는 이것이 AltGr을 작동시킬 수있는 유일한 솔루션이며 20 년 이상 나에게 잘 작동했다.


1
이를 통해 오른쪽 창 키가 "1"대신 "3"으로 작동하기 시작했습니다. 그러나 이제는 기존의 모든 altgr 수정자가 작동을 멈췄습니다 (작동하려면 "3"대신 "5"
여야했을

시도해 주셔서 감사합니다. 게시하시기 바랍니다 xmodmap -pmxmodmap -pke | grep -w SOMECHANGEDKEY더 이상 작동하지 않는 키에 대해,이 상황이다.
Ned64

( xmodmap따라서 출력에 따라 새 수정자를 추가해야합니다 )
Ned64

xmodmap -pke | grep Alt_R내 시스템에서 결과를 반환하지 않습니다. 내 시스템은 Gentoo 안정된 Lenovo ThinkPad X230입니다. 나는 또한 grep -i아무 소용없이 노력했다 .
Pavel Šimerda

나는 그것을 시도했고 문제는 악센트 문자가 us(cz_sk_de)나를 위해 작동을 멈췄다는 것입니다. 따라서이 답변은 저에게 효과적이지 않으며 많은 사람들에게 효과적이지 않습니다.
Pavel Šimerda

1

분명히 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 옆에있는 덜 / 큰 / 바 키 (xmodmap 자체로는 인식되지 않지만 ISO_Backslash라고도 함)가 누락되었습니다. 메뉴 (135)에 바인딩했지만 R_Ctrl 및 Super_R의 대안으로 사용할 수 있습니다.

이것은 내가 생각하는 더러운 수정입니다.

두 번째 해결 방법 은 알아내는 데 시간이 조금 더 걸렸습니다. sxhkd 사용 (xbindkeys 대안)

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

~ISO_Level3_Shift
    xdotool key Mode_switch

AltGR은 정상적으로 작동하지만, 누르면 누르면 Mode_switch가 전환되고 (caps lock과 비슷하지만 Mode_switch의 경우) AltGR을 다시 누르면 전환 할 때까지 AltGR 모드로 잠 깁니다. 키를 놓을 때 스크립트를 자동으로 해제하도록 스크립트를 만드는 것은 간단한 일이지만 내 시도는 매우 번거 롭습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.