我这里有一个 BeagleBone Black,运行 Debian 8.3、Linux 4.1.15-ti-rt-r43。台式机是LXQT。
启动后,我想运行一个 .sh 文件 - 当桌面环境准备好时,因为该文件在更改路径并设置一些变量后,调用 mono 来启动基于 GUI 的程序。
使用“开始菜单”:
首选项 -> LXQt 设置 -> 会话设置 -> 自动启动
我添加了一个条目,首先在“全局自动启动”下,然后在“LXQt 自动启动”下(一次只选中两个框之一)。我在“命令”下通过“搜索...”按钮指定了我的 .sh 脚本的路径,即不会出现输入错误。我尝试了两者,“等待系统托盘”选中,未选中。点击“关闭”,每次尝试通过开始菜单重新启动机器。
桌面启动后,没有其他任何事情发生。不过,该脚本在 ssh remote* 命令提示符下运行良好 - 应用程序启动。此外,将其复制到桌面并单击它 - 有效。
_* .sh 文件包含“export DISPLAY=:0”行,因为它首先用于通过 ssh 启动以启动 GUI 应用程序。我评论了它,看看这是否会改变这里的任何东西,它没有。
编辑:所以我现在已经在~/.config/autostart中手动制作了一个.desktop文件- 注意我在 UI 中单击时在该文件夹中创建的 .desktop 文件,如上所述。在我的文件中,我指定了启动我的 .sh 脚本的路径等,并将一个额外的选项设置为 true:“终端”,它指定自动启动程序应该在终端中运行。这样做是为了向我展示——是的,确实,一些东西在启动/加载桌面环境后启动,因为终端是可见的,即我的自动启动文件不会被忽略。但是我的 .sh 脚本中的“echo”命令没有显示在那个终端上,我的单声道应用程序也没有启动。如果我然后打开另一个远程外壳,并复制+粘贴我在“Exec”下的自动启动 .desktop 文件中给出的路径,它会按预期启动我的应用程序 - 所以路径是正确的。
那么,那里发生了什么?LXQt 桌面显然找到了我的文件,尝试自动启动,但它什么也没做。可能的原因?我想(不知道这一切是如何在幕后工作的),也许单声道/GUI 还没有准备好,即使桌面加载了,出于某种有趣的原因,我放了一个回声“正在睡觉......”,睡眠 30 秒,在我的 .sh 文件中调用应该自动启动的单声道应用程序之前,回显“调用单声道应用程序...”。在启动时打开的终端中,这些都看不到,也无济于事。
好的,它有效。除了注意到以下区别之外,我没有非常准确的答案来回答为什么自动启动不起作用的确切问题:.sh 文件不起作用,应用程序直接起作用。
我现在做了什么:
删除自动启动文件夹中的旧 .desktop 文件后,我创建了一个:
插入这个:
注意:通过路径变量找到的“Exec”的可执行文件是单声道,它的命令行参数是在单声道框架上运行的“可执行文件”的路径。
这按预期工作。重新启动-> 应用程序启动。
编辑:请注意,对我来说,该应用程序没有 Path 分配的工作目录,这可能是我这边的某个错误,但我会提到它,以防万一。
现在我希望在拒绝在这里工作的原始 .sh 文件中完成一些事情。所以我暂时不会“接受”我自己的答案,以防有人能准确说出发生了什么。
编辑 - 一些参考:
https://wiki.archlinux.org/index.php/Desktop_entries#File_example
https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys
所以,这里的交易可能是,在某些时候,您或其他人运行 lxqt-config-session,这是一个允许您构建这些的图形应用程序,没有新启动条目的默认名称 - 它是空白的. 结果,生成的文件只是命名为“.desktop”。这反过来又是一个隐藏文件,在任何情况下都不会匹配某些通配符搜索。在任何情况下,任何名为“.desktop”的东西都会被忽略。
无论您是使用 lxqt-config-session 来设置它,还是只是手动创建文件,您都希望使用像“foo.desktop”这样的普通名称。
老实说,在我看来,lxqt-config-session 允许此名称为空白的事实是一个中等严重的错误。