对于此类问题的一般建议

对于此类问题的一般建议

平台:Lubuntu 11.10 x64

程序:吉什

当我尝试从命令行 ( /opt/gish/gi.sh) 启动 Gish 时,没有任何问题。但是当我尝试从 LXDE 菜单启动它时,它无法启动。

内容/usr/share/applications/gish.desktop

[Desktop Entry]
Categories=Game;ActionGame;AdventureGame;ArcadeGame;
Exec=/opt/gish/gi.sh
Path=/opt/gish
Icon=x-gish
Terminal=false
Type=Application
Name=Gish

我尝试更改Terminal=false为 来Terminal=true调试它,但是我只得到一个空白的终端,并且游戏没有启动。

编辑

以下是 Eliah Kagan 要求提供的一些附加信息:

  • 我尝试/usr/share/applications/gish.desktop按照建议进行编辑,但没有效果
  • 但是,~/.xsession-errors包含以下错误:

    [: 8: x86_64: unexpected operator
    ./gish_32: error while loading shared libraries: libGL.so.1: wrong ELF class: ELFCLASS64
    

    我认为这个 shell 脚本有问题/opt/gish/gi.sh。这是它的内容:

    cd /opt/gish/
    
    MACHINE_TYPE=`uname -m`
    if [ ${MACHINE_TYPE} == 'x86_64' ]; then
      ./gish_64
    else
      ./gish_32
    fi
    

    我不太熟悉 Bash,所以希望其他人可以指出错误。

    我有一台 64 位机器。我认为当从命令行运行脚本时,它会正确启动 64 位版本 ( /opt/gish/gish_64),但当从 LXDE 菜单运行脚本时,它会启动 32 位版本 ( /opt/gish/gish_32),这导致了libGL.so.1错误。libGL.so.1然而,这可能与我的问题有关2 个其他游戏

答案1

对于此类问题的一般建议

尝试更改Exec=/opt/gish/gi.shExec=sh /opt/gish/gi.sh

如果这不起作用,请尝试更改该Path行,使其指定您在终端中运行程序时所在的目录。假设您在主目录中,则该行将变为where ,并替换为您在 Ubuntu 系统上的用户名(如果不同)。Path=/home/aberrationaberration

如果这也不起作用,请打开.xsession-errors位于您的主目录中的文件(在 PCManFM 中,您必须按Ctrl+H或单击View>Show Hidden才能显示此文件和其他以 开头的文件.),选择其全部内容,将其复制到剪贴板,粘贴到Ubuntu Pastebin,并编辑您的问题以包含其 URL。确保您在打开之前不久尝试从 LXDE 菜单运行游戏,.xsession-errors以便与故障相关的消息可能出现在文件末尾附近。

针对 .xsession_errors 中的错误和脚本的具体内容的建议

您的怀疑似乎是正确的;也就是说,当从 LXPanel 运行脚本时,对您的体系结构是否为 64 位的测试无法正常工作。我不确定到底出了什么问题。但由于脚本没有前导哈希值行(即,以 开头的行后面#!紧跟着作为脚本解释器的程序的完整路径),所以从 LXPanel 运行脚本时可能由与在bashLXTerminal 中运行脚本时不同的 shell 运行。从 LXPanel 运行脚本时,它可能由默认 shell(/bin/sh,它是指向 shell 的符号链接dash)运行,而从 LXTerminal 内部运行脚本时bash,它由 运行bash。该脚本使用了一些我不熟悉的不寻常语法,这可能反映出我的脚本知识有点生疏,但可能是因为我为sh/dash而不是编写脚本bash

我建议您备份脚本(sudo cp /opt/gish/gi.sh /opt/gish/gi.sh.old),然后尝试编辑它,在最顶部添加一行#!/bin/bash,使其与一起运行bash。然后看看它是否正常运行。

如果确实如此,那么我建议向 的创建者提交一份错误报告gi.sh。 (我猜这不是一个 Ubuntu 包,因为它安装在 中/opt,所以您必须先检查该项目是否有自己的错误报告指南。)虽然上面详述的修复适用于 Ubuntu,但在更多种类的类 Unix 系统(基于 Linux 和其他系统)上可能正常工作的修复方法是使用#!/usr/bin/env bash而不是,#!/bin/bash因为中的比env中的/usr/bin更常见。 (作者还应该知道并不存在于所有类 Unix 系统上,因此如果 Gish 打算在可能没有 的系统上运行,并且它不需要,他们可能需要编辑脚本。)无论哪种方式,需要 的脚本都不应该以 为后缀,而应该以 为后缀(或根本不加后缀)。bash/binbashbashbashbash.sh.bash

如果该更改不能使脚本正常运行,那么仍然值得检查一下问题是否在于运行的是 32 位版本的 Gish,而不是 64 位版本。因此,您可以创建一个.desktop包含以下内容的新文件:

[Desktop Entry]
Categories=Game;ActionGame;AdventureGame;ArcadeGame;
Exec=/opt/gish/gish_64
Path=/opt/gish
Icon=x-gish
Terminal=false
Type=Application
Name=Gish

从该.desktop文件运行 - 假设它有效 - 应该确认问题在于运行了错误的可执行文件(并且也应该为您解决问题,以便您可以从 LXPanel 运行 Gish)。

相关内容