Как отключить Ctrl-Insert и Shift-Insert в GNOME Terminal и Wayland

Если вы работаете с 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 минут, всё реально:

  1. Установите зависимости для сборки: sudo pacman -S base-devel git meson
  2. Клонируйте репозиторий VTE (версию берите ту, что использует ваш дистрибутив – например, для Arch это 0.78.3): git clone https://gitlab.gnome.org/GNOME/vte.git
  3. В файле src/vte.cc удалите строки 5280–5294 – они отвечают за обработку Insert с модификаторами.
  4. Соберите пакет через meson. Тут важно повторить флаги сборки оригинального пакета (посмотрите их в makepkg -s или спецификациях вашего дистрибутива).
  5. Установите модифицированный 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 остаётся единственным надёжным вариантом. Главное, не забудьте задокументировать свои изменения: через полгода легко забыть, почему терминал вдруг ведёт себя «не как у всех».

Новое
Интересное