如何为稍后插入的键盘设置键盘映射?

如何为稍后插入的键盘设置键盘映射?

我通过添加对setxkbmap我的.xinitrc.这适用于我的笔记本电脑的内部键盘以及 X 服务器启动时插入的任何外部键盘。如果我稍后插入外部键盘,它将使用默认的美国键盘映射。

如何确保我插入的任何键盘都具有我喜欢的布局?

答案1

正如 Gilles 昨天对 Dominik R 的回答所评论的那样,udev 方法仅适用于 root 用户,并且作为通用的非特权解决方案效果不佳。我建议考虑使用 Andrew Shadura 的 inputplug(1),它可以在 Debian 中作为 package inputplug 以及在项目现场

inputplug(1) 是一个相当简单的 XINPUT 事件循环监听器,它将调用带有解码事件参数作为参数的脚本。由于您使用的是 .xinitrc,我想您正在使用一个适度的窗口管理器/环境,并且这种后台侦听器对您来说应该非常简单。

另一种可能性是以不太传统的方式使用 udev,编写一个脚本来解析“udevadm Monitor”的输出,并在识别出正在连接的匹配设备时调用 setxkbmap。

祝你好运!

答案2

inputplug五年前由etherfish提出的,是一个很好的答案,但答案缺少一个完整的例子。因此,这是我在开始时使用的命令,每次插入新键盘时.xinitrc运行一次:setxkbmap

{ echo "XIDeviceEnabled XISlaveKeyboard"; inputplug -d -c /bin/echo; } |
while read event
do
        case $event in
        XIDeviceEnabled*XISlaveKeyboard*)
                setxkbmap -option grp:switch,grp:shift_toggle,grp_led:scroll us,il ,lyx
                setxkbmap -option caps:none
                ;;
        esac
done &

inputplug -d -c /bin/echo显类似的消息

XIDeviceEnabled 11 XISlaveKeyboard Logitech K270

每次插入键盘时,while循环都会找到此类消息并导致相关setxkbmap命令运行(在我的示例中,我设置了希伯来语键盘映射,并删除了我讨厌的大写锁定功能)。开头的额外部分echo "XIDeviceEnabled XISlaveKeyboard"导致循环在开头也恰好找到一次“新键盘”。inputplug还有一个“-0”选项可以在启动时打印现有键盘,但这通常会打印多个键盘并导致setxkbmap在启动时不必要地运行多次。

相关内容