UDEV 检测蓝牙操纵杆

UDEV 检测蓝牙操纵杆

使用 Ubuntu MATE 16.04

我的问题是,我有一个蓝牙操纵杆,但是当它连接时,它会控制我的鼠标。更具体地说,当我玩游戏时,光标会移动到整个屏幕上。为了解决这个问题,我打开终端并执行:

xinput set-int-prop "Amazon Fire Game Controller" "Device Enabled" 8 0

然后我可以用我的“普通”鼠标将光标移出屏幕。这很好,直到我停止游戏,然后操纵杆因缺乏活动而断开连接。当我按下操纵杆上的按钮并将其与蓝牙配对时,我遇到了光标问题,直到我xinput再次执行此操作。

我的目标是使用 UDEV 检测蓝牙操纵杆连接并运行脚本xinput

我曾经尝试过udevadm info -e看看是否能够捕获信息,但是信息太多了,我无法理解。

现在我有:

/etc/udev/rules.d/90-joystick.rules


ENV{ID_NAME}==”Amazon Fire Game Controller", ENV{HID_UNIQ}=="00:bb:3a:ec:80:6d", ACTION=="add", RUN+=”sudo -u johndoe -c /home/johndoe/systemscripts/joystick.sh %p”

/home/johndoe/systemscripts/joystick.sh(chmod 777,因此现在任何人都可以运行它)

#!/bin/sh
xinput set-int-prop "Amazon Fire Game Controller" "Device Enabled" 8 0
date > /tmp/joystick.txt

我所做的任何更改我都会执行:

sudo udevadm control --reload-rules

然而,配对后操纵杆仍可用作鼠标,并且脚本永远不会运行(/tmp/joystick.txt永远不会被创建)

任何帮助将不胜感激

答案1

好吧,我完成了我的目标,但方法并不精确。我查看了 /var/log/syslog,它显示了我激活蓝牙操纵杆时的蓝牙活动

Dec 14 06:27:16 SuperComputer kernel: [ 1908.362129] input: Amazon Fire Game Controller as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.8/2-1.8:1.0/bluetooth/hci0/hci0:41/0005:1949:0402.000F/input/input22
Dec 14 06:27:16 SuperComputer kernel: [ 1908.365299] hid-generic 0005:1949:0402.000F: input,hidraw2: BLUETOOTH HID v0.21 Gamepad [Amazon Fire Game Controller] on 00:0c:76:46:da:d9

现在我对我的 udev 规则进行了更改:

#1 /etc/udev/rules.d/90-joystick.rules (已更改)

SUBSYSTEMS=="hidraw", ACTION=="add", RUN+="/usr/bin/sudo -u johndoe /home/johndoe/systemscripts/joystick.sh"

由于我只关注 1 个蓝牙设备,因此我只查找 hidraw 活动。我将查找 16.04 udev 信息,看看是否可以对其进行微调以查找其地址,但目前,我已经满意了。我还删除了将 %p 传递给我的脚本

#2 /home/johndoe/systemscripts/joystick.sh

#!/bin/sh
export DISPLAY=:0.0

/usr/bin/xinput > /tmp/joystick.txt 2>&1
whoami >> /tmp/joystick.txt
/usr/bin/xinput set-int-prop "Amazon Fire Game Controller" "Device Enabled" 8 0

在我的 joystick.sh 中,我必须导出显示,因为 xinput 需要它才能正常运行。

现在我准备好了!!!当我单击按钮或移动操纵杆时,一旦它与蓝牙建立连接,我就不再需要满足于疯狂的光标了。

如果有人能给我提供线索或推荐一些好的 udev 信息以便我可以对此进行微调,我将不胜感激

希望这对某人有帮助

相关内容