무슨 일이 일어나고 있는지 이해하려고 노력 중

무슨 일이 일어나고 있는지 이해하려고 노력 중

키보드 설정을 시도하고 있는데 편의를 위해 Windows 키를 탭으로 다시 매핑하고 싶습니다. 그래서 시도해 보았습니다(133은 키보드의 왼쪽 수퍼 키입니다).

xmodmap -e "keycode 133 = Tab Super_L"

그러나 Windows 키를 누르면 여전히 "창" 메뉴가 나타나고 탭이 삽입되지 않기 때문에 이 방법은 작동하지 않습니다. Shift+super에서 탭을 발생시키는 것과 같은 동일한 테마의 일부 다른 변형도 작동하지 않습니다.

저는 lightdm과 함께 cinnamon(우분투 16.04의 ppa에서 설치됨)을 사용하고 있는데 창/슈퍼 키가 더 낮은 수준에서 가로채고 xmodmap이 이를 처리할 수 없다고 상상합니다... 내가 원하는 것을 달성할 수 있는 방법이 있습니까? xmodmap과 관련되지 않은 답변을 환영합니다!

(저는 전문가와는 거리가 멀기 때문에 아주 간단한 해결책이 있을지도 모르겠습니다...)

답변1

무슨 일이 일어나고 있는지 이해하려고 노력 중

인수 없이 입력 하면 xmodmap(수정자 목록을 얻기 위해) 다음과 같은 결과를 얻습니다.

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)
mod1        Alt_L (0x40),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        ISO_Level5_Shift (0x69)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

중요한 부분은 mod4...그곳이 바로 그 곳이기 때문입니다 Super_L.

이제 다음을 실행 xmodmap -e "keycode 133 = Tab Super_L" && xmodmap | grep mod4하고 다음을 얻습니다.

mod4        Tab (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)

라인 mod4이 변경 및 추가되었습니다 Tab. 이것이 바로 키가 133여전히 창 메뉴를 여는 이유입니다.

그런데 지금 시도해보는 중이 I3WM라 결과가 조금 다를 수도 있어요.
예를 들어 터미널이나 텍스트 편집기에서 키를 누르면 133탭 문자가 쓰여지고 수정자가 됩니다.

Shift또한 키 유형이 이기 때문에 다른 동작이 발생하지 않는다는 점도 확인했습니다 ONE_LEVEL.

xev | grep key실행하여 특정 키 조합에 어떤 일이 발생하는지 확인할 수도 있습니다 .

해결책

그러나 xmodmap또한 수정자당 4개 이상의 키를 가질 수 없다는 점을 알려주므로 해결책(지금까지 나에게 효과가 있었던 유일한 방법)은 사용하지 않거나 가지고 있지 않은 키를 희생하여 Super_L.

를 사용하는 경우 QWERTY다음 위치에 있는 레이아웃을 수정하고 /usr/share/X11/xkb/symbols/us(다른 레이아웃을 사용하는 경우 일반적으로 동일한 폴더에 있는 다른 파일임) 다음과 같이 작성할 수 있습니다.

key.type[Group1] = "TWO_LEVEL";
key <MENU>{[Super_L]}; // ONE or TWO level, assuming MENU key isn't used
key <LWIN>{[ Tab, Super_L]}; // should be TWO_LEVEL
key.type[Group1] = "ONE_LEVEL";

대신 (아마도 파일의 14번째 줄)

 key <LWIN>{[Super_L]};

그런 다음 를 사용하여 키보드 레이아웃을 업데이트합니다 setxkbmap us && xmodmap | grep mod4.
다음과 같은 결과를 얻게 됩니다:

mod4        Super_R (0x86),  Super_L (0x87),  Super_L (0xce),  Hyper_L (0xcf)

그래도 얻을 수 있다면 Tab아마도 다른 키를 희생해야 할 것입니다. 0x8516진수 값 Yes는 해당 키가 직접 키가 아니지만 133을 누르면 mod4여전히 창 키처럼 동작할 수 있음을 의미 합니다 .Shift

관련 정보