Сделайте так, чтобы Терминал распознавал PageUp и PageDown при переназначении на разные ключи

Я понимаю, что Терминал по умолчанию не поддерживает PgDn и PgUp. У меня нет клавиатуры PgDn и PgUp, но в настоящее время они переназначены на разные клавиши, поэтому Shift+PgDn не работает. Я также пробовал Fn+Up. Как я могу заставить Терминал распознавать мои переназначенные ключи пейджинга?

3 ответа

Решение

(комментарий: вы нашли XKB! поздравляю, это адская нора! которые используют ту же конфигурацию.)

XKB следует модели RMLVO - Правила, Модель, Макет, Вариант, Опции. Ваше решение изменяет файл модели системы, но лучшим решением было бы найти или создать опцию для добавления переопределений. ( evdev является правилом по умолчанию для большинства дистрибутивов, и большинство внешних клавиатур будет использовать pc модель, хотя внутренние модели ноутбуков могут иметь определенные варианты, которые уже близки к вашему сценарию использования. Стандартная клавиатура QWERTY США будет использовать us макет без варианта, хотя вы можете выбрать intl или же altgr-intl варианты, если вы работаете с другими языками.)

Параметры - это конкретные переопределения основных функций. Если вы хотите отключить CapsLock, потому что этот ключ просто отстой, для этого уже есть возможность ( caps:none ), или вы можете установить вместо него дополнительную клавишу Escape ( caps:escape ). Вы можете увидеть конкретные переопределения в /usr/share/X11/xkb/symbols/caps ; каждая строфа - это отдельная опция, которую вы можете включить во время выполнения.

Если вы делаете setxkbmap -print Вы должны получить список ваших текущих настроек XKB:

$ setxkbmap -print
xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete"  };
    xkb_compat    { include "complete"};
    xkb_symbols   { include "pc+us+inet(evdev)" };
    xkb_geometry  { include "pc(pc105)" };
};

Создайте свой файл переопределения:

$ mkdir -p .config/xkb/symbols
$ touch .config/xkb/symbols/pgupdown

Теперь отредактируйте новый файл в вашем любимом редакторе и добавьте следующее:

// mapping PgUp and PgDown to other keys
partial alphanumeric_keys
xkb_symbols "rwinmenu" {
    key <RWIN> { [ Prior     ]   };
    key <MENU> { [ Next      ]   };
};

// same but switched
partial alphanumeric_keys
xkb_symbols "menurwin" {
    key <MENU> { [ Prior     ]   };
    key <RWIN> { [ Next      ]   };
};

Теперь создайте базовую раскладку:

$ setxkbmap -print > ~/.config/xkb/mymap

Отредактируйте этот файл и добавьте новую опцию в список символов в формате +optionfile(function) :

xkb_keymap {
    xkb_keycodes  { include "evdev+aliases(qwerty)" };
    xkb_types     { include "complete" };
    xkb_compat    { include "complete"};
    xkb_symbols   { include "pc+us+inet(evdev)+pgupdown(rwinmenu)" };
    xkb_geometry  { include "pc(pc105)" };
};

Если позже вы решите, что предпочитаете PgUp вместо клавиши меню, просто замените rwinmenu с menurwin туда и тебе хорошо идти.

Теперь вы можете загрузить этот файл с xkbcomp :

$ xkbcomp -I$HOME/.config/xkb $HOME/.config/xkb/mymap $DISPLAY

запуск xev (от x11-utils пакет) и нажмите клавиши, чтобы убедиться, что изменения загружены:

# sed to scrape out non-kbd events; xev is pretty spammy
$ xev | sed -ne '/^KeyPress/,/^$/p'

Если вы получили все в нужных местах, ваша клавиша меню должна отправлять события Next, а клавиша Win_R отправляет Prior. Если это работает, вы можете добавить выше xkbcomp командовать вашим .xinitrc или же .xprofile поэтому он запускается при входе в систему или при запуске X.

... если вы не используете Gnome. (и / или, возможно, KDE.) Затем мы идем дальше по кроличьей норе и выясняем, как включить эту новую опцию в системные файлы, чтобы DE могли выбрать ее в качестве стандартной опции. По сути, это будет включать

  1. размещение вашего файла опций в /usr/share/X11/xkb/symbols/ (вот почему pgupdown был хорошим вариантом выбора, так как не существует ранее существующего файла символов с таким именем)
  2. а затем добавление строк в /usr/share/X11/xkb/rules/evdev* (чтобы отобразить optionsfile:function Формат командной строки в +optionsfile(function) использован xkbcomp )
  3. и, наконец, установка DE для использования предпочитаемого макета и параметров.

Шаг 2: Если вам нужно пойти по этому пути, вам может потребоваться выполнить шаг 2 снова после любых обновлений, связанных с xkb.

# in /usr/share/X11/xkb/rules/evdev
# find the line that starts "! option = symbols" and add new lines:
  pgupdown:rwinmenu = +pgupdown(rwinmenu)
  pgupdown:menurwin = +pgupdown(menurwin)

# in /usr/share/X11/xkb/rules/evdev.lst
# find the line that starts "! option" and add a new line:
  pgupdown:rwinmenu          PgUp on RWin, PgDown on Menu
  pgupdown:menurwin          PgUp on Menu, PgDown on RWin

# in /usr/share/X11/xkb/rules/evdev.xml
# .... ummm .... ¯\_(ツ)_/¯  .... sorry! ....

Шаг 3: проверьте, если localectl доступно в вашей системе. localectl может настраивать клавиатуры виртуальной консоли, а также настраивать системную клавиатуру X11. Поскольку оба параметра настроены в файлах правил, вы можете использовать либо rwinmenu или же menurwin в этих командах.

$ localectl set-x11-keymap us pc "" pgupdown:rwinmenu
#  format               [layout] [model] [variant] [option1,...,optionN]

Для Gnome вам нужно использовать dconf-editor или же gsettings :

# set layout/variant
$ gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us')]"

# set options
$ gsettings set org.gnome.desktop.input-sources xkb-options "['pgupdown:rwinmenu']"

Другим вариантом для Gnome может быть отключение настроек клавиатуры; это должно позволить либо опции localectl, либо опции user-config оставаться в силе:

$ gsettings set org.gnome.settings-daemon.plugins.keyboard active false

Устранение неполадок: если кажется, что ваши изменения не подобраны, и вы уверены, что правильно отформатировали файл, удалите все *.xkm файлы из /var/lib/xkb/ , Это кэшированные предварительно скомпилированные таблицы ключей, которые могут мешать вам.

Ресурсы:

Изменение ключей в /usr/share/X11/xkb/ символы /pc, кажется, работает, я не мог заставить работать другой ответ выше. Затем вы используете новые клавиши с кнопкой Shift.

key <RWIN> {    [ Prior     ]   };
key <MENU> {    [ Next          ]   };

Терминал Ubuntu по умолчанию поддерживает pgup и pgdn, горячие клавиши [shift]+pgup и [shift]+pgdn. Большинство других терминалов, которые вы используете, будут иметь те же самые ярлыки, в основном потому, что pgup и pgdn уже используются bash для определенных вещей, поэтому вы не можете их использовать.

редактировать: если вам нужно переназначить ключи pgup и pgdn, вы можете следовать этому ответу на askubuntu для linux:

https://askubuntu.com/questions/24916/how-do-i-remap-certain-keys-or-devices/24930

Другие вопросы по тегам