如何用 python 应用程序替换桌面界面
how to replace the desktop interface with a python application
我正在创建一个 GUI 界面,它将使用带有 raspberry pi 的 7" 触摸显示屏 3. 我希望 GUI 取代桌面,我不希望它显示在 window 在桌面上。关于如何做到这一点的任何想法。我已经阅读了 raspberry pi 文档以编辑 rc.local 脚本以在登录时启动应用程序,但我不知道如何在不创建 window
的情况下设置 python GUI
你的 pi 启动并显示一个控制台 - 只是文本 - 通过 运行ning 一个程序 (getty)。然后你 运行 另一个应用程序称为图形显示管理器,然后 运行 是一个 window 管理器。在 pi 上,它通常是 gnome,但还有很多其他的,.. 这个 window 管理器是显示你的 GUI window 的。你想要的显然是可能的,只是做起来不简单。您所说的是信息亭模式应用程序仍然 运行ning 'on the desktop' 正如您所说,但它完全遮盖了桌面并且不允许您切换或散焦或更复杂的 JeOS 之类的Kodi/XBMC 裸机安装 运行ning 没有你当前的 window 经理。您的 python 必须完成显示管理器和 window 管理器的工作,而且速度会非常非常慢。
使用真正轻便的 window 管理器并进入信息亭模式。或者你可以用文字去!有一些库,例如 ncurses,但我不确定它如何与您的触摸屏显示器一起使用。
1。
禁用图形界面,即从 运行ning 停止桌面管理器。
在 Raspbian 上,您可以使用 raspiconfig 来完成它。
2。
设置自动登录 bash
3。
自动阻止 startx 运行ning 桌面管理器
4。
添加您的应用程序以在执行自动登录时从 .bash_rc 开始。
要设置自动登录,首先在 /bin 目录中创建一个名为 autologin 的脚本:
#! /bin/bash
/bin/login -f pi
注意:pi 是 raspbian 上的用户,在执行 sudo 时不会要求输入密码。
要使用创建的脚本编辑 /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 你的应用程序或更好的脚本,它将 运行 你的应用程序(最后):
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 显示,运行s 启动脚本作为后台作业并启动 X 服务器。
4。
X 服务器不会进入桌面管理器,因为 /home/.xinitrc 会在它之前停止它。
5。
启动脚本休眠一秒钟以确保 X 正在 运行ning 并能够将图形发送到 tty7,切换到 tty7 以便用户不必手动执行,然后 运行s 您的应用程序这将出现。
如果您的应用程序不是图形化的,您将只会看到一个很大的空缺。 :D
这里的问题是你绝对应该为这个东西创建一个用户。如果您的应用程序崩溃或用户切换到 tty1 并终止 X,则 he/she 在 bash 中,已登录。
取决于您需要的安全级别。您可以做很多事情来防止滥用。例如,使用 fcntl 改变 tty1 所处的模式,使其不再接收按键输入。
或者使用一些其他的技巧,或者稍微重新安排这个过程,或者确保 tty1 运行s jobs 中的所有内容都带有 nohup,然后注销等
我正在创建一个 GUI 界面,它将使用带有 raspberry pi 的 7" 触摸显示屏 3. 我希望 GUI 取代桌面,我不希望它显示在 window 在桌面上。关于如何做到这一点的任何想法。我已经阅读了 raspberry pi 文档以编辑 rc.local 脚本以在登录时启动应用程序,但我不知道如何在不创建 window
的情况下设置 python GUI你的 pi 启动并显示一个控制台 - 只是文本 - 通过 运行ning 一个程序 (getty)。然后你 运行 另一个应用程序称为图形显示管理器,然后 运行 是一个 window 管理器。在 pi 上,它通常是 gnome,但还有很多其他的,.. 这个 window 管理器是显示你的 GUI window 的。你想要的显然是可能的,只是做起来不简单。您所说的是信息亭模式应用程序仍然 运行ning 'on the desktop' 正如您所说,但它完全遮盖了桌面并且不允许您切换或散焦或更复杂的 JeOS 之类的Kodi/XBMC 裸机安装 运行ning 没有你当前的 window 经理。您的 python 必须完成显示管理器和 window 管理器的工作,而且速度会非常非常慢。
使用真正轻便的 window 管理器并进入信息亭模式。或者你可以用文字去!有一些库,例如 ncurses,但我不确定它如何与您的触摸屏显示器一起使用。
1。 禁用图形界面,即从 运行ning 停止桌面管理器。 在 Raspbian 上,您可以使用 raspiconfig 来完成它。
2。 设置自动登录 bash
3。 自动阻止 startx 运行ning 桌面管理器
4。 添加您的应用程序以在执行自动登录时从 .bash_rc 开始。
要设置自动登录,首先在 /bin 目录中创建一个名为 autologin 的脚本:
#! /bin/bash
/bin/login -f pi
注意:pi 是 raspbian 上的用户,在执行 sudo 时不会要求输入密码。
要使用创建的脚本编辑 /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 你的应用程序或更好的脚本,它将 运行 你的应用程序(最后):
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 显示,运行s 启动脚本作为后台作业并启动 X 服务器。
4。 X 服务器不会进入桌面管理器,因为 /home/.xinitrc 会在它之前停止它。
5。 启动脚本休眠一秒钟以确保 X 正在 运行ning 并能够将图形发送到 tty7,切换到 tty7 以便用户不必手动执行,然后 运行s 您的应用程序这将出现。 如果您的应用程序不是图形化的,您将只会看到一个很大的空缺。 :D
这里的问题是你绝对应该为这个东西创建一个用户。如果您的应用程序崩溃或用户切换到 tty1 并终止 X,则 he/she 在 bash 中,已登录。
取决于您需要的安全级别。您可以做很多事情来防止滥用。例如,使用 fcntl 改变 tty1 所处的模式,使其不再接收按键输入。 或者使用一些其他的技巧,或者稍微重新安排这个过程,或者确保 tty1 运行s jobs 中的所有内容都带有 nohup,然后注销等