当检测到 I/O 时运行脚本

当检测到 I/O 时运行脚本

我有蓝牙鼠标 xinput 设置脚本,只要我连接鼠标就会运行。目前,我只是将快捷键别名为“bm”,用于执行该 bash 文件,但我想知道是否有自动方法在检测到鼠标连接时执行 bash 文件或别名命令。

预先感谢!

Ubuntu 16.10

答案1

您需要使用轮询方法,连续读取输出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 循环的主体可以只是这个 -true:

答案2

我会使用 。规则文件。

首先,找出鼠标的ID_VENDOR_IDID_MODEL_ID。断开鼠标,运行此命令并连接鼠标(该|grep ID部分仅用于过滤您不需要的信息)。

udevadm monitor --property|grep ID

假设您获得以下值:

ID_VENDOR_ID=0a12
ID_MODEL_ID=0001

现在在规则文件夹中创建一个文件(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 命令跟踪文件tail -f /tmp/myusb.log并连接/断开鼠标。您应该看到文本已添加到文件中。

相关内容