首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用LXDE会话自动启动GUI应用程序

用LXDE会话自动启动GUI应用程序
EN

Stack Overflow用户
提问于 2016-11-19 22:02:21
回答 4查看 3.8K关注 0票数 2

有很多关于这个话题的信息,但出于某种原因,我无法让它发挥作用。这是在raspberry pi运行的'DietPi‘口味的拉斯宾发行版,也许是什么区别我的问题与其他。

因此,在LXDE会话开始后,我希望在引导时启动一个GUI应用程序。因此,我在这里使用了以下文件:

代码语言:javascript
运行
复制
/etc/xdg/lxsession/LXDE/autostart

并增加了一行:

代码语言:javascript
运行
复制
@/myapplication

但是,它会启动该程序的多个实例,而第一个实例总是崩溃。这会造成问题,因为对资源(IO、文件等)存在一定的竞争。因此,我所做的是创建脚本文件/myapplication-autostart.sh,如下所示:

代码语言:javascript
运行
复制
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次,并且第一次启动时周围的环境导致程序崩溃。有人知道调用这个自动启动脚本的顺序和行为吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-11-20 14:34:42

这是最后的解决办法。

/etc/xdg/lxsession/LXDE/autostart添加了一行:

代码语言:javascript
运行
复制
/myapplication-autostart.sh

和/myapplication-autostart.sh改为:

代码语言:javascript
运行
复制
#!/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自动启动文件上,但是在我想关闭应用程序的情况下,它变得很烦人,因为它会保持重新打开。我以后再放回去吧。

谢谢你的帮助!

票数 1
EN

Stack Overflow用户

发布于 2021-02-10 20:23:36

还可以使用XDG标准自动启动(它独立于已使用的桌面环境),方法是将桌面文件放在

  • $XDG_CONFIG_HOME/autostart (默认情况下为~/.config/autostart)
  • 或者在$XDG_CONFIG_DIRS/autostart自动启动系统(默认情况下是/etc/xdg/autostart)。

这样的.desktop-file看起来可能是:

代码语言:javascript
运行
复制
[Desktop Entry]
Type=Application
Version=1.0
Name=JDownloader
Exec=/usr/local/bin/my-application.sh
Categories=Utilities

桌面文件的规范可以在freedesktop.org上找到.

票数 3
EN

Stack Overflow用户

发布于 2016-11-19 23:10:00

首先,关于打开程序的几个实例的一些评论:当您在启动文件(例如:@/myapplication)的行的开头使用"@“时,这会请求您的系统尝试启动该程序,但是如果程序未能正确打开,则系统将尝试多次打开它直到它正确打开--如果从开始的行中删除"@”,系统将只尝试打开程序一次。

现在,为了找出程序失败的原因,我建议您添加

代码语言:javascript
运行
复制
2> /file/log

到脚本上的每个命令的末尾。这样做会将任何错误消息附加到日志(/file/ log ),分析这些错误消息将是找出程序行为错误的关键。

一个重要的注意事项:如果您的程序需要根权限来运行,那么当调用via /etc/xdg/lxsession/LXDE/autostart时,它将失败,因为此方法调用没有提升权限的程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40698395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档