使无线键盘始终使用指定的布局

使无线键盘始终使用指定的布局

这确实应该是对问题的答复的评论如何永久地为 USB 键盘分配不同的键盘布局?由于无法发表评论,这里是新问题,我希望@Sadi 正在阅读它:

我的无线键盘和鼠标此后停止工作。这可能与我的设备名称中不包含字符串“USB 键盘”有关。

lsusb
Bus 003 Device 088: ID 046a:010b Cherry GmbH

xinput -list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ MLK Wireless Desktop                  id=15   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
 ↳ MLK Wireless Desktop                     id=14   [slave  keyboard (3)]

因此我的 GREP 行如下所示:

xinput -list | grep 'Wireless Desktop.*keyboard' "$@"

要更改布局,只需记下 ID 和类型

setxkbmap -device 14 {language code}

有什么想法可以永久修复它,以便计算机识别该设备并在插入后准备好正确的语言?


可能的线索在这里:

答案1

据我所知(不多),所有涉及的解决方案udev.规则最近停止了工作,目前唯一似乎可行的解决方案是一个简单的启动脚本,该脚本假定第二个键盘在用户登录之前已连接,否则用户应该稍后手动运行该脚本。

该脚本经过测试,适用于 USB 键盘(此处:https://askubuntu.com/a/337431/47343)当然应该修改为无线键盘,可能类似于下面的内容。

注 1:除了输入所需的键盘布局代码之外,可能还需要进行一些反复试验(例如,首先在终端窗口中输入每一行),因为作者是“业余”(几乎是初学者级别)的“脚本作家”;-)

#!/bin/bash
extkbd=`xinput -list | grep -c "Wireless.*keyboard"`
if [[ "$extkbd" -gt 0 ]]
then
    extkbd_id1=`xinput -list | grep "Virtual core keyboard" | awk -F'=' '{print $2}' | cut -c 1-2`
    extkbd_id2=`xinput -list | grep "Wireless.*keyboard" | awk -F'=' '{print $2}' | cut -c 1-2`
    extkbd_layout="<kbdlayoutcode>"
    setxkbmap -device "${extkbd_id1}" -layout "${extkbd_layout}"
    setxkbmap -device "${extkbd_id2}" -layout "${extkbd_layout}"
    notify-send -i input-keyboard "Wireless Keyboard" "is ready and set for use..."
fi
exit 0

注 2:由于系统似乎为一个硬件分配了 2 个设备 ID,我发现为这两个设备 ID 分配相同的键盘布局代码更安全。

相关内容