Sad*_*adi 23 keyboard keyboard-layout usb
我经常将 USB 键盘插入我的笔记本电脑(除了外接显示器和鼠标,它们都可以将我的笔记本电脑虚拟地转换为台式电脑),那时我更喜欢使用不同的键盘布局。
每次插入此 USB 键盘时,我都必须手动更改当前键盘布局。
如果可能的话,我想为此使用自动化的方式。
Radu对这里问题的回答提供了一些线索,但似乎我需要一个启动脚本来执行此任务,因为每次计算机启动时我的 USB 键盘的设备 ID 都会更改。
这个启动脚本可能会首先包含命令xinput -list | grep "USB Keyboard"
和另一个命令来获取显示的第一个 USB 键盘 ID 号,然后在最终命令中使用它来设置我为该 USB 键盘选择的布局,如下所示:
setxkbmap -device <NUMBER> -layout <LAYOUT>
Sad*_*adi 16
经过一些研究,我找到了一个解决方案,尽管我仍然愿意接受其他(可能更好)的答案。
这是一个启动脚本(可以添加到Startup Applications),它将手动输入的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
Run Code Online (Sandbox Code Playgroud)
对于用户开始在台式机设置上使用笔记本电脑(使用外部键盘、鼠标和显示器等)的场景,此脚本非常有用(并且更稳定),并且也可以在插入外部 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"
Run Code Online (Sandbox Code Playgroud)
/home/sadi/.bin/usb-keyboard-in_udev
#!/bin/bash
/home/sadi/.bin/usb-keyboard-in &
Run Code Online (Sandbox Code Playgroud)
/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
Run Code Online (Sandbox Code Playgroud)
/home/sadi/.bin/usb-keyboard-out_udev
#!/bin/bash
/home/sadi/.bin/usb-keyboard-out &
Run Code Online (Sandbox Code Playgroud)
/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
Run Code Online (Sandbox Code Playgroud)
笔记:
chmod - 755
/home/sadi/.bin/usb-keyboard-*
为了使此设置适应不同的要求:
lsusb
(例如,我的lsusb
输出都为我的USB键盘:Bus 001 Device 006: ID 09da:0260 A4 Tech Co., Ltd
)xinput -list | grep "USB Keyboard"
给了我两行;? USB Keyboard id=14 [slave keyboard (3)]
和? USB Keyboard id=16 [slave keyboard (3)]
; 然后通过awk
使用“=”作为字段分隔符并捕获第二部分进行过滤;然后只剪切前两位数字,然后仅使用第一行中的值)pav*_*vel 12
可以在 udev 规则中指定 X11 驱动程序选项,不需要自定义脚本。例如,这里是我的/etc/udev/rules.d/99-usb-kbd.rules的内容
ACTION=="add", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="2323", ENV{XKBMODEL}="pc104", ENV{XKBLAYOUT}="us", ENV{XKBVARIANT}="euro", ENV{XKBOPTIONS}="compose:caps"
Run Code Online (Sandbox Code Playgroud)
此规则确保特定的 USB 键盘在 Xorg 中使用美国布局(我的笔记本电脑的内部键盘是德语,这也是我的主要布局)。要点:
idVendor
和idProduct
使用您的设备lsusb
或evtest
/usr/share/X11/xkb/symbols
. 注意指定有效的布局和有效的变体。/lib/udev/rules.d/64-xorg-xkb.rules