我这里有一个 BeagleBone Black,运行 Debian 8.3、Linux 4.1.15-ti-rt-r43。桌面是LXQT。
启动后,我想运行一个 .sh 文件 - 当桌面环境准备好时,该文件在更改路径并设置一些变量后,调用 mono 来启动基于 GUI 的程序。
使用“开始菜单”:
首选项 -> LXQt 设置 -> 会话设置 -> 自动启动
我首先在“Global Autostart”下添加了一个条目,后来在“LXQt Autostart”下添加了一个条目(一次仅选中两个框之一)。我通过“搜索...”按钮在“命令”下指定了 .sh 脚本的路径,即不可能输入错误。我尝试了“等待系统托盘”选中和未选中两种情况。点击“关闭”,并每次尝试通过开始菜单重新启动机器。
桌面启动后,没有任何反应。不过,该脚本确实可以从 ssh Remote* 命令提示符正常运行 - 应用程序启动。另外,将其复制到桌面并单击它 - 可以。
_* .sh 文件包含“export DISPLAY=:0”行,因为它首先用于通过 ssh 启动 GUI 应用程序。我将其注释掉,看看这是否会改变这里的任何内容,但事实并非如此。
编辑:所以我现在手动制作了一个。桌面文件输入〜/.config/自动启动- 如上所述,请注意我在 UI 中单击而在该文件夹中创建的 .desktop 文件 LXQt。在我的文件中,我指定了启动 .sh 脚本的路径等,并将一个额外选项设置为 true:“Terminal”,它指定自动启动程序应在终端中运行。这所做的是向我展示——是的,确实如此,某物在启动/加载桌面环境后启动,因为终端是可见的,即我的自动启动文件不会被忽略。但是我的 .sh 脚本中的“echo”命令没有显示在该终端上,我的单声道应用程序也没有启动。如果我然后打开另一个远程 shell,并复制并粘贴我在“Exec”下的自动启动 .desktop 文件中给出的路径,它确实会按预期启动我的应用程序 - 所以路径是正确的。
那么,那里发生了什么? LXQt 桌面显然找到了我的文件,尝试自动启动,但它没有执行任何操作。可能的原因?我想(不太知道这一切在幕后是如何工作的),也许单声道/GUI还没有准备好,即使桌面加载了,出于某种有趣的原因,我放了一个回声“睡眠......”,睡眠30秒,在调用我的 .sh 文件中应该自动启动的单声道应用程序之前,回显“调用单声道应用程序...”。这些在现在启动时打开的终端中都不可见,而且没有帮助。
答案1
好的,它有效。对于这个问题我没有一个非常准确的答案为什么除了注意到以下区别之外,自动启动不起作用:.sh 文件不起作用,应用程序直接起作用。
我现在做了什么:
删除自动启动文件夹中的旧 .desktop 文件后,我创建了这一:
$ nano ~/.config/autostart/MyAppName.desktop
插入这个:
[Desktop Entry]
Exec=mono /full/path/to/mono_c#/gui/app/myappname.exe
Path=/full/path/to/working/directory
Name=MyAppName
Type=Application
Version=1.0
注意:这里通过路径变量找到的“Exec”的可执行文件是mono,其命令行arg是在mono框架上运行的“可执行文件”的路径。
这按预期工作。重新启动 -> 应用程序启动。
编辑:请注意,对我来说,应用程序没有由 Path 分配的工作目录,可能是我这边的某个地方出现错误,但我会提到它,以防万一。
现在我希望在原始 .sh 文件中完成一些事情,但这里不起作用。所以我暂时不会“接受”我自己的答案,以防有人能准确地告诉我们发生了什么。
编辑-一些参考:
https://wiki.archlinux.org/index.php/Desktop_entries#File_example
答案2
因此,这里的问题可能是,在某个时候,您或其他人运行了 lxqt-config-session,这是一个允许您构建这些的图形应用程序,但您的新启动条目没有默认名称 - 它是空白的。结果,生成的文件名为“.desktop”。反过来,这是一个隐藏文件,并且在任何情况下都不会匹配某些通配符搜索。无论如何,任何名为“.desktop”的内容都会被忽略。
无论您是否使用 lxqt-config-session 来设置它,或者只是手动创建文件,您都希望使用像“foo.desktop”这样的普通名称。
老实说,在我看来,lxqt-config-session 允许该名称为空的事实是一个中等严重的错误。