0

Raspbian 运行在 RPi3B+、Qt5.9.2 交叉编译、QWidget 应用程序上。键盘输入转到后面的外壳而不是我的应用程序。在本文档之后,我设置了以下环境变量:

LD_LIBRARY_PATH=/home/pi/bin
QT_QPA_EVDEV_KEYBOARD_PARAMETERS=/dev/input/event1;grab=1
QT_QPA_ENABLE_TERMINAL_KEYBOARD=1
QT_QPA_GENERIC_PLUGINS=evdevmouse,evdevkeyboard
QT_QPA_EGLFS_FORCE888=1
QT_QPA_PLATFORM=eglfs
QT_QPA_EGLFS_DEBUG=1

并尝试在本地(即坐在目标前面)或通过 SSH 运行应用程序。行为是相同的。

相反,鼠标工作正常。

在那份文件中有什么我不明白的地方吗?

4

1 回答 1

2

它适用于我:

export QT_QPA_EVDEV_KEYBOARD_PARAMETERS=grab=1 
export QT_QPA_EVDEV_MOUSE_PARAMETERS=grab=1

并运行:

sudo -E ./myapp -platform eglfs

我认为sudo是必要的,因为文档中有关/dev/input/event*权限的内容。还-E需要选项,以便 sudo 保留导出的变量。

我希望这会有所帮助。

用于嵌入式 Linux 的 Qt

输入
当不存在窗口系统时,鼠标、键盘和触摸输入直接通过 evdev 或使用帮助库(如 libinput 或 tslib)读取。请注意,这要求用户可以读取设备节点 /dev/input/event*。eglfs 和 linuxfb 已编译所有输入处理代码。


我想分享有关我之前回复的其他信息:

这是我防止鼠标和键盘事件从我的应用程序传递到终端和 X11 系统的导出列表:

export QT_QPA_EGLFS_PHYSICAL_WIDTH=155
export QT_QPA_EGLFS_PHYSICAL_HEIGHT=86
export QT_QPA_EGLFS_WIDTH=1024
export QT_QPA_EGLFS_HEIGHT=614
export QT_QPA_EVDEV_KEYBOARD_PARAMETERS=grab=1
export QT_QPA_EVDEV_MOUSE_PARAMETERS=grab=1
export QT_QPA_EGLFS_NO_LIBINPUT=1

请注意,这export QT_QPA_EGLFS_NO_LIBINPUT=1是必要的,因此 Qt 自己的evdev处理程序会发挥作用,因此QT_QPA_EVDEV*会考虑选项。这是我可以验证的。

用于嵌入式 Linux 的 Qt

使用 libinput
... 如果 libinput 支持不可用或QT_QPA_EGLFS_NO_LIBINPUT设置了环境变量,Qt 自己的 evdev 处理程序就会发挥作用。

另外,作为评论,我尝试了这种配置,首先是使用相同的 USB(罗技)控制的鼠标和键盘,就像这样:键盘工作正常,但鼠标不行。所以我决定尝试使用独立的鼠标和键盘,现在两者(鼠标和键盘)都能正常工作。

我也不必使用SUDOor运行我的应用程序SUDO -E,因为该目录/dev/input/event*具有该组的读/写权限,'input'并且我的用户是该组的一部分。

问候!

于 2019-01-21T16:42:51.570 回答