检测到I / O时运行脚本
我有蓝牙鼠标xinput设置脚本,只要我连接鼠标就可以运行。 目前我只是将短键别名为bm文件执行的’bm’,但我想知道是否有自动方式在检测到鼠标连接时执行bash文件或别名命令。
预先感谢!
ubuntu 16.10
我会用一个。 规则文件。
首先,找出您的鼠标的ID_VENDOR_ID
和ID_MODEL_ID
。 断开鼠标连接,运行此命令并连接鼠标( |grep ID
部分仅用于过滤您不需要的信息)。
udevadm monitor --property|grep ID
让我们说你得到这些值:
ID_VENDOR_ID=0a12 ID_MODEL_ID=0001
现在在rules文件夹中创建一个文件(96是规则的优先级):
sudo gedit /etc/udev/rules.d/96-myusb.rules
使用ID_VENDOR_ID
和ID_MODEL_ID
值添加这两行。 如果您在删除它时不想执行任何操作,请不要包含第二行。
ACTION=="add", SUBSYSTEM=="usb",ENV{ID_VENDOR_ID}=="0a12", ENV{ID_MODEL_ID}=="0001",RUN+="/usr/local/bin/myusb-add.sh" ACTION=="remove", SUBSYSTEM=="usb",ENV{ID_VENDOR_ID}=="0a12",ENV{ID_MODEL_ID}=="0001",RUN+="/usr/local/bin/myusb-remove.sh"
您可以测试它是否有效创建两个脚本:
$ sudo gedit /usr/local/bin/myusb-add.sh
添加这样的东西(在另一个中更改add
remove
):
#!/bin/bash echo "added" >> /tmp/myusb.log
最后,使用tail -f /tmp/myusb.log
文件并连接/断开鼠标。 您应该看到文本已添加到文件中。
您想要的是使用轮询方法,连续读取xinput --list --name-only
输出,并确定鼠标的名称是否存在,如果是,则运行脚本。 这将是这样的:
while true; do if xinput --list --name-only | grep -q -i 'Mouse Name' ; then echo "yes" # this is where you run script break # exit the loop after running the script. fi done
在这种情况下,只要鼠标在那里,我们就会退出循环。 但是,您可能希望这是连续的,以便您可以连接和断开鼠标。 而不是break
,我会while
那里使用另一个while
循环,相反 – 等待鼠标名称消失。 那个while循环的主体可以就是这个 – true
或:
。