Видеоигра «Gish» будет запускаться только из командной строки

Платформа: Lubuntu 11.10 x64

Программа: Gish

Когда я пытаюсь запустить Gish из командной строки (/opt/gish/gi.sh), проблем нет. Но когда я пытаюсь запустить его из меню 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, чтобы отладить его, но затем я получил пустой терминал, и игра не запустилась.

Редактировать :

Вот некоторая дополнительная информация, запрошенная Элией Каганом ниже:

  • Я пытался редактировать /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
    

    Я думаю, что есть проблема со сценарием оболочки /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 другими играми .

2
задан 13 April 2017 в 15:24

1 ответ

Общие рекомендации для этого вида проблемы

Попытайтесь измениться Exec=/opt/gish/gi.sh кому: Exec=sh /opt/gish/gi.sh.

Если это не работает, попытайтесь измениться Path строка, таким образом, это указывает любой каталог, Вы находитесь в том, когда Вы запускаете программу в Терминале. Принятие Вас находится в Вашем корневом каталоге, строка стала бы Path=/home/aberration где aberration заменяется Вашим именем пользователя в Вашей системе Ubuntu (если отличающийся).

Если это не работает также, то откройте названный файл .xsession-errors расположенный в Вашем корневом каталоге (в PCManFM необходимо будет нажать Ctrl+H или щелчок View > Show Hidden сделать это и другие файлы, которые запускаются с . появитесь), выберите его все содержание, скопируйте его в буфер обмена, вставьте его в Pastebin Ubuntu и отредактируйте Ваш вопрос включать URL для него. Удостоверьтесь, что Вы попытались выполнить игру из меню LXDE очень незадолго до открытия .xsession-errors таким образом, это обменивается сообщениями, имение отношение к отказу, вероятно, появятся около конца файла.

Совет, характерный для ошибки в .xsession_errors и определенном содержании сценария

Кажется вероятным, что Ваше подозрение корректно; то есть, это, когда скрипт запущен от LXPanel, тест для того, действительно ли Ваша архитектура является 64-разрядной, не работает правильно. Я не уверен точно, что идет не так, как надо. Но так как сценарий не имеет продвижения hashbang строкой (т.е. строка, запускающаяся с #! сопровождаемый сразу полным путем к программе, которая должна действовать как интерпретатор сценария), он, вероятно, выполняется другой оболочкой при выполнении его от LXPanel чем тогда, когда Вы выполняете его от bash в LXTerminal. При выполнении его от LXPanel это, вероятно, выполняется оболочкой по умолчанию (/bin/sh, который является символьной ссылкой на dash оболочка), тогда как, когда Вы выполняете его из bash в LXTerminal это выполняется 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 значительно чаще, чем bash находится в /bin. (Авторы должны также знать это bash не присутствует во всех подобных Unix системах, поэтому если Gish предназначается для работы систем, которые вероятны не иметь bash и это иначе не требует bash, они могли бы хотеть отредактировать сценарий.) И так или иначе, сценарий, который требует bash не должен быть снабжен суффиксом .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 файл - принятие его работает - должен подтвердить, что проблема состоит в том, что неправильный исполняемый файл выполняется (и должен также работать вокруг проблемы на Вас, таким образом, можно выполнить Gish от LXPanel).

1
ответ дан 2 December 2019 в 05:42

Другие вопросы по тегам:

Похожие вопросы: