Linux
有線 Xbox One 控制器在 lsusb 中顯示,但有時會停止檢測 Steam 中的輸入
重新啟動後,我的有線控制器可以使用 steam。每當它工作時,控制器上的指示燈就會亮起。但是,有時燈會隨機關閉,然後輸入在我的遊戲中停止工作。如果重新插入控制器而不重新啟動,也會發生這種情況。此時設備仍顯示在 lsusb 中。如果我在它上面執行一個usbreset,燈會重新亮起,然後它又開始工作了。我有一個幫助腳本,可以搜尋設備並在需要時重置它,但是,使用 alt+tab 執行它很不方便。
希望將其自動化是某種系統任務。不過,我不知道如何以程式方式判斷它何時處於這種狀態。我嘗試了 lsusb –verbose 但無論是否檢測到輸入,輸出都是相同的。控制器也沒有出現在 xinput 中。我不確定我還能在哪裡檢查,所以尋找一些關於如何判斷是否使用腳本從 USB 設備檢測到輸入的想法。我可以從那里處理其餘的事情。提前感謝您的幫助!
我發現我可以用它
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 中引發 no device found 錯誤。我
||
用來擷取此錯誤,重置deviceId
,然後再次呼叫此腳本以啟動jstest
提要。我得到大約一秒鐘的停機時間。我確信這可以優化為不需要一秒鐘的睡眠時間,但我不需要這個來達到我的目的。