如何用python应用程序替换桌面界面

时间:2017-05-25 17:55:31

标签: python user-interface raspberry-pi3

我正在创建一个将使用7"触摸显示与树莓派3.我希望GUI取代桌面,我不希望它显示在桌面上的窗口中。关于如何做到这一点的任何想法。我已经阅读了raspberry pi文档来编辑rc.local脚本以在登录时启动应用程序,但我无法弄清楚如何在不创建窗口的情况下设置python GUI

2 个答案:

答案 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的作业中运行所有内容,然后注销等等。