检测到I / O时运行脚本

我有蓝牙鼠标xinput设置脚本,只要我连接鼠标就可以运行。 目前我只是将短键别名为bm文件执行的’bm’,但我想知道是否有自动方式在检测到鼠标连接时执行bash文件或别名命令。

预先感谢!

ubuntu 16.10

我会用一个。 规则文件。

首先,找出您的鼠标的ID_VENDOR_IDID_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_IDID_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: