有線Xbox Oneコントローラがlsusbに表示されますが、時にはSteamで入力検出が停止する

有線Xbox Oneコントローラがlsusbに表示されますが、時にはSteamで入力検出が停止する

再起動後、有線コントローラで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

私のコントローラが無効になると、stestで「デバイスが見つかりません」というエラーが発生します。私は||このエラーをキャッチしてリセットし、deviceIdこのスクリプトを再呼び出ししてjstestフィードを開始しました。約1秒のダウンタイムがありました。 1秒の睡眠も必要ないように最適化できると確信していますが、私の目的にはこれは必要ありません。

関連情報