2015-03-25 316 views
2

我們有我們校準使用xinput_calibrator,然後在我們的應用程序的啓動腳本應用設置觸摸屏設備,沿XINPUT觸摸屏校準不一致

xinput set-int-prop "Microchip Technology Inc. AR1100 HID-MOUSE" "Evdev Axis Calibration" 32 109 3841 161 3973 
xinput set-int-prop "Microchip Technology Inc. AR1100 HID-MOUSE" "Evdev Axes Swap" 8 1 
xinput set-int-prop "Microchip Technology Inc. AR1100 HID-MOUSE" "Evdev Axis Calibration" 32 3852 112 3970 159 

行這種運作良好 - 有時。在其他時間,在重新上電後,校準將不會生效 - 軸交換,特別是縮放似乎關閉,儘管這很難說。再過幾次電源循環,它會再次工作,然後不會。

我們是X11的新手,不確定爲什麼會發生這種情況。就好像我們的xinput語句有時會被處理並且被其他時候忽略,儘管除了重新啓動以外沒有任何改變。

有關如何解決這個問題的任何想法,讚賞。

+0

你的腳本是如何準確啓動的(在啓動時或手動啓動時,在X11服務器啓動之前還是之後)?在沒有應用校準/交換的重新啓動時,是否有助於再次運行腳本?真的需要完全重啓嗎,或者重新運行腳本並重新啓動X11服務器就足夠了? – 2015-03-25 10:12:45

+0

腳本在初始化期間啓動,在x服務器啓動後顯式啓動。我還沒有嘗試第二次運行腳本;這是在一個嵌入式系統上,很難停止我們的應用程序以重新啓動它,因爲一切都設置爲在啓動時自動啓動。 – SixDegrees 2015-03-25 10:24:18

+0

那麼,你可以在你的腳本中加入一個'sleep 60',以確保在你運行它之前一切都安定下來。您也可以兩次運行「軸交換」行(間隔很小),以說明第一次不考慮命令的情況。最後,您可以記錄'xinput --list --long'的輸出和腳本的結尾,並比較與成功和失敗配置相對應的日誌。 – 2015-03-25 10:40:00

回答

1

由於X11服務器啓動過程和xinput調用之間似乎存在爭用條件,因此您必須等待啓動過程完成。我建議你檢查this answer提示如何檢測X服務器是否正常運行。

如果這不起作用,您應該嘗試檢查返回代碼xinput並等待配置觸摸屏前成功。例如:

ts_dev="Microchip Technology Inc. AR1100 HID-MOUSE" 
ts_calibrate="Evdev Axis Calibration" 
ts_swap="Evdev Axes Swap" 

# repeat until xinput returns success for the first time 
while ! xinput set-int-prop "$ts_dev" "$ts_calibrate" 32 109 3841 161 3973 
do 
    sleep 1 
done 
xinput set-int-prop "$ts_dev" "$ts_swap" 8 1 
xinput set-int-prop "$ts_dev" "$ts_calibrate" 32 3852 112 3970 159 

您可能需要適應腳本的價值觀,你的系統上xinput回報。

+0

試過這個,它似乎工作得很好。我添加了一個循環計數器,發現它在命令成功之前需要0到2秒之間 - 這仍然看起來很奇怪,但是我還沒有看到任何使用這種方法的失敗。謝謝。 – SixDegrees 2015-03-26 13:02:38