经过一番研究,我找到了解决方案,尽管我仍然愿意接受其他(可能更好)的答案。
这是一个启动脚本(可以将其添加到启动应用程序中),该脚本会将通常输入的usbkbd_layout变量设置为xinput -list中找到的usbkbd设备ID:
#!/bin/bash
usbkbd=`xinput -list | grep -c "USB Keyboard"`
if [[ "$usbkbd" -gt 0 ]]
then
usbkbd_ids=`xinput -list | grep "USB Keyboard" | awk -F'=' '{print $2}' | cut -c 1-2`
usbkbd_layout="tr(f)"
for ID in $usbkbd_ids
do
setxkbmap -device "${ID}" -layout "${usbkbd_layout}"
done
fi
exit 0
对于用户开始在台式机设置上使用笔记本电脑(带有外部键盘,鼠标和显示器等)的情况,此脚本非常有用(并且更稳定),并且只要插入外部USB键盘,就可以手动运行该脚本。 ...
================================================== ========================
更好(几乎完美)的解决方案-感谢MinimusHeximus和他在下面的评论中提到的主题的各自贡献者:
现在,我可以插入USB键盘,并自动应用其不同的(TR-F)键盘布局,同时仍然在笔记本电脑上保留默认键盘布局(TR-Q)!
以下是使之成为可能的文件及其内容:
/etc/udev/rules.d/00-usb-keyboard.rules
ATTRS{idVendor}=="09da", ATTRS{idProduct}=="0260", OWNER="sadi"
ACTION=="add", RUN+="/home/sadi/.bin/usb-keyboard-in_udev"
ACTION=="remove", RUN+="/home/sadi/.bin/usb-keyboard-out_udev"
/home/sadi/.bin/usb-keyboard-in_udev
#!/bin/bash
/home/sadi/.bin/usb-keyboard-in &
/home/sadi/.bin/usb-keyboard-in
#!/bin/bash
sleep 1
DISPLAY=":0.0"
HOME=/home/sadi/
XAUTHORITY=$HOME/.Xauthority
export DISPLAY XAUTHORITY HOME
usbkbd_id=`xinput -list | grep "USB Keyboard" | awk -F'=' '{print $2}' | cut -c 1-2 | head -1`
usbkbd_layout="tr(f)"
if [ "${usbkbd_id}" ]; then
gsettings set org.gnome.settings-daemon.plugins.keyboard active false
sleep 2
setxkbmap -device "${usbkbd_id}" -layout "${usbkbd_layout}"
fi
/home/sadi/.bin/usb-keyboard-out_udev
#!/bin/bash
/home/sadi/.bin/usb-keyboard-out &
/home/sadi/.bin/usb-keyboard-out
#!/bin/bash
sleep 1
DISPLAY=":0.0"
HOME=/home/sadi/
XAUTHORITY=$HOME/.Xauthority
export DISPLAY XAUTHORITY HOME
gsettings set org.gnome.settings-daemon.plugins.keyboard active true
笔记:
- 当然,您的“ .bin”文件夹中的所有四个文件都应具有必要的权限(可读和可执行),例如可以使用诸如Terminal的命令来实现
chmod - 755
/home/sadi/.bin/usb-keyboard-*
- 有时,插入USB键盘后,它仍然使用相同(默认)的键盘布局,并在第二次尝试时切换到指定的布局(也许在某处需要更多的睡眠时间?)
- USB键盘的特定布局在登录屏幕中(退出时)无效。
- 如果将单独的分区用于/ home,那么最好将四个脚本放在根分区中的某个位置,例如/ usr / local / bin,并相应地修改所有各自文件的内容,因为有时udev可能会寻找在挂载/ home分区之前,这些文件会引起问题。
为了使此设置适应不同的要求:
- USB键盘供应商和产品ID应改为按照该命令的输出
lsusb
(例如,我的lsusb
输出都为我的USB键盘:Bus 001 Device 006: ID 09da:0260 A4 Tech Co., Ltd
)
- OWNER和所有用户目录名称应从“ sadi”更改为另一个名称
- usbkbd_id可能需要稍作调整以获取正确的设备ID(例如,命令的输出
xinput -list | grep "USB Keyboard"
给了我两行;↳ USB Keyboard id=14 [slave keyboard (3)]
和↳ USB Keyboard id=16 [slave keyboard (3)]
;然后通过awk
使用“ =”作为字段定界符并捕获第二部分来进行过滤;然后仅剪切掉前两位数字,然后仅使用第一行中的值)
- usbkbd_layout的值可以是任何其他有效选择