X11 xinput触摸屏校准不一致

X11 xinput触摸屏校准不一致,x11,xinput,X11,Xinput,我们有带触摸屏的设备,我们使用xinput_calibrator进行校准,然后在应用程序的启动脚本中应用这些设置,方法如下: 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

我们有带触摸屏的设备,我们使用xinput_calibrator进行校准,然后在应用程序的启动脚本中应用这些设置,方法如下:

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语句有时会被处理,有时会被忽略,尽管除了重新启动之外什么都没有改变


如果您有任何关于如何解决此问题的想法,我们将不胜感激。

由于X11服务器启动过程和
xinput
调用之间似乎存在竞争条件,因此您必须等待启动过程完成。我建议您检查有关如何检测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
在系统上返回的值调整脚本。

脚本是如何准确启动的(启动时还是手动启动,X11服务器启动之前还是之后)?在未应用校准/交换的重新启动时,再次运行脚本是否有帮助?是否确实需要完全重新启动,或者重新运行脚本并重新启动X11服务器就足够了?脚本在初始化期间启动,显式地在x服务器启动之后启动。我没有第二次尝试运行脚本;这是在嵌入式系统上,很难停止我们的应用程序以重新启动它,因为一切都设置为在启动时自动启动。好的,您可以在脚本中添加一个
sleep 60
,以确保在运行它之前一切都稳定下来。您还可以运行“轴交换”行两次(间隔很小),以考虑第一次不考虑该命令的情况。最后,您可以记录
xinput--list--long的输出和脚本的结尾,并比较成功和失败配置对应的日志。添加延迟似乎可以解决问题。但是1)我们不明白为什么——在这段时间里“安定”是什么?2)我们在紧迫的时间限制下尽快打开第一个屏幕,任何延迟都将是不可接受的。有没有办法检查并保证X是“已结算”的?试过了,它似乎工作得很好。我添加了一个循环计数器,发现在命令成功之前需要0到2秒的时间——这看起来仍然很奇怪,但我没有看到使用这种方法的任何失败。谢谢