重新启动后,我的有线控制器可以使用 Steam。控制器上有一个灯,每当它工作时就会亮起。然而,有时,灯会随机关闭,然后输入在我的游戏中停止工作。如果重新插入控制器而不重新启动,也会发生这种情况。此时该设备仍然显示在 lsusb 中。如果我在上面运行 usbreset,灯会重新亮起,然后它会再次开始工作。我有一个帮助程序脚本,可以搜索设备并在需要时重置它,但是,使用 alt+tab 来运行它很不方便。
希望自动化它是某种系统任务。不过,我不知道如何以编程方式判断它何时处于这种状态。我尝试了 lsusb --verbose 但无论是否检测到输入,输出都是相同的。控制器也不会显示在 xinput 中。我不确定还可以在哪里检查,因此寻找一些关于如何判断是否使用脚本从 USB 设备检测到输入的想法。我可以从那里处理剩下的事情。预先感谢您的任何帮助!
答案1
我发现我可以用它jstest
来实现我想要的。最终制作了这样的脚本:
#!/bin/bash
function xboxControllerReset() {
device_id="$(docker run -it --rm --name my-running-script -v /home/<me>/.local/bin:/usr/src/myapp -w /usr/src/myapp python-runner python getLsUsbDeviceIdForXboxController.py)"
echo "Resetting device with ID: $device_id"
sudo usbreset "$device_id"
}
function detectControllerReset() {
jstest --event /dev/input/js0 || sleep 1 && xboxControllerReset && sleep 1 && detectControllerReset
}
detectControllerReset
当我的控制器变为非活动状态时,它会在 jstest 中抛出“未找到设备”错误。我用来||
捕获此错误,重置deviceId
,然后再次调用此脚本来启动jstest
提要。我有大约一秒钟的停机时间。我确信这可以优化为不需要一秒钟的睡眠时间,但我不需要这个来达到我的目的。