X11의 Alt 키에 다른 수정자를 어떻게 할당합니까?

X11의 Alt 키에 다른 수정자를 어떻게 할당합니까?

목적:

CapsLock 키에 Alt를 할당하고 Alt 키에 Meta를 할당하고 싶습니다. 하지만 이 경우 Alt 키는 더 이상 Alt 키로 인식되지 않고, CapsLock 키도 더 이상 CapsLock 키로 인식되지 않습니다.

SUSE 11.4 열기

전에:

openSUSE 11.1 - 저는 제 컴퓨터의 유일한 사용자이기 때문에 /usr/share/X11/xkb/keycodes/xfree86 파일을 "단순히" 편집했고 문제 없이 작동했습니다. 키는 가장 낮은 수준의 기호에 연결됩니다.

질문:

  1. xkb

    나는 (테스트를 위해) 다음 항목으로 구성된 폴란드 레이아웃(pl_ext)의 변형을 만들었습니다.

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    

    그러나 이것은 전혀 효과가 없습니다. xev의 CapsLock 키는 Alt_L로 인식(기호화)되지만 CapsLock 키를 누르면 CapsLock처럼 동작합니다(예: 메뉴에 파일이 있다고 가정하면 Alt+F를 누르면 이 메뉴가 열립니다. 하지만 그렇지 않습니다).

    질문:CapsLock 키를 Alt로 설정하고 Alt 키를 Meta로 설정하려면 레이아웃 파일을 어떻게 정의합니까?

    편집하다:이것은 전투의 절반입니다! 이제 다음과 같은 항목이 있습니다.

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { <CAPS> }; // this is a difference
    

    이것은 예상대로 작동합니다. 다음은 수행되지 않습니다.

    key <LALT> { [ Meta_L ] } ;
    key <RALT> { [ Meta_R ] } ;
    modifier_map Mod5 { <LALT>,<RALT> };
    

    Alt 키는 xev에서 Meta로 인식되지만 여전히 Alt+F를 사용하여 메뉴를 열고 창을 전환할 수 있지만 그렇게 해서는 안 됩니다. 반면에 국가 문자는 입력할 수 없지만 입력해야 합니다.

  2. 자유 86

    하지만 이제는 작동하지 않습니다. xfree86 대신 다른 파일 테이블을 읽는 것 같습니다.

    질문:시스템(X/Gnome)이 어떤 키맵 파일을 사용하는지 어떻게 알 수 있나요?

    편집하다:나에게 가장 적합한 옵션인 키코드 테이블 편집이 해결되었습니다.마시아스의 답변!

  3. xmodmap

    이것은 전투의 절반입니다. 이 부분은 예상대로 작동합니다.

    잠금 삭제 = Caps_Lock 키심 Caps_Lock = Alt_L

    이제 Alt에 매핑된 실제 CapsLock 키가 있습니다. 하지만 이것은:

    주요 기호 Alt_L = Meta_L

    ...이상한 짓을 했어. xev는 Alt 키가 Meta에 매핑되어 있음을 보여 주지만 Alt+F(Meta+F에 매핑되어야 함 -> 아무 작업도 수행하지 않음)를 누르면 파일 메뉴가 열립니다. 게다가 Alt+Tab을 누르면 창 전환기가 표시됩니다(그러면 안 됩니다. Alt는 이제 Meta입니다).

    질문:Alt 키의 이전 동작을 "제거"하는 방법은 무엇입니까?

    편집하다:이 부분의 해결방법은자일스의 대답.

요약:

어떤 질문에든 대답하면 내 문제가 (희망적으로) 해결될 것이지만 xkb의 모든 파일을 패키지하고 한 곳에서 레이아웃을 변경할 수 있기 때문에 xkb를 완전히 사용하는 것을 선호합니다. 도움을 주셔서 미리 감사드립니다!

답변1

키 코드 방법 편집

폴란드 우분투 포럼에서 답을 찾았습니다. 이제 "xfree86" 파일을 편집하는 대신 "evdev" 파일을 편집합니다. 이렇게 하면 모든 레이아웃에 적용되는 영구적인 변경을 수행할 수 있습니다.

예(Gilles의 요청) - 루트로 로그인하고 다음으로 이동합니다.

/usr/share/X11/xkb/keycodes

"evdev" 파일을 백업한 후 편집하세요. 내 경우처럼 원하는 대로 코드를 변경합니다.

<LALT> = 66; // when I press CapsLock (66 code) system will report pressing LeftAlt
<LMTA> = 64; // I will get LeftMeta when pressing LeftAlt (64 code)

"xev" 명령을 실행하면 코드를 찾을 수 있지만 원본 "evdev" 파일만 보면 됩니다.

로그아웃했다가 로그인하여 새 키보드를 즐겨보세요 :-).

답변2

(이 답변은 단지 xmodmap에 관한 것입니다. XKB를 사용하여 수행할 수 있다고 확신하지만 방법은 모르겠습니다.)

수정자와 키 기호는 독립적으로 할당됩니다. 하지만 일관되지 않게 설정하면 이상한 효과가 나타납니다. 수정자 키를 지우고 다시 할당해야 할 수도 있지만 누락된 것은 add에 수정자를 할당하는 명령 뿐이라고 생각합니다 . and 를 , and 로 바꿀 Meta_L수 있습니다 . 서로 바꿔 사용할 수 있습니다. 단, 하나를 두 가지 다른 목적으로 사용하지 않도록 주의하세요.Mod1Mod2Mod3Mod4Mod5

clear Mod1
clear Mod2
remove Lock = Caps_Lock
keysym Caps_Lock = Alt_L
keysym Alt_L = Meta_L
add Mod1 = Alt_L Alt_R
add Mod2 = Meta_L Meta_R

답변3

이 시도:

    key <CAPS>  { [ Alt_L, Alt_L ] };
    key <LALT> { [ Meta_L, Meta_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    modifier_map Mod5 { Meta_L, Meta_R };

두 수준의 정의를 참고하세요. 이는 LALT의 기본값이 [Alt_L, Meta_L]이기 때문입니다. 두 번째 값을 다시 정의하지 않으면 Meta_L로 유지됩니다.

보고 있다이 답변은 xkb에 있습니다.기본 기본 파일을 편집하지 않고 특정 키를 재정의하는 방법을 알아보세요(루트가 필요하지 않음). 이 경우 다음과 같이 로컬 기호 파일에 작은 섹션을 포함해야 합니다.

partial modifier_keys
xkb_symbols "capsasalt_altasmeta" {
        replace key <CAPS>  { [ Alt_L, Alt_L ] };
        replace key <LALT> { [ Meta_L, Meta_L ] };
        modifier_map Mod1 { Alt_L, Alt_R };
        modifier_map Mod5 { Meta_L, Meta_R };
};

관련 정보