我正在尝试拥有一个在raspberry pi 4启动后自动启动的kivy GUI,运行无头的raspbian (安装了一个窗口管理器)。为此,我在/etc/rc.local中添加了以下行
su -c /home/pi/dummyfolder/run_gui pi调用的脚本是
#!/bin/bash
# this stops the sleeping screen
killall light-locker
# set display - allows execution over ssh
export DISPLAY=:0
python3 /home/pi/dummyfolder/gui.py -a &当我重新启动我的raspberry pi时,我看不到GUI。查看日志can的输出,我可以验证我的脚本是否正在运行。
当我手动运行shell脚本时,会显示GUI。当我直接运行rc.local时,情况也是如此。因此,我假设引导序列中存在一个问题,即显示脚本所需的服务尚未运行。
有人知道问题是什么吗?还是引导序列假设是正确的?
编辑:有人提议在raspy中设置等待网络。但是,我不能这样做,因为gui必须在没有网络的情况下运行。
发布于 2022-11-23 21:58:56
我做类似的事情,除了不运行窗口管理器。Kivy应用程序占据了整个屏幕。我使用~/..bashrc文件并将我想要的放在最后。最简单的方法是在.bashrc文件的末尾启动应用程序,但是有一些额外的东西可以使它更好。您可以将python命令放入一个单独的脚本文件中,此外,这段代码还会注意到是否已经完成ssh,因此当您登录进行维护时,它不会在终端会话启动时运行您的kivy应用程序。
在下面的示例中,my_fun将是启动python/kivy应用程序的脚本。
# at the end of ~/.bashrc
if [[ $SESSION_TYPE == "remote/ssh" ]]; then
is_running=$(pgrep -l python)
# echo "${is_running}"
if [ -n "$is_running" ]; then
echo -e "\n\n\033[01;31m============================================"
echo "----- WARNING a Python Process is running ---------"
echo -e "================================================\033[0m\n\n"
fi
echo -e "this is a remote session so the menu will not be presented"
return 1
else
echo -e "pause some seconds to wait for network interfaces..."
sleep 12s
ifconfig | grep netmask
sleep 1s
echo "direct console session"
my_fun
fi编辑了以添加以下内容:检测会话类型的代码,当然,在使用该变量之前必须放置会话类型。
# is this a remote terminal or not
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
SESSION_TYPE=remote/ssh
# many other tests omitted
else
case $(ps -o comm= -p $PPID) in
sshd|*/sshd) SESSION_TYPE=remote/ssh;;
esac
fihttps://stackoverflow.com/questions/74546028
复制相似问题