有很多关于这个话题的信息,但出于某种原因,我无法让它发挥作用。这是在raspberry pi运行的'DietPi‘口味的拉斯宾发行版,也许是什么区别我的问题与其他。
因此,在LXDE会话开始后,我希望在引导时启动一个GUI应用程序。因此,我在这里使用了以下文件:
/etc/xdg/lxsession/LXDE/autostart
并增加了一行:
@/myapplication
但是,它会启动该程序的多个实例,而第一个实例总是崩溃。这会造成问题,因为对资源(IO、文件等)存在一定的竞争。因此,我所做的是创建脚本文件/myapplication-autostart.sh,如下所示:
if pgrep "myapplication" > /dev/null
then
echo "my application is already running"
else
/myapplication
fi
然后将/etc/xdg/lxsession/LXDE/autostart更改为@/myapplication-autostart.sh。现在我发现程序只启动一次,但是实例崩溃了。当它试图创建一个窗口时,它会崩溃(opencv )。这很奇怪,因为如果X会话不可用,程序也会无头运行,但由于某种原因,它会崩溃,我不知道在哪里检查原因。
此外,为了测试脚本文件没有问题,我注释了除/myapplication之外的所有内容,我发现脚本文件在一个连续循环中运行,每次关闭应用程序它都会重新打开。我也不知道这是为什么。
我尝试在脚本中添加一个睡眠延迟,但没有帮助。不管出于什么原因,似乎LXDE自动启动脚本在启动pi时至少运行3次,并且第一次启动时周围的环境导致程序崩溃。有人知道调用这个自动启动脚本的顺序和行为吗?
发布于 2016-11-20 14:34:42
这是最后的解决办法。
/etc/xdg/lxsession/LXDE/autostart添加了一行:
/myapplication-autostart.sh
和/myapplication-autostart.sh改为:
#!/bin/bash
if pgrep "myapplication" > /dev/null
then
echo "my application is already running"
else
if [[ "$DISPLAY" = ":0" ]]
then
/myapplication
fi
fi
为了发现问题,我不得不将显示变量写入文件,并将错误合并到文件中。在登录时创建了2个X会话,依次显示":1“和”显示":0“。显示":1“崩溃,因为,虽然不是无头的,但它没有初始化到特定的分辨率,并且在我的程序中有一些调整大小的代码。显示":0“是HDMI out上的实际显示,也是我想要的。实际上,有条件的检查看看应用程序是否必要,但为了安全起见,我把它留在了那里。我也可以将@留在LXDE自动启动文件上,但是在我想关闭应用程序的情况下,它变得很烦人,因为它会保持重新打开。我以后再放回去吧。
谢谢你的帮助!
发布于 2021-02-10 20:23:36
还可以使用XDG标准自动启动(它独立于已使用的桌面环境),方法是将桌面文件放在
$XDG_CONFIG_HOME/autostart
(默认情况下为~/.config/autostart
)$XDG_CONFIG_DIRS/autostart
自动启动系统(默认情况下是/etc/xdg/autostart
)。这样的.desktop
-file看起来可能是:
[Desktop Entry]
Type=Application
Version=1.0
Name=JDownloader
Exec=/usr/local/bin/my-application.sh
Categories=Utilities
桌面文件的规范可以在freedesktop.org上找到.
发布于 2016-11-19 23:10:00
首先,关于打开程序的几个实例的一些评论:当您在启动文件(例如:@/myapplication)的行的开头使用"@“时,这会请求您的系统尝试启动该程序,但是如果程序未能正确打开,则系统将尝试多次打开它直到它正确打开--如果从开始的行中删除"@”,系统将只尝试打开程序一次。
现在,为了找出程序失败的原因,我建议您添加
2> /file/log
到脚本上的每个命令的末尾。这样做会将任何错误消息附加到日志(/file/ log ),分析这些错误消息将是找出程序行为错误的关键。
一个重要的注意事项:如果您的程序需要根权限来运行,那么当调用via /etc/xdg/lxsession/LXDE/autostart时,它将失败,因为此方法调用没有提升权限的程序。
https://stackoverflow.com/questions/40698395
复制相似问题