我有一個帶有 EmulationStation 的 Linux 設備(鍵盤通過 USB 連接到它)。我想在終端中處理游戲手柄按鍵,這樣我就不必為此插入鍵盤。
檢測游戲手柄按鍵代碼的測驗腳本:
#!/bin/bash
echo 'Press button "L1":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "L1":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "L2":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "L2":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "Up":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Up":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "Down":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Down":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "Left":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Left":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "Right":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Right":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "Select":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Select":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "L3":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "L3":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "Start":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Start":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "X":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "X":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "Y":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "Y":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "B":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "B":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "A":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "A":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "R3":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "R3":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "R2":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "R2":' >> keycode.txt
echo "$key" >> keycode.txt
echo 'Press button "R1":'
key=`jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | awk -F ',' '{print $3}' | awk '{print $2}'`
echo 'Button "R1":' >> keycode.txt
echo "$key" >> keycode.txt
當您通過 SSH 連接或退出 EmulationStation 并啟動 tty 時,腳本正常作業,當您按下游戲手柄鍵時,檢測到密鑰代碼,成功寫入檔案,程序完成。
如果腳本直接從 EmulationStation 運行,問題就開始了,顯然jstest --event /dev/input/js0是回圈的。
從 EmulationStation 運行腳本的程序如下所示:
Press button "L1":
腳本不回應游戲手柄按鍵,或者我們看不到它。同時連接手柄,使用第二個腳本我們可以看到按鍵的不同:
#!/bin/bash
jstest --event /dev/input/js0
第二個腳本的輸出:
Event: type 1, time -195236, number 9, value 1
Event: type 1, time -195128, number 9, value 0
Event: type 1, time -194840, number 8, value 1
Event: type 1, time -194744, number 8, value 0
Event: type 1, time -194492, number 10, value 1
Event: type 1, time -194360, number 10, value 0
Event: type 1, time -194096, number 9, value 1
Event: type 1, time -194096, number 11, value 1
Event: type 1, time -194000, number 9, value 0
Event: type 1, time -193988, number 11, value 0
顯然,這個問題與回圈無限期運行的事實有關,而 usinggrep -m 1 "type 1, time .*, number .*, value 1"并沒有結束它。
當腳本不作業時,ps aux顯示如下程序:
user 635 0.0 0.0 2048 508 ? S 03:58 0:00 sh -c sudo chmod 666 /dev/tty1; /opt/system/Scripts/Keycode.sh > /dev/tty1; printf "\033c" >> /dev/tty1
user 645 0.0 0.3 6464 2916 ? S 03:58 0:00 /bin/bash /opt/system/Scripts/Keycode.sh
user 646 0.0 0.1 6464 1572 ? S 03:58 0:00 /bin/bash /opt/system/Scripts/Keycode.sh
user 647 0.0 0.0 1924 464 ? S 03:58 0:00 jstest --event /dev/input/js0
user 651 0.0 0.2 8416 2728 pts/0 R 03:59 0:00 ps aux
我想從 EmulationStation 運行一個腳本,以便它對游戲手柄按鈕的按下做出反應。如果有其他方法可以在不使用 GUI 的情況下執行此操作,請撰寫它。
uj5u.com熱心網友回復:
我通過使用這個 perl模塊解決了終端中游戲手柄輸入的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/400204.html
上一篇:在shell中將變數值減1
下一篇:科爾多瓦的麥克風、音頻權限
