처음에는 X의 키 매핑이 나를위한 약간의 검은 예술이라는 것을 인정할 것입니다. 주로 SO 및 SU와 같은 곳에서 예제를 복사하여 붙여 넣고 작동하는지 확인하십시오. 그러나이 경우 xcape와 i3lock이 잘 어울리게 된 일을 더 잘 이해해야합니다.
xcape 유틸리티를 사용하여 길게 누를 때 리턴 키를 대체 컨트롤에 매핑하는 것을 처리하고 눌렀다 놓을 때 여전히 일반 키 누름으로 작동합니다. 이에 대한 설정은 다음과 같습니다.
if [ -e ${XCAPE} ]; then
killall xcape 2> /dev/null
${XMODMAP} -e 'keycode 36 = 0x1234'
${XMODMAP} -e 'add control = 0x1234'
${XMODMAP} -e 'keycode any = Return'
${XCAPE} -e '0x1234=Return'
KEYMAPS="${KEYMAPS} StRet->Ctrl"
fi
이것을 이해하면 리턴 키 (36)를 가짜 키 (0x1234)로 다시 매핑합니다. 그런 다음 맵을 수정하여 컨트롤도 (0x1234)에 매핑됩니다. 그런 다음 xcape는 "마법"을 수행하여 길게 누를 때 올바른 키 코드가 전송되도록합니다.
이것은 모두 잘 작동하지만 시작하기 전에 X 키보드 맵을 약간 조작하는 화면 잠금 프로그램 (i3lock)을 중단합니다. 다음 메시지와 함께 실패합니다.
Error: (unknown file):1092:13: syntax error
Error: Failed to parse input xkb file
[i3lock] xkb_keymap_new_from_file failed
i3lock: Could not load keymap
키 맵을 덤프하기 위해 디버깅을 추가하면 혼란이 발생한 다음 줄이라고 생각했습니다.
xkb_symbols "pc_gb_inet(evdev)_ctrl(nocaps)" {
name[group1]="English (UK)";
key <> { [ Return ] };
key <ESC> { [ Escape ] };
key <AE01> {
...
무슨 일이 일어 났습니까? 둘은 근본적으로 호환되지 않습니까? i3lock을 실행하기 전에 키맵을 부분적으로 복원해야합니까?