Платформа: 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 другими играми .
Попытайтесь измениться 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
таким образом, это обменивается сообщениями, имение отношение к отказу, вероятно, появятся около конца файла.
Кажется вероятным, что Ваше подозрение корректно; то есть, это, когда скрипт запущен от 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).