2

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

3 ответа3

6

(комментарий: вы нашли XKB! Поздравляю, это адская кроличья нора, чтобы упасть. обратите внимание, что ваше решение будет взорвано в следующий раз, когда пакет ukntu-data для ubuntu обновит этот файл и повлияет на любые другие подключаемые вами клавиатуры, использующие ту же конфигурацию.

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/ . Это кэшированные предварительно скомпилированные таблицы ключей, которые могут мешать вам.

Ресурсы:

2

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

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

Терминал 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#24930

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .