XKB 키 다시 매핑

XKB 키 다시 매핑

모든 Windows 키에 대한 키코드를 생성하도록 Scroll Lock 키를 다시 매핑하려고 합니다.

먼저 현재 키맵을 덤프합니다.

xkbcomp $DISPLAY original-dump

그런 다음 관심 있는 키의 키코드를 찾으세요.

cat original-dump | grep SCLK
 <SCLK> = 78;

 cat original-dump | grep LWIN
 <LWIN> = 133;

이제 구성 요소 이름을 파일로 인쇄합니다.

setxkbmap -print > original-components

키 코드 수정 사항을 추가하려면 파일을 편집하세요.

    xkb_keymap {
    xkb_keycodes  { 
        include "evdev+aliases(qwerty)" 
        // Remap Scroll-lock to the keycode of LWIN(133)
        <SCLK> = 133;
    };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"  };
    xkb_symbols   { include "pc+us+inet(evdev)" };
    xkb_geometry  { include "pc(pc105)" };
    };

위 파일을 수정된 구성 요소로 저장하고 다음을 실행합니다.

xkbcomp modified-components $DISPLAY

다시 덤프하십시오.

xkbcomp $DISPLAY original-dump

키코드 확인:

cat another-dump | grep SCLK
<SCLK> = 133;

지금까지는 괜찮았지만 xevScroll Lock 키에 대한 키코드를 실행하면 여전히78.

내가 실행하면 :

xmodmap -e "keycode 78 = Super_L"

시프아직도 보여줘78, 그러나 최소한 LWIN 및 RWIN용으로 XFCE에서 만든 단축키는 작동합니다.

내가 뭘 잘못했는지 알고 싶어xkb. 감사해요.

답변1

다음과 같은 새로운 접근 방식을 시도했습니다(성공).

sclkfile이 디렉터리에 새 파일을 만들고 /usr/share/X11/xkb/symbols/다음 콘텐츠를 추가합니다.

 // Make the Scroll Lock key a left Super.
xkb_symbols "sclk_super" {
    replace key <SCLK> { [ Super_L ] };
    modifier_map  Mod4 { <SCLK> };
};

새로운 규칙이 추가되었습니다 /usr/share/X11/xkb/rules/evdev:

sclkoption:sclk_super = +sclkfile(sclk_super)

그리고 규칙에 대한 설명은 다음과 같습니다 /usr/share/X11/xkb/rules/evdev.lst.

! option
sclkoption           Scroll Lock behaviour
sclkoption:sclk_super Scroll Lock is Super

여기에도 /usr/share/X11/xkb/rules/evdev.xml:

<configItem>
        <name>sclkoption</name>
        <description>Scroll Lock behaviour</description>
</configItem>    
<option>
    <configItem>
        <name>sclkoption:sclk_super</name>
        <description>Scroll Lock is Super</description>
    </configItem>
</option>

마지막으로 실행:

$ setxkbmap -option sclkoption:sclk_super

레이아웃의 구성요소를 인쇄할 때 오류가 없습니다.

$ setxkbmap -print
xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+us+inet(evdev)+sclkfile(sclk_super)"     };
        xkb_geometry  { include "pc(pc105)"     };
};

새로운 규칙이 있습니다.

이제 실행하면 xev:

keycode 78 (keysym 0xffeb, Super_R)

키코드는 여전히 78이지만 키 기호는 Super_R입니다.성공.

관련 정보