问题描述
我为我编写的程序创建了一个 my-app.desktop
文件。当我双击它时,我收到错误消息“启动应用程序时出错”。如何获得有关问题所在的更多详细信息?
我在对话框中看到了对 “details” 部分的引用,但在我看到的那个部分中没有类似的内容。如果我在我的 Mac 上,我会打开控制台应用程序以查看是否记录了任何错误,但我还没有在 Ubuntu 上了解到任何类似的东西。
(请注意,与其他 similarly-titled 问题不同,我不是在问这个特定的 .desktop 文件有什么问题;我想知道一般情况下如何找出答案。)
最佳方案
在这里找到了这个问题的答案:https://askubuntu.com/a/836842
尝试这个 :
desktop-file-validate my-app.desktop
它在您的 .desktop
文件中输出错误。例如我的返回:
error: first group is not "Desktrop Entry"
因此,一旦我将拼写错误更正为 Desktop Entry
,脚本就成功运行了。
次佳方案
这是您可以使用的技巧。为您的应用程序创建一个包装器脚本,它将启动它并捕获错误输出:
#!/usr/bin/env bash
## Launch 'yourapp' and capture its standard error output
/path/to/yourapp 2>~/myapp.log
将其另存为 ~/foo.sh
并使用 chmod +x ~/foo.sh
使其可执行。现在,将您的桌面启动器指向它。就像是:
[Desktop Entry]
Version=2.0
Type=Application
Exec=/home/kevin/foo.sh
Terminal=true
Comment=My app!
这会将任何错误消息重定向到 ~/myapp.log
,您可以在闲暇时检查它们。如果您希望将连续的错误消息附加到文件而不是覆盖它,则可以使用 2>>~/myapp.log
。
顺便说一句,$PATH
不同的原因是因为您可能在 ~/.bahsrc
中设置了 $PATH
,图形环境无法读取它。这也是一个坏主意,因为每次打开新终端时都会设置 $PATH
,这是不必要的开销。为此使用 ~/.profile
。有关何时读取哪些文件的更多详细信息,请参阅 here 以及有关应将哪个文件用于什么目的的更多信息,请参阅 here 。
第三种方案
通过在终端中运行以下命令:
awk -F= '/Exec=/{system($2)}' your_desktop_file.desktop
我相信您会发现从 .desktop 文件内部分配给 Exec
字段的命令是否有错误。
第四种方案
通常,终端(输出)会为您提供很多有用的信息,包括应用程序和桌面文件。一个例子:\n如果我从终端运行我的应用程序,在终端中输入命令,应用程序就会启动。
但是,如果出现问题,您会得到如下输出:
Traceback (most recent call last):
File "/home/jacob/Bureaublad/werkmap_2.0/uploaded_versions/2.1.2/32_en_ppa /qle-2.1.2/code/qle_quicklisteditor", line 4044, in <module>
MainWindow()
File "/home/jacob/Bureaublad/werkmap_2.0/uploaded_versions/2.1.2/32_en_ppa /qle-2.1.2/code/qle_quicklisteditor", line 51, in __init__
self.load_sectons()
AttributeError: 'MainWindow' object has no attribute 'load_sectons'
jacob@Jacobwerkkamer:~/Bureaublad/werkmap_2.0/uploaded_versions/2.1.2/32_en_ppa /qle-2.1.2/code$
它为您提供了很多有用的信息,甚至是应用程序中导致错误的行。 (我是故意搞砸的)
与桌面文件相同,只需在.desktop 文件的目录中打开一个终端并将其拖到终端上即可。例如,如果您从 .desktop 文件中删除 Exec=
行,终端将告诉您它找不到要执行的命令。
要测试应用程序是否出错,只需运行您在 Exec=
字符串之后放置的内容。
终端输出通常非常具体并且在错误报告中很有用,例如 here 。