gpt4 book ai didi

python - Bash - 如何在连接 USB 设备时运行代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:05:14 26 4
gpt4 key购买 nike

我正在编写一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com