树莓派的触屏Kivy应用程序

4
这是一个场景:我用Python框架Kivy编写了一个GUI,我想在带有this touchscreen的Raspberry Pi上运行它。我已经完成了安装,TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/touchscreen FRAMEBUFFER=/dev/fb1 nohup startx &可以很好地运行xwindow桌面GUI。然而,我一直无法使我的kivy GUI工作。我尝试通过设置DISPLAY环境变量来使测试Tkinter应用程序正常工作,但是该方法对kivy没有效果。我在我的kivy应用程序顶部放置了以下内容,但是并没有成功:
os.environ['SDL_VIDEODRIVER'] = 'fbcon'
os.environ['SDL_FBDEV'] = '/dev/fb1'
os.environ['SDL_MOUSEDRV'] = 'TSLIB'
os.environ['SDL_MOUSEDEV'] = '/dev/input/touchscreen'

当我运行我的应用程序时,这是调试输出:
[INFO   ] [Logger      ] Record log in /home/pi/.kivy/logs/kivy_14-04-21_10.txt
[INFO   ] Kivy v1.8.1-dev
[INFO   ] [Python      ] v2.7.3 (default, Mar 18 2014, 05:13:23) 
[GCC 4.6.3]
[INFO   ] [Factory     ] 157 symbols loaded
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_pygame, img_gif (img_pil ignored)
[INFO   ] [Text        ] Provider: pygame
[INFO   ] [Loader      ] using a thread pool of 2 workers
[INFO   ] [Window      ] Provider: egl_rpi
[INFO   ] [GL          ] OpenGL version <OpenGL ES 2.0>
[INFO   ] [GL          ] OpenGL vendor <Broadcom>
[INFO   ] [GL          ] OpenGL renderer <VideoCore IV HW>
[INFO   ] [GL          ] OpenGL parsed version: 2, 0
[INFO   ] [GL          ] Shading version <OpenGL ES GLSL ES 1.00>
[INFO   ] [GL          ] Texture max size <2048>
[INFO   ] [GL          ] Texture max units <8>
[INFO   ] [Shader      ] fragment shader: <Compiled>
[INFO   ] [Shader      ] vertex shader: <Compiled>
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[INFO   ] [GL          ] NPOT texture support is available
[INFO   ] [OSC         ] using <multiprocessing> for socket
[INFO   ] [ProbeSysfs  ] device match: /dev/input/event0
[INFO   ] [HIDInput    ] Read event from </dev/input/event0>
[INFO   ] [Base        ] Start application main loop
[INFO   ] [HIDMotionEvent] using <stmpe-ts>

我不太了解帧缓冲和类似的东西;我希望有人能指点一下我。看起来我提到的上述环境变量对于显示pygame应用程序很有用,而kivy是基于pygame构建的。
一些链接:
- 这个是我现在正在尝试的东西,以防需要设置DISPLAY和FBDEV。我还要检查一下我是否已经安装了directfb或fbcon。 - 相关的kivy google组问题 - 我可能会尝试的一个分支 我很难找到任何直接涉及到这个问题的信息,最近的时间是去年四月份。
任何帮助都将不胜感激。提前致谢!

Kivy对树莓派的支持还不完整,但基本功能是可以使用的。我能够在我的树莓派上运行示例 - 窗口只是在其他所有内容的顶部绘制,鼠标指针不显示(但点击有效),键盘输入无效(因此我必须Alt-Tab到我的终端,然后按Ctrl-C来终止应用程序)。 - kitti
1
你正在运行Raspbian吗?并且你是否已经更新到最新版本(sudo apt-get update && sudo apt-get dist-upgrade)?顺便说一下 - 你不需要设置任何SDL环境变量,因为它们会被忽略。Kivy在RPi上使用VideoCore EGL库。 - kitti
我正在使用Raspbian系统,并且已经更新到最新版本,运行的是kivy-dev v1.8.1。感谢您对SDL相关内容的解释。我尝试过在kivy源代码中使用不同的窗口提供程序,但它们都出现了更严重的错误。看起来最好的窗口提供程序(也是默认的)是egl_rpi。在默认配置下,我没有遇到任何错误,只是窗口没有显示出来。 - jstaab
2个回答

3
这样不会起作用。SPI屏幕工作在SPI上,由CPU控制:http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus Kivy使用树莓派的GPU而非SPI或X11。据我所知,在SPI上显示加速的GLES应用程序将不起作用。
换句话说,您可以通过在X11之外的命令行执行任何GLES软件来确认此行为。

非常有帮助的答案,谢谢。我会在周五再次回到办公室时测试一下没有GLES是否可行。同时,我想知道您是否可以推荐一个在树莓派上制作GUI的kivy替代品?我已经研究了pygame和tkinter。两者都很笨重,但都可以使用。Tkinter很容易入门,所以我可能会选择它。我们确实需要该库基本上没有限制,因此LGPL3、MIT或BSD许可证最好。再次感谢,这是一个非常启发性的答案。 - jstaab
经过一番思考,您认为是否有可能将加速图形转储到帧缓冲区(例如,/dev/fb1)?这个触摸屏已经可以显示视频。不确定是否相关。对于我的无知表示歉意-我刚刚开始接触这些内容。 - jstaab
1
我没有足够的技术知识告诉你这是否可行。如果在Rpi上进行UI而不使用GLES,任何标准工具包都可以完成工作(如tkinter、qt、gtk等)。如果是游戏,pygame可能是更好/标准的选择。再次强调,这只是我对SPI的理解,我在等待您的确认 :) - tito
1
我发现这个Raspberry Pi UI development for GSOC 2014对我很有帮助,但是在触摸方面仍然存在问题。基本上它使用fbcp/dev/fb0转储到/dev/fb1 - faulty

0

我发现只需取消注释/boot/config.txt中的以下行即可使其正常工作

disable_overscan=1

然后启动 fbcp

fbcp &

例如,展示演示(我为Python3.4编译了Kivy)的运行:

python3.4 kivy/examples/demo/showcase/main.py

kivy running on SPI display

触摸功能正常,只是我的Y轴是反向的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接