如何*取消*设置`xkbmap`中的选项?

如何*取消*设置`xkbmap`中的选项?

我想使用命令行工具禁用 Ctrl-Alt-Backspace 组合,而无需 root 权限。

我知道我可以setxkbmap用来zh能够使用选项“快速切换” terminate:ctrl_alt_bksp。此外,setxkbmap -option[命名无选项]删除全部选项。有没有办法只取消一个选项?

答案1

有点困难:-option首先删除使用空参数的所有选项,然后设置相同的选项终止从列表中排除:

setxkbmap -option -option $(setxkbmap -query |
    sed -n 's/options:\s*\(terminate:[^:]*,\)\?\|,terminate:[^,]*//gp')

答案2

根据我的经验(有限),最有效的是使用:

setxkbmap -query

然后打印出您当前的设置(是显示当前键盘设置的另一种选择)然后使用不带任何参数的setxkbmap -print删除所有选项:-option

setxkbmap -option

然后一次重新引入一个新选项:

setxkbmap -option key:key_replacement

答案3

简单的方法:

setxkbmap -option
setxkbmap -option 'terminate:ctrl_alt_bksp'

答案4

这是一个更通用的脚本,基于已接受的答案;您可以传递模式(如unsetxkbmap-option 'terminate:.*or 中所示)来撤消-option ctrl:swapcaps但预览结果:unsetxkbmap-option -n '.*swap.*'

!/bin/sh -eu
DRY=
while test $# -gt 0; do case "$1" in
--dry-run|-n) shift; DRY=y ;;
--) shift; break ;;
-*) echo "Unknown: $1"; exit 1 ;;
*) break ;;
esac; done
opts=$(setxkbmap -query |
 perl -wlnE 'if (/^options:\s*/gc) { ($& =~ /'^"$1"'$/ or print "-option $& ") while /[^,]+/g }'
)
printf '%s\n' "$opts"
test -z "$DRY" && setxkbmap -option $opts

相关内容