我知道 Terminal 默认不支持PgDn和PgUp。我的键盘上没有PgDn和PgUp,但目前已将它们重新映射到不同的键,因此Shift+PgDn不起作用。我也试过Fn+ Up。如何让 Terminal 识别我重新映射的分页键?
答案1
(评论:您找到了 XKB!恭喜,这是一个可怕的兔子洞。请注意,下次 ubuntu 的 xkb-data 包更新该文件时,您的解决方案将被吹走,并会影响您插入的任何其他使用相同配置的键盘。)
XKB 遵循一种称为 RMLVO 的模型——规则、模型、布局、变体、选项。您的解决方案会更改系统模型文件,但更好的解决方案是查找或创建一个选项来添加您的覆盖。(evdev
是大多数发行版的默认规则,大多数外部键盘将使用模型pc
,尽管笔记本电脑内部模型可能有已经接近您的用例的特定变体。标准美国 QWERTY 键盘将使用us
没有变体的布局,但如果您使用其他语言,您可能会选择intl
或altgr-intl
变体。)
选项是基本功能的特定覆盖。如果您因为 CapsLock 键太差劲而想关闭它,那么已经有一个选项 ( caps:none
),或者您可以将其设置为额外的 Esc 键 ( 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 可以将其作为标准选项。本质上,这将涉及
- 将您的选项文件放入
/usr/share/X11/xkb/symbols/
(这就是为什么pgupdown
是一个好的选择,因为没有预先存在的具有该名称的符号文件) - 然后添加行
/usr/share/X11/xkb/rules/evdev*
(将optionsfile:function
命令行的格式映射到所+optionsfile(function)
使用的格式xkbcomp
) - 最后设置 DE 以使用您喜欢的布局和选项。
第 2 步:如果您需要采用这条路线,则可能需要在任何与 xkb 相关的升级之后再次执行步骤 2。
# 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/
。这些是缓存的预编译键盘映射,可能会妨碍您。
资源:
- http://madduck.net/docs/extending-xkb/
- http://apps.jcns.fz-juelich.de/doku/sc/xkbmap
- https://wiki.archlinux.org/index.php/Keyboard_configuration_in_Xorg
- https://unix.stackexchange.com/questions/66624/where-is-xkb-getting-its-configuration
- https://askubuntu.com/questions/451945/permanently-set-keyboard-layout-options-with-setxkbmap-in-gnome-unity
答案2
更改 /usr/share/X11/xkb/symbols/pc 上的键似乎有效,我无法使上面的其他答案起作用。然后,您将新键与 Shift 按钮一起使用。
key <RWIN> { [ Prior ] };
key <MENU> { [ Next ] };
答案3
默认的 Ubuntu 终端支持 pgup 和 pgdn,快捷键为 [shift]+pgup 和 [shift]+pgdn。您尝试的大多数其他终端都会有完全相同的快捷键,主要是因为 pgup 和 pgdn 已被 bash 用于某些用途,因此您无法真正使用它。
编辑:如果您需要重新映射 pgup 和 pgdn 键,您可以按照 askubuntu for linux 上的答案进行操作:
https://askubuntu.com/questions/24916/how-do-i-remap-certain-keys-or-devices/24930#24930