Вначале я признаю, что сопоставление клавиш 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 выполняет "магию", чтобы гарантировать отправку правильного кода в зависимости от долгого нажатия.
Все это работает нормально, однако это нарушает мою программу блокировки экрана (i3lock), которая выполняет некоторые манипуляции с картой клавиатуры X перед ее запуском. Сбой со следующим сообщением:
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?