2
我試圖自動化獲取遊戲控制器的設備事件並檢查其名稱的過程,然後如果名稱匹配字符串,則將事件傳遞給另一個程序。Linux和bash - 如何獲取輸入設備事件的設備名稱?
手動運行evtest /dev/input/eventXX
來檢查輸入設備的名稱,然後用鍵盤中斷(ctrl-c)來停止它。如果該設備與特定類型的遊戲控制器的名稱相匹配,則使用相同的事件編號運行命令xboxdrv --evtest /dev/input/eventXX
。
但是,由於「evtest」命令會繼續打印輸入設備的輸出,而不是在打印名稱後終止,並且僅在鍵盤中斷時退出,所以我不知道如何讓bash腳本獲得設備。
我還在學習bash,因此在我的代碼中可能會出現語法錯誤。但是,在這裏,它是:
#!/bin/sh
WiiUGCName="Wii U Gamecube Adapter Port"
#find the controller(s)
NumberOfEvents=$(ls /dev/input | grep -c event*)
echo "Number of input devices: $NumberOfEvents"
#launch xboxdrv for each controller
i=0
while [ $i < $NumberOfEvents ]; do
echo "loop"
OccurrencesOfName=$(evtest /dev/input/event$i | grep -c "$WiiUGCName")
echo "Occurrences: $OccurrencesOfName"
if [ $OccurrencesOfName>0 ]; then
echo "Controller found"
#launch xboxdrv here
else
echo "no controller found"
fi
let i=i+1
done
所有這些代碼實際上做現在的問題是在這個evtest
掛,因爲它不能被終止。