Если вы работаете с Midnight Commander в GNOME Terminal под Wayland, наверняка сталкивались с тем, что Shift-Insert и Ctrl-Insert не вставляют/копируют текст в mcedit. Всё потому, что эти комбинации перехватываются где-то на уровне окружения – но не в настройках GNOME, как можно было бы подумать. Давайте разберёмся, как вернуть управление клавишами терминалу, чтобы mcedit работал «из коробки» даже при SSH-подключениях.
Почему клавиши не работают и как это исправить
Проблема кроется в VTE – движке терминала, который использует GNOME Terminal (и не только он). В его исходном коде есть жёстко прописанные обработчики для Shift-Insert и Ctrl-Insert. Они зарезервированы для вставки из буфера и clipboard (да, в Linux их два), поэтому нажатия просто не доходят до приложений вроде mcedit.
Решение – перекомпиляция VTE с правками. Это звучит сложно, но если вы готовы потратить 20–30 минут, всё реально:
- Установите зависимости для сборки: sudo pacman -S base-devel git meson
- Клонируйте репозиторий VTE (версию берите ту, что использует ваш дистрибутив – например, для Arch это 0.78.3): git clone https://gitlab.gnome.org/GNOME/vte.git
- В файле src/vte.cc удалите строки 5280–5294 – они отвечают за обработку Insert с модификаторами.
- Соберите пакет через meson. Тут важно повторить флаги сборки оригинального пакета (посмотрите их в
makepkg -s
или спецификациях вашего дистрибутива). - Установите модифицированный VTE поверх системного. После перезапуска GNOME Terminal клавиши начнут «пробиваться» в терминал.
Внимание: после обновлений системы перекомпилированная версия может затереться. Чтобы этого избежать, добавьте пакет в IgnorePkg в /etc/pacman.conf (если используете Arch).
Кстати, если не хотите возиться со сборкой, есть альтернативы – например, перейти на терминал, не основанный на VTE. Kitty или Alacritty отлично работают с Wayland и не перехватывают Insert-комбинации. Но это, конечно, компромисс: придётся менять привычный workflow.
Обходные пути без перекомпиляции
Если правка исходников кажется слишком радикальной, попробуйте эти варианты:
Переназначение клавиш в Midnight Commander. В ~/.config/mc/ini добавьте:
[Midnight-Commander]
edit_copy=ctrl+alt+c
edit_paste=ctrl+alt+v
Не идеально, зато не требует прав окружения. Но, это ломает универсальность при работе с разными серверами.
Использование xkb для переопределения клавиш. Создайте файл /usr/share/X11/xkb/symbols/custom с правилами:
partial modifier_keys
xkb_symbols "mc_fix" {
key { [ Insert, Insert ] };
modifier_map Control { };
};
Затем подключите его через setxkbmap -symbols “pc+us+custom”. Способ работает только в Xorg, увы – под Wayland придётся искать другие методы.
Интересный момент: если запустить cat
и нажать Shift-Insert, терминал не выведет никаких escape-последовательностей (в отличие от Del с модификаторами). Это подтверждает, что VTE «глотает» события – и никакие настройки GNOME тут не помогут.
Как видите, проблема упирается в особенности реализации терминала. Иногда проще смириться и выбрать другой редактор в MC (например, nano), но если принципиально нужен именно mcedit – перекомпиляция VTE остаётся единственным надёжным вариантом. Главное, не забудьте задокументировать свои изменения: через полгода легко забыть, почему терминал вдруг ведёт себя «не как у всех».