Wil*_*iam 4 linux linux-terminal
我了解默认情况下终端不支持PgDn和PgUp. 我的键盘上没有PgDn和PgUp,但目前将它们重新映射到不同的键,因此Shift+PgDn不起作用。我也试过Fn+ Up。如何让终端识别我重新映射的分页键?
qui*_*tic 10
(评论:你找到了 XKB!恭喜,掉下来真是个兔子洞。注意你的解决方案将在下次 ubuntu 的 xkb-data 包更新该文件时被吹走,并且会影响你插入的任何其他键盘使用相同的配置。)
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)" };
};
Run Code Online (Sandbox Code Playgroud)
创建您的覆盖文件:
$ mkdir -p .config/xkb/symbols
$ touch .config/xkb/symbols/pgupdown
Run Code Online (Sandbox Code Playgroud)
现在使用您最喜欢的编辑器编辑新文件并输入以下内容:
// 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 ] };
};
Run Code Online (Sandbox Code Playgroud)
现在创建一个基本的键盘映射:
$ setxkbmap -print > ~/.config/xkb/mymap
Run Code Online (Sandbox Code Playgroud)
编辑该文件,并将您的新选项添加到以下格式的符号列表中+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)" };
};
Run Code Online (Sandbox Code Playgroud)
如果您稍后决定更喜欢菜单键上的 PgUp,只需将其替换rwinmenu
为menurwin
那里,您就可以开始了。
现在您可以使用以下命令加载该文件xkbcomp
:
$ xkbcomp -I$HOME/.config/xkb $HOME/.config/xkb/mymap $DISPLAY
Run Code Online (Sandbox Code Playgroud)
启动xev
(从x11-utils
包中)并按键以确保加载更改:
# sed to scrape out non-kbd events; xev is pretty spammy
$ xev | sed -ne '/^KeyPress/,/^$/p'
Run Code Online (Sandbox Code Playgroud)
如果你把所有东西都放在正确的地方,你的菜单键应该发送 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
)第 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! ....
Run Code Online (Sandbox Code Playgroud)
第 3 步:检查localectl
您的系统是否可用。 localectl
可以配置虚拟控制台键盘以及设置系统默认的 X11 键盘。由于这两个选项都在规则文件中设置,您可以在这些命令中使用rwinmenu
或menurwin
。
$ localectl set-x11-keymap us pc "" pgupdown:rwinmenu
# format [layout] [model] [variant] [option1,...,optionN]
Run Code Online (Sandbox Code Playgroud)
对于 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']"
Run Code Online (Sandbox Code Playgroud)
Gnome 的另一个选项可能是禁用其键盘设置;这应该允许 localectl 选项或 user-config 选项保持有效:
$ gsettings set org.gnome.settings-daemon.plugins.keyboard active false
Run Code Online (Sandbox Code Playgroud)
疑难解答:如果您的更改似乎没有被接受,并且您确定文件格式正确,请*.xkm
从/var/lib/xkb/
. 这些是缓存的预编译键映射,可能会妨碍您。
资源:
归档时间: |
|
查看次数: |
2517 次 |
最近记录: |