我正在编写一个 bash 脚本来自动检测我的 USB 键盘何时插入我的笔记本电脑(运行 Ubuntu 14),因此我可以自动更改键盘布局。
这是我到目前为止的代码(我是从 Stack Overflow 上的另一篇文章中得到的,所以我不是 100% 确定它是如何工作的)
#!/bin/bash
setxkbmap es
for dev in /sys/bus/usb/devices/ *-*:*
do
if [ -f $dev/bInterfaceClass ]
then
if [[ "$(cat $dev/bInterfaceClass)" == "03" && "$(cat $dev/bInterfaceProtocol)" == "01" ]]
then
setxkbmap gb
fi
fi
done
到目前为止,我已经让它在启动时运行...但我希望它在每次连接或断开 USB 设备时运行。
重要的是,我将其全部运行在一个 Bash 脚本中,而不是作为 ...udev/... 中的 .rules 文件或其他任何文件。但是,单个 Python 脚本也可以。
最佳答案
感谢ralf htp我能够想出以下解决方案。 它有以下改进:
- 它不依赖于特定的键盘,它将以相同的方式处理所有 USB 键盘。
- 如果用户手动切换到不同的键盘布局(既不是默认键盘布局也不是 USB 键盘布局),它不会自动切换回默认布局或 USB 布局。
请随时改进此代码 GitHub Gist
#!/bin/bash
kbd1=es #default keyboard layout
kbd2=gb #USB keyboard layout
flag=0
while true
do
layout="$(setxkbmap -query | grep -a layout | cut -c13-14)"
if [[ $layout == $kbd1 ]] || [[ $layout == $kbd2 ]]
then
for dev in /sys/bus/usb/devices*-*
do
if [ -f $dev/bInterfaceClass ]
then
if [[ "$(cat $dev/bInterfaceClass)" == "03" && "$(cat
$dev/bInterfaceProtocol)" == "01" ]]
then
if [[ "$flag" == "0" ]]
then
setxkbmap $kbd2
fi
flag=1
break
fi
if [[ "$flag" == "1" ]]
then
setxkbmap $kbd1
fi
flag=0
fi
done
fi
sleep 5s
done
关于python - Bash - 如何在连接 USB 设备时运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43265185/