无法通过单击图标来运行程序,而在命令行中它可以运行

无法通过单击图标来运行程序,而在命令行中它可以运行

请注意,这是 Ubuntu 14.04 下的问题。其他任何 Linux 发行版均不存在此问题。没有理由关闭此问题...


我首先在 Magia Linux 下编写游戏,然后在 Ubuntu 14.04 LTS 上对其进行测试,以确保其正常运行。您可以在此处找到 Debian 软件包: http://tuer.sourceforge.net/en/play/

当我在命令行中输入“tuer”时,它会按预期运行我的游戏,但当我单击图标时,它不会运行我的游戏。将“终端”属性设置为“true”只会tuer.desktop非常快速地显示终端,但没有出现错误消息。桌面文件非常简单: http://sourceforge.net/p/tuer/code/HEAD/tree/pre_beta/jndt.xml#l952

/usr/bin/tuer路径中有一个符号链接/usr/share/tuer/tuer。我不明白为什么它只在 Ubuntu 下的命令行中起作用。也许问题出在脚本上: http://sourceforge.net/p/tuer/code/HEAD/tree/pre_beta/jndt.xml#l637

我认为可以以与桌面管理器使用 gtk-launch、xdg-open 或 gvfs-open 相同的方式打开桌面文件。

这里的问题是什么?

更新:我已按照 Serg 的建议将 .desktop 文件设为可执行文件,以消除可能的根本原因。我刚刚上传了新的 Debian 软件包(显然与 Ubuntu 兼容)。

答案1

我必须替换以下脚本:

#!/usr/bin/bash
#code snippet written by Dave Dopson: http://stackoverflow.com/a/246128
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
    APP_LAUNCHER_DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
    SOURCE="$(readlink "$SOURCE")"
    [[ $SOURCE != /* ]] && SOURCE="$APP_LAUNCHER_DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
APP_LAUNCHER_DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
$APP_LAUNCHER_DIR/jre/bin/java -server -Xmx256m -XX:MaxDirectMemorySize=128M -Djava.ext.dirs= -jar $APP_LAUNCHER_DIR/tuer.jar

经过

/usr/share/tuer/jre/bin/java -server -Xmx256m -XX:MaxDirectMemorySize=128M -Djava.ext.dirs= -jar /usr/share/tuer/tuer.jar

因为与终端不同,Unity 会忽略第一行并尝试解释我的狂欢脚本作为短跑脚本。它显示一次“ 5:错误替换”,另一次显示“** (g​​tk-launch:27745): 警告 **: 无法注册辅助总线:未收到回复。可能的原因包括:远程应用程序未发送回复、消息总线安全策略阻止回复、回复超时或网络连接中断。”,还有一次显示“没有这样的文件或目录”,并且它声称子进程“tuer”的执行已被中断,但没有任何详细解释。

我将在大约十小时内上传一些修复的 Debian 软件包。

结论:如果您想避免在 Ubuntu 下出现任何麻烦,即使脚本在命令行中运行,请使用 Bash 和 Dash 的通用 Posix 子集。

相关内容