XKB용 키 다시 매핑

XKB용 키 다시 매핑

Scroll Lock 키를 다시 매핑하여 Windows 키의 키코드를 생성하려고 합니다.

우선 현재 키맵을 덤프합니다.

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"

xev아직도 나한테 보여줘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입니다.성공.

관련 정보