![为每个键盘使用不同的布局](https://linux22.com/image/227093/%E4%B8%BA%E6%AF%8F%E4%B8%AA%E9%94%AE%E7%9B%98%E4%BD%BF%E7%94%A8%E4%B8%8D%E5%90%8C%E7%9A%84%E5%B8%83%E5%B1%80.png)
我在这里看到过类似的问题,但我不认为我在重复其中任何一个。多年来我在这个问题上一直在取得进展,但仍有很长的路要走。最新阶段是我使用下面的 udev 规则(1)在连接外部键盘时应用特定的键盘布局,以及(2)在断开连接时恢复。
ACTION=="add", ATTRS{idVendor}=="09da", ATTRS{idProduct}=="2403", SUBSYSTEMS=="usb", ENV{XKBMODEL}="pc105", ENV{XKBLAYOUT}="tr", ENV{XKBVARIANT}="f", ENV{XKBOPTIONS}=""
ACTION=="remove", ATTRS{idVendor}=="09da", ATTRS{idProduct}=="2403", SUBSYSTEMS=="usb", ENV{XKBMODEL}="pc105", ENV{XKBLAYOUT}="tr", ENV{XKBVARIANT}="", ENV{XKBOPTIONS}=""
然而,不幸的是,这似乎应用了为该外部键盘指定的键盘布局全球,而不是仅将其专门应用于该键盘。因此,集成笔记本电脑键盘实际上变得无法使用,除非采取另一个步骤来解决此问题,这可以通过包含以下内容的 shell 脚本来完成:
int_kbd_id="$(xinput -list | grep " AT Translated Set 2 keyboard " | awk -F'=' '{print $2}' | awk -F' ' '{print $1}')"
ext_kbd_id="$(xinput -list | grep " COMPANY 2.4G Device " | awk -F'=' '{print $2}' | awk -F' ' '{print $1}')"
if [[ "$int_kbd_id" ]]; then
setxkbmap -device "$int_kbd_id" -layout "tr" -variant ""
fi
if [[ "$ext_kbd_id" ]]; then
setxkbmap -device "$ext_kbd_id" -layout "tr" -variant "f"
fi
现在,我需要在会话期间至少第一次执行上述 udev 规则之后自动执行此脚本(并且在用户登录之前,以便在登录期间可以使用两个键盘)。我注意到,如果外部键盘在运行此脚本后断开连接并重新连接,集成笔记本电脑键盘布局不会再次更改(但我不确定这种行为有多稳定/可靠)。
到目前为止,我使用 (1) udev 规则RUN+="/usr/local/bin/<SCRIPT>"
、 (2)/etc/xdg/autostart/keyboard-layouts.desktop
和 (3)执行它的三次尝试/etc/systemd/system/keyboard-layouts.service
都失败了。修改后的 udev 规则以某种方式使两个键盘完全无法使用,而其他键盘则没有效果 - 可能是因为脚本是在 udev 规则之前执行的,因为未使用“Before=”、“After=”等选项正确配置 systemd 服务...