这不是以X/控制台不可知的方式更改控制台 (tty) 和 X 上的键盘布局/映射的副本?,其中讨论了系统范围 /etc/default/keyboard
。
我期待使用用户特定的文件~/.keyboard
,与xkb
所使用的两个X(例如,+ LXDE),以及由(内核)的虚拟控制台(VTS / TTY中)设置。
从 可以看出cat $(which setupcon)
,如果在运行时保留用户的环境,虚拟控制台可以选择用户特定的~/.keyboard
文件(或其中的一个VARIANT
)setupcon
:
sudo -E setupcon
其中setupcon
将(或多或少)转换基于XKB-~/.keyboard
设置(XKBMODEL
,XKBLAYOUT
,XKBOPTIONS
等)转换成(通过控制台键映射类型ckbcomp
)和loadkeys
将结果存入游戏机。如果不保留用户的环境,
sudo setupcon
然后/etc/default/keyboard
被捡起来。
但是,据我所知,在 X 中setxkbmap
只选取系统范围的/etc/default/keyboard
文件。特定于用户的~/.keyboard
不会被setxkbmap
. 但这正是我所需要的。换句话说,我正在尝试~/.keyboard
向setxkbmap
. 我希望能够在 X 登录时完成此操作(例如,在 中输入一行~/.xsessionrc
),并且能够~/.keyboard
在 X 中对while进行更改并通过setxkbmap
(不使用sudo
)应用它们,就像setxkbmap -option
提供一样。
请注意,我并没有尝试手动创建特定于用户的 xkb 目录层次结构并将其与xkbcomp -I
. 但是,如果有一种自动化的方法~/.keyboard
可以将其作为输入,那么这可能是一种可以接受的解决方法。
到目前为止,我看到的唯一方法是 hack:手动 parse ~/.keyboard
,提取XKBOPTIONS
然后setxkbmap -option
为每个编写一个等价物。我无法相信这种 hack 是唯一的方法,尽管看到https://who-t.blogspot.com/2020/02/user-specific-xkb-configuration-part-1.html让我质疑这种信念。
到目前为止,我正在将 Debian 与 X (+ LXDE) 一起使用。我认为这对 Wayland 没有影响,但如果有影响,请解释一下。
如果它对其他人有用,这是我上面提到的我现在最终使用的hack。
~/bin/setxkbmap.sh
解析~/.keyboard
,提取 xkb 设置,并在 X 中运行等效的 setxkbmap 命令。~/bin/setxkbmap.sh
可以手动调用,也可以在 X 启动时通过输入自动调用,例如,~/.xsessionrc
。
~/bin/setxkbmap.sh
:
#!/bin/bash
# Parse ~/.keyboard, extracting the xkb settings, and run equivalent
# setxkbmap command(s) in X.
source ~/.keyboard
setxkbmap_cmd=(setxkbmap -model "${XKBMODEL}")
setxkbmap_cmd+=(-layout "${XKBLAYOUT}")
# Clear previously-set options first; otherwise, these will be
# appended to whatever is already there.
setxkbmap_cmd+=(-option)
# -r : do not allow backslashes to escape any characters
# -a array: assign the words read to sequential indices of the array
# variable ARRAY, starting at zero
IFS=',' read -r -a xkbopts <<< "${XKBOPTIONS}"
for opt in "${xkbopts[@]}"; do
setxkbmap_cmd+=(-option "${opt}")
done
"${setxkbmap_cmd[@]}"
~/.keyboard
:
XKBMODEL="pc105"
XKBLAYOUT="us"
# ctrl: specifies options coming from /usr/share/X11/xkb/symbols/ctrl
# file.
XKBOPTIONS="ctrl:menu_rctrl,ctrl:nocaps,ctrl:swap_rwin_rctl,terminate:ctrl_alt_bksp"
~/.xsessionrc
:
# ~/.xsessionrc is sourced by Xsession (a sh script), everytime an X
# session is started. See 'man xsession' for details.
# Explicitly use bash, as ~/.xsessionrc is called by sh (dash in
# Debian 9 GNU/Linux).
bash ~/bin/setxkbmap.sh
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句