我正在创建一个将使用7"触摸显示与树莓派3.我希望GUI取代桌面,我不希望它显示在桌面上的窗口中。关于如何做到这一点的任何想法。我已经阅读了raspberry pi文档来编辑rc.local脚本以在登录时启动应用程序,但我无法弄清楚如何在不创建窗口的情况下设置python GUI
答案 0 :(得分:0)
你的pi启动并通过运行程序(getty)显示控制台 - 只是文本。然后运行另一个名为图形显示管理器的应用程序,然后运行窗口管理器。在pi上它通常是gnome但是还有很多其他的......这个窗口管理器显示你的GUI窗口。你想要的东西显然是可能的,这只是一件非常重要的事情。您所说的是要么仍然在桌面上运行的信息亭模式应用程序,但它完全遮挡桌面并且不允许您切换或解除焦点,或者像Kodi / XBMC裸机更复杂的JeOS没有当前窗口管理器的安装运行。你的python必须完成显示管理器和窗口管理器的工作,它会非常非常慢。
使用非常轻的窗口管理器并进入自助服务终端模式。或者你可以使用文字!有图书馆,例如ncurses,但我不知道这对你的触摸屏显示器有什么用处。
答案 1 :(得分:0)
1。 禁用图形界面,即停止桌面管理器运行。 在Raspbian上,您可以使用raspiconfig来完成它。
2。 将自动登录设置为bash
3。 阻止startx自动运行桌面管理器
4。 在执行自动登录时,添加要从.bash_rc启动的应用程序。
要设置自动登录,首先在/ bin目录中创建一个名为autologin的脚本,该脚本执行:
#! /bin/bash
/bin/login -f pi
注意:pi是raspbian上的用户,在sudo-ing时不会要求输入密码。
使用创建的脚本编辑/ etc / inittab:
向下滚动到指定终端的位置,并将tty1的行更改为:
1:2345:respawn:/sbin/getty -n -l /bin/autologin 38400 tty1
请注意id与旧的tty1设置相匹配。 然后在用户的主目录(/ home / pi)中添加(如果它还没有)一个名为“.xinitrc”的文件,其中包含:
#! /bin/bash
cat
这将阻止X服务器在启动时调用桌面管理器。
现在将/ home / pi的.bashrc添加到您的app或更好的脚本中运行您的应用程序(最后):
export DISPLAY=:0
/home/pi/Desktop/appstart &
startx
appstart是:
#! /bin/bash
# Wait a second for X server to start:
sleep 1
# Now X is running and we have to switch into video terminal using chvt (change virtual terminal) command
# Graphic terminal is on Raspbian tty7
sudo chvt 7
# Start the app:
python /home/pi/Desktop/myapp/myapp.py
在完成所有这些设置之后,将会有以下几点:
1。 您运行Raspberry Pi并将其自动登录到用户pi
2。 当Bash登录时执行/home/pi/.bashrc
3。 .bashrc设置$ DISPLAY变量,因为还没有X显示,运行启动脚本作为后台作业并启动X服务器。
4。 X服务器不会进入桌面管理器,因为/home/.xinitrc会使它停止它。
5。 启动脚本会休眠一秒以确保X正在运行并能够将图形发送到tty7,切换到tty7以便用户不必手动执行,然后运行将显示的应用程序。 如果您的应用程序不是图形的,那么您将只看到一个大的东西。 :d
这里的问题是你绝对应该为这些东西创建一个用户。如果您的应用程序崩溃或用户切换到tty1并终止X,则他/她处于bash状态,登录。
取决于您需要的安全级别。你可以做很多事情来防止滥用。例如,使用fcntl更改模式tty1,使其无法再接收键输入。 或者使用其他一些技巧,或稍微重新安排这个程序,或者确保tty1在nohup的作业中运行所有内容,然后注销等等。