我有一台 Raspberry Pi 3 和一个 15 英寸的触摸屏,使用 VGA 播放视频(我使用转换器插入 Pi 的 HDMI)并使用 USB 实现触摸功能。
开机时插入设备,usbtouchscreen 模块会处理设备并创建两个输入:/dev/input/event3
和/dev/input/mouse1
。Xorg 会注册event3
输入,我可以通过触摸与系统交互,但不是我所期望的方式。我无法点击任何东西,只能移动鼠标。它也不会注册输入,mouse1
因为no driver found
(更多详细信息请参见下面的日志输出)。除了最角落外,触摸几乎可以在屏幕上的任何位置注册,但每次触摸后鼠标都会移回左下角附近。当我说左下角附近时,我的意思是距离两个轴上的实际角落约 1/8 的屏幕距离。在输入 Xorg 配置以交换和反转轴后10-evdev.conf
:
选项“SwapAxes”“1” 选项“InvertY”“1”
鼠标位于右下象限。无论轴方向如何,鼠标也被限制在屏幕的 1/2 到 2/3 左右,有点像缩放效果。当我点击屏幕左上角时,鼠标会移动到屏幕中间的某个位置。触摸屏幕的所有其他部分也是如此。
我尝试Option "Mode" "Relative"
在配置中进行设置,让鼠标跟随我的手指移动到屏幕上的任何位置(因此 0.5 倍的缩放消失了),但它会弹回到不同的位置,不断前进并最终在按下后到达右下角作为“原点位置”。
我尝试重建 Raspberry Pi 3 内核,并将所有 eGalax/EETI 选项模块化或包含在内:
CONFIG_TOUCHSCREEN_EGALAX=m CONFIG_TOUCHSCREEN_EETI=m CONFIG_TOUCHSCREEN_USB_COMPOSITE=m CONFIG_TOUCHSCREEN_USB_EGALAX=y
发生了与上述相同的事情。
我尝试按照 EETI 指南安装其专有驱动程序,位于http://www.eeti.com.tw/drivers_Linux.html。我下载了eGTouch_v2.5.5814.L-ma
文件,调整了他们推荐的 4 个内核设置,应用了源代码补丁kernel versions 2.6+
,然后构建。当我将内核放到 Pi SD 上并启动时,并没有创建event3
和,因为他们让我从内核中删除。指南说,当我运行时,我应该看到没有处理程序的 eGalax 触摸屏(与我之前看到的和相反) ,但它根本没有出现。此外,在这个设置中,我根本无法通过触摸进行交互。mouse1
usbtouchscreen
mouse1
event3
cat /proc/bus/input/devices
我尝试过刷新 Raspbian、Ubuntu MATE 和 Arch Linux ARM,.img
它们的行为都一样,除了一个值得注意的例外。在我安装 Ubuntu MATE 和执行apt update && apt upgrade
以及 的过程中rpi-update
,我自将 Ubuntu 刷新到 SD 以来第一次测试了屏幕,它运行完美!这让我很难受,因为一旦我完成升级并重新启动,我就再也无法重现。我尝试重新刷新 Ubuntu,但没有成功。我确信它会保留,所以我没有得到任何日志输出或配置参数,导致它以这种方式出现。
我的理论是,mouse1
输入会产生点击,但输入没有被记录下来。根据下面的 Xorg 日志:
Adding input device eGalax Inc. USB TouchController (/dev/input/mouse1) No input driver specified, ignoring this device.
我尝试添加到/dev/input/mouse1
但出现以下错误消息: 。听起来 evdev 无法识别 提供的输入。还有其他我可以尝试的驱动程序吗?10-evdev.conf
Driver "evdev"
evdev: eGalax Inc. USB TouchController: Unable to query fd: Inappropriate ioctl for device
mouse1
各种日志输出:
cat /proc/bus/input/devices 相关输出:
I: Bus=0003 Vendor=0eef Product=0001 Version=0100
N: Name="eGalax Inc. USB TouchController"
P: Phys=usb-3f980000.usb-1.5/input0
S: Sysfs=/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5:1.0/input/input4
U: Uniq=
H: Handlers=mouse1 event3
B: PROP=0
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=3
ls -l /dev/input/by-id/:
lrwxrwxrwx 1 root root 9 Nov 25 18:09 usb-DELL_DELL_USB_Keyboard-event-kbd -> ../event2
lrwxrwxrwx 1 root root 9 Nov 25 18:53 usb-eGalax_Inc._USB_TouchController-event-if00 -> ../event3
lrwxrwxrwx 1 root root 9 Nov 25 18:09 usb-Logitech_USB_Receiver-event-if01 -> ../event1
lrwxrwxrwx 1 root root 9 Nov 25 18:09 usb-Logitech_USB_Receiver-event-mouse -> ../event0
lrwxrwxrwx 1 root root 9 Nov 25 18:09 usb-Logitech_USB_Receiver-mouse -> ../mouse0
lsusb 输出:
Bus 001 Device 006: ID 0eef:0001 D-WAV Scientific Co., Ltd eGalax TouchScreen
Bus 001 Device 005: ID 413c:2005 Dell Computer Corp. RT7D50 Keyboard
Bus 001 Device 004: ID 046d:c52f Logitech, Inc. Unifying Receiver
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
usb-devices相关输出:
T: Bus=01 Lev=02 Prnt=02 Port=04 Cnt=04 Dev#= 6 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0eef ProdID=0001 Rev=01.00
S: Manufacturer=eGalax Inc.
S: Product=USB TouchController
C: #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=usbtouchscreen
ls /dev/输入:
by-id
by-path
event0
event1
event2
event3
mice
mouse0
mouse1
Xorg.0.log相关输出:
[ 51.878] (II) config/udev: 添加输入设备 eGalax Inc. USB TouchController (/dev/input/event3) [ 51.879] (**) eGalax Inc. USB TouchController: 应用 InputClass“evdev touchscreen catchall” [ 51.879] (II) 使用输入驱动程序“evdev”作为“eGalax Inc. USB TouchController” [ 51.879] (**) eGalax Inc. USB TouchController: 始终报告核心事件 [ 51.879] (**) evdev:eGalax Inc. USB TouchController:设备:“/dev/input/event3” [ 51.879] (--) evdev:eGalax Inc. USB TouchController:供应商 0xeef 产品 0x1 [ 51.879] (--) evdev: eGalax Inc. USB TouchController: 找到绝对轴 [ 51.879] (--) evdev: eGalax Inc. USB TouchController: 找到 x 和 y 绝对轴 [ 51.879] (--) evdev: eGalax Inc. USB TouchController: 找到绝对触摸屏 [ 51.879] (II) evdev: eGalax Inc. USB TouchController: 配置为触摸屏 [ 51.879] (**) evdev: eGalax Inc. USB TouchController: YAxisMapping: 按钮 4 和 5 [ 51.879] (**) evdev:eGalax Inc. USB TouchController:EmulateWheelButton:4,EmulateWheelInertia:10,EmulateWheelTimeout:200 [ 51.879](**)选项“config_info”“udev:/sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5:1.0/input/input3/event3” [ 51.879] (II) XINPUT: 添加扩展输入设备“eGalax Inc. USB TouchController”(类型:TOUCHSCREEN,id 9) [ 51.879] (II) evdev: eGalax Inc. USB TouchController:为绝对轴初始化。 [ 51.880] (**) eGalax Inc. USB TouchController: (accel) 保持加速度方案 1 [ 51.880] (**) eGalax Inc. USB TouchController: (accel) 加速度曲线 0 [ 51.880] (**) eGalax Inc. USB TouchController: (accel) 加速因子: 2.000 [ 51.880] (**) eGalax Inc. USB TouchController: (accel) 加速度阈值: 4 [ 51.881] (II) config/udev: 添加输入设备 eGalax Inc. USB TouchController (/dev/input/mouse1) [ 51.881] (II) 未指定输入驱动程序,忽略该设备。 [ 51.881] (II) 此设备可能已添加另一个设备文件。 [ 2310.541] (II) config/udev: 删除设备 eGalax Inc. USB TouchController [ 2310.573] (II)evdev:eGalax Inc. USB TouchController:关闭 [ 2310.574] (II)卸载模块:“evdev”
dmesg相关输出:
[ 4.845962] 输入:eGalax Inc. USB TouchController 作为 /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5:1.0/input/input3 [4.846690]usbcore:注册的新接口驱动程序usbtouchscreen
10-evdev.conf相关行:
“输入类”部分 标识符“evdev 触摸屏 catchall” MatchIsTouchscreen“开启” MatchDevicePath“/dev/input/event*” 选项“SwapAxes”“1” 选项“InvertY”“1” 驱动程序“evdev” 结束部分
如果你读到这里,谢谢你!我认为信息越多越好。感谢任何指点。
答案1
我最初以为是 USB 线接反导致显示器工作,但结果发现显示器在显示器外壳内移动。当我翻转 USB 线的末端时,它移动的幅度刚好足以开始工作。非常挑剔的显示器。