我有蓝牙鼠标 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_ID
和ID_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_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 命令跟踪文件tail -f /tmp/myusb.log
并连接/断开鼠标。您应该看到文本已添加到文件中。