使用LXDE会话

时间:2016-11-19 22:02:21

标签: linux bash shell

关于这个主题有很多信息,但由于某些原因我无法让它工作。这是在覆盆子pi上运行'DietPi'风味的覆盆子发行版,也许是我的问题与其他问题的区别。

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

/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 imshow)。这很奇怪,因为如果X会话不可用,程序也会无头,但由于某种原因它会崩溃,我不知道在哪里检查原因。

另外,为了测试它不是脚本文件的问题,我评论了除了/ myapplication以外的所有内容,我发现脚本文件在一个连续循环中运行,每次关闭应用程序时它都会打开备份。我不确定为什么会这样。

我已尝试在脚本中添加睡眠延迟,但没有帮助。无论出于何种原因,似乎LXDE自动启动脚本在启动pi时至少运行了3次,并且第一次启动时导致程序崩溃。有人理解调用此自动启动脚本的顺序和行为吗?

3 个答案:

答案 0 :(得分:1)

首先,关于打开程序的几个实例的一些注释:当你在启动文件的行开头使用“@”时(例如@ / myapplication),这会请求你的系统尝试启动程序,但如果程序无法正确打开,那么系统将尝试多次打开它,直到它正确打开 - 如果从行开头删除“@”,那么系统将只尝试打开程序一次。

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

2> /file/log

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

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

答案 1 :(得分:0)

这是最终解决方案......

/ 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输出上的实际显示和我想要的显示。真的,有条件的检查,看看应用程序是否是必要的,但我把它留在那里是安全的。我本可以在LXDE自动启动文件上留下@但在我想要关闭应用程序的情况下它很烦人,因为它会继续重新打开。可能我会稍后再说。

感谢您的帮助!

答案 2 :(得分:0)

也可以使用 XDG 标准自动启动 - 它独立于所使用的桌面环境 - 通过将桌面文件放置在

  • $XDG_CONFIG_HOME/autostart(默认为 ~/.config/autostart
  • 或在 $XDG_CONFIG_DIRS/autostart 处(默认为 /etc/xdg/autostart)进行系统范围的自动启动。

这样的 .desktop 文件可能如下所示:

[Desktop Entry]
Type=Application
Version=1.0
Name=JDownloader
Exec=/usr/local/bin/my-application.sh
Categories=Utilities

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