我正在将为 Arch 编写的 shell 脚本移植到 Debian。
相关部分:
keymaps=$(localectl list-keymaps)
if test -n "${1}" && localectl list-keymaps | grep -q "${1}"
then
keymap="${1}"
else
exec 3>&1
keymap=$(/sbin/dialog --title "Keyboard layout" --menu "Choose a keyboard layout" 25 50 20 $(for item in ${keymaps[@]}; do echo ${item} "-" ; done) 2>&1 1>&3) || exit 1
exec 3>&-
fi
localectl set-keymap ${keymap}
if [[ $DISPLAY ]] && [[ -r /etc/X11/xorg.conf.d/00-keyboard.conf ]]; then
# X11 is already running
x11keymap=$(awk '/^\s*Option "XkbLayout"/ { print $3 }' /etc/X11/xorg.conf.d/00-keyboard.conf)
setxkbmap -layout ${x11keymap}
fi
问题是,localectl list-keymaps
并且localectl set-keymap ${keymap}
似乎不适用于 Debian 系统。我做了一些研究,发现这是因为 Debian 没有像 Fedora 和 Arch 那样使用纯粹的解决方案来控制控制台中的键盘布局,而是使用了和解决方案systemd
的混合。systemd
sysvinit
但是,我无法找到一种方法来设置键盘映射,例如localectl set-keymap ${keymap}
运行此命令不会引发错误,但布局不会改变。我能够localectl list-keymaps
通过按照此解决方案手动添加它们来创建列表键盘映射https://unix.stackexchange.com/a/763320/610025,但恐怕它不适用于实际的布局更改命令。有 Debian 工作的解决方案吗?