在 Debian 中,如何更改 X(通过 setxkbmap)和(内核)虚拟控制台 (TTY) 使用的单个用户特定文件中的键盘映射?

奥米德

这不是以X/控制台不可知的方式更改控制台 (tty) 和 X 上的键盘布局/映射的副本,其中讨论系统范围 /etc/default/keyboard

我期待使用用户特定的文件~/.keyboard,与xkb所使用的两个X(例如,+ LXDE),以及由(内核)的虚拟控制台(VTS / TTY中)设置。

从 可以看出cat $(which setupcon)如果在运行时保留用户的环境,虚拟控制台可以选择用户特定的~/.keyboard文件(或其中的一个VARIANTsetupcon

sudo -E setupcon

其中setupcon将(或多或少)转换基于XKB-~/.keyboard设置(XKBMODELXKBLAYOUTXKBOPTIONS等)转换成(通过控制台键映射类型ckbcomp)和loadkeys将结果存入游戏机。如果不保留用户的环境,

sudo setupcon

然后/etc/default/keyboard被捡起来。

但是,据我所知,在 X 中setxkbmap只选取系统范围的/etc/default/keyboard文件。特定于用户的~/.keyboard不会被setxkbmap. 但这正是我所需要的。换句话说,我正在尝试~/.keyboardsetxkbmap. 我希望能够在 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档