xcape 및 xkb를 사용하여 일반 키를 수정자 키로 사용

xcape 및 xkb를 사용하여 일반 키를 수정자 키로 사용

적절한 경우 Spacebar이를 수행하기 위해 Ctrl현재 GitHub 페이지에는 xcape다음이 명시되어 있습니다.

# Map an unused modifier's keysym to the spacebar's keycode and make it a
# control modifier. It needs to be an existing key so that emacs won't
# spazz out when you press it. Hyper_L is a good candidate.
spare_modifier="Hyper_L"
xmodmap -e "keycode 65 = $spare_modifier"
xmodmap -e "remove mod4 = $spare_modifier" # hyper_l is mod4 by default
xmodmap -e "add Control = $spare_modifier"

# Map space to an unused keycode (to keep it around for xcape to
# use).
xmodmap -e "keycode any = space"

# Finally use xcape to cause the space bar to generate a space when tapped.
xcape -e "$spare_modifier=space"

xkb대신에 이것을 달성하는 방법은 무엇입니까 xmodmap?

답변1

대신 다음 Hyper_RHyper_L같습니다.

콘텐츠 ~/.config/xkb/keycodes/my-keycodes:

xkb_keycodes "xcape-special" {
    <HYPR> =  65;
    <SPCE> = 207;
};

참고: 내 컴퓨터에 로드된 키코드 테이블의 207(가상) 키에 ​​대한 기본 키코드 입니다.Hyper_R

콘텐츠 ~/.config/xkb/symbols/my-symbols:

xkb_symbols "xcape-special" {
    key <HYPR>  { [ Hyper_R ] };
    modifier_map Control { <HYPR> };
};

발췌 ~/.xinitrc:

XKB_DIR="$HOME/.config/xkb"
XKB_SYMBOL_FILE="my-symbols"
XKB_KEYCODE_FILE="my-keycodes"

setxkbmap -layout "us+$XKB_SYMBOL_FILE(xcape-special)" \
    -keycodes "evdev+$XKB_KEYCODE_FILE(xcape-special)" \
    -option "" -print \
    | xkbcomp -I"$XKB_DIR" - "${DISPLAY%%.*}" >/dev/null 2>&1

xcape -e "Hyper_R=space"

이것이 유일한 구성 방법은 아닙니다 xkb. 단일 호출로 단일 파일에서 구성을 로드할 수 있습니다 xkbcomp. 하위 디렉토리는 ~/.config/xkb/의 구조만 따릅니다 /usr/share/X11/xkb/. 이 ... -print | xkbcomp ...부분은 조금 복잡하지만 유연합니다. 지금은 더 간단한 설정을 시도할 수 없습니다.

관련 정보