我一直无法让 ubuntu 识别旧的 Elo 触摸屏。经过大量阅读/测试后,我设法使用屏幕检测触摸屏:
sudo screen /dev/ttyS4
ttyS4 = COM5,触摸屏连接的位置。执行此命令后,我可以触摸屏幕,它会在屏幕上绘制奇怪的字符,据我所知,这是 ubuntu 识别该设备。然后我应该使用 inputattach 连接触摸屏:
inputattach -elo /dev/ttyS4
但什么都没发生。要么我根本没有采取任何行动,要么它只是卡住了而没有任何结果,当我再次触摸屏幕时我甚至无法再绘制。之前它甚至告诉我:
inputattach: can't set line discipline
根据https://forums.gentoo.org/viewtopic-p-6406944.html通过进入我的内核配置并确保串行线路规范已启用,可以解决这个问题。
听起来很简单,但我并不是一个经验丰富的用户,所以你能告诉我该怎么做,或者是否有任何建议或替代解决方案可以采取?
眼镜: Ubuntu 18.04。设备:销售点型号 430/435,配备 B55/B75 M/B,根据用户手册,配有 elotouch 显示器。 视频驱动程序只能实现 640X480 分辨率,并且至少应该实现 800X600。
我也尝试过从 elo 网站安装几个 Linux 驱动程序,但都没有成功。最初,该设备运行的是 WinXp SP2,但一位朋友带我来并要求我将设备更新到更好的操作系统。所以这是一段漫长而有趣的旅程 :)
任何帮助将不胜感激。
更新 #1 我不知道我可以同时向 inputattach 命令添加 2 个选项。所以我尝试了:--daemon --always 像这样:
sudo inputattach --daemon --always -elo /dev/ttyS4
然后它开始工作,识别每次触摸。因此我编辑位于 /lib/udev/rules.d/60-inputattach.rules 的 inputattach 文件,以便保存每次启动的配置,并添加了以下行:
SUBSYSTEM=="tty", KERNEL=="ttyS4", ACTION=="add|change", RUN+="/lib/udev/inputattach --elo /dev/%k"
我重新启动了,线路仍然存在,但根本没有效果,只是不起作用,我无法让它再次工作:(
尝试向该文件添加几行:
SUBSYSTEM=="tty", KERNEL=="ttyS4", ACTION=="add|change", RUN+="/lib/udev/inputattach --elotouch /dev/%k"
SUBSYSTEM=="tty", KERNEL=="ttyS4", ACTION=="add|change", RUN+="/lib/udev/inputattach --elotouch /dev/%k --daemon --always"
SUBSYSTEM=="tty", KERNEL=="ttyS4", ACTION=="add|change", RUN+="/lib/udev/modprobe elo" RUN+="/lib/udev/inputattach --elotouch /dev/%k --daemon --always"
还是没运气。我一直收到屏幕命令的响应,但除此之外什么都没发生 :( 我快找到解决方案了,我肯定这里漏掉了一些基本的东西……再次感谢
更新 #2 它停止响应的原因:我混淆了命令变体。触摸屏幕时识别的命令是另一个。 总结一下:
我继续尝试了几种 inputattach 组合,首先输入modprobe elo
,然后再次测试不输入。我的结论是modprobe elo
// 对我来说没有任何作用
因此,我得到回应的唯一组合是:(之前不需要 modprobe 或 screen 命令。因为 modprobe 不执行任何操作,screen 仅用于检测正确的端口 COM4 = ttyS4(在我的情况下))
sudo inputattach --daemon --always --mtouch /dev/ttyS4
--mtouch = MicroTouch (3M) 触摸屏。(您可以找到所有与 inputattach 兼容的设备,输入: inputattach --help
。
响应不够好。每次我触摸屏幕时,感觉就像使用普通鼠标并单击左键并选择某个区域一样。(我猜这是 mtouch 设备的功能),所以对我来说不够好。
不过,我尝试使用以下方法校准屏幕:
sudo apt-get install xinput-calibrator
sudo xinput_calibrator
我看到每个角落有 4 个点,但无法在正确的位置触摸它以进行校准。所以我做的是连接一个普通的 USB 鼠标并用它校准屏幕点击。之后,每次触摸都还不准确,但我至少有 X 和 Y 最大值/最小值。
因此,经过更多研究,我的第二个解决方案是尝试自己校准它,计算变换矩阵,但我不知道如何操作。到目前为止:
xinput --list
//给我设备名称和 ID MicroTouch 串行触摸屏 | ID=12
然后xinput --list-props 12
给我我应该添加到文件的TransformationMatrix:/etc/X11/xorg.conf.f/99-calibration.conf 如下所示:
Section "InputCalls"
Identifier "calibration
MatchProduct "MicroTouch Serial Touch Screen"
Option "TransformationMatrix" "1 0 0 0 1 0 0 0 1" #Got this values after calibrating the screen clicking with my mouse on each corner point (xinput_calibrator)
Option "MinX" "299"
Option MaxX" "65492"
Option "MinY" "705
Option "MinX" "66058"
EndSection
问题:
- 虽然我不介意,但这不是我的设备驱动程序,可能无法正常工作。
- 我不确定如何将该 TransformationMatrix 重新计算为正确的校准轴。
- 即使我设法重新计算该矩阵,我也不知道 xorg 配置文件在哪里,因为它也不在 /user/share/X11/xorg.conf.d 中,而且我不确定我创建的文件是否确实在做某事。
-
如果我能解决最后这个问题,下一步就是将最终配置添加到我的//lib/udev/rules.d/60-inputattach.rules,以便它可以在每次启动时默认加载。
但似乎我陷入了困境。我将尝试做更多研究,同时我的另一个想法是仅使用 inputattach --help 中列出的每个设备进行测试,看看我是否得到任何不同的响应。否则将返回 winxp :( 希望这次旅程对任何人都有用,因为我一直在和自己的 LOL 交谈 :p