O videogame “Gish” só será iniciado a partir da linha de comando

2

Plataforma: Lubuntu 11.10 x64

Programa: Gish

Quando tento iniciar o Gish pela linha de comando ( /opt/gish/gi.sh ), não há problemas. Mas quando eu tento iniciá-lo no menu do LXDE, ele não inicia.

Conteúdo de /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

Eu tentei alterar Terminal=false para Terminal=true para depurá-lo, mas acabei de receber um terminal em branco e o jogo não começou.

Editar :

Aqui estão algumas informações adicionais, conforme solicitado por Eliah Kagan abaixo:

  • Eu tentei editar /usr/share/applications/gish.desktop , como recomendado, mas não teve efeito
  • No entanto, ~/.xsession-errors continha o seguinte erro:

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

    Acho que há um problema com o script /opt/gish/gi.sh do shell. Este é o seu conteúdo:

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

    Eu não estou muito familiarizado com o Bash, por isso espero que alguém mais aponte o erro.

    Eu tenho uma máquina de 64 bits. Eu acho que quando o script é executado a partir da linha de comando, ele está lançando corretamente a versão de 64 bits ( /opt/gish/gish_64 ), mas quando é executado no menu LXDE, ele está lançando a versão de 32 bits ( /opt/gish/gish_32 ), está causando o erro libGL.so.1 . No entanto, isso pode estar relacionado aos meus libGL.so.1 problemas com 2 outros jogos .

por srunni 19.11.2011 / 22:24

1 resposta

1

Conselhos gerais para esse tipo de problema

Tente alterar Exec=/opt/gish/gi.sh para Exec=sh /opt/gish/gi.sh .

Se isso não funcionar, tente alterar a linha Path para especificar o diretório em que você está quando executar o programa no Terminal. Supondo que você esteja em seu diretório home, a linha se tornará Path=/home/aberration , onde aberration é substituído por seu nome de usuário em seu sistema Ubuntu (se diferente).

Se isso não funcionar, abra o arquivo chamado .xsession-errors localizado no seu diretório pessoal (no PCManFM você terá que pressionar Ctrl + H ou clique em View > Show Hidden para fazer este e outros arquivos que começam com . aparecerem, selecione todo o seu conteúdo, copie-o para a área de transferência, cole-o no diretório Ubuntu Pastebin e edite sua pergunta para incluir o URL dela. Certifique-se de ter tentado executar o jogo nos menus do LXDE muito pouco antes de abrir .xsession-errors , de forma que as mensagens relacionadas à falha provavelmente apareçam perto do final do arquivo.

Conselho específico para o erro em .xsession_errors e o conteúdo específico do script

Parece provável que sua suspeita esteja correta; ou seja, quando o script é executado a partir do LXPanel, o teste para saber se sua arquitetura é de 64 bits não está funcionando corretamente. Eu não tenho certeza exatamente o que está errado. Mas como o script não tem uma linha de hashbang principal (isto é, uma linha começando com #! seguida imediatamente pelo caminho completo para o programa que deve atuar como o interpretador do script), ele provavelmente está sendo executado por um shell diferente quando você o executa a partir do LXPanel do que quando o executa a partir de bash no LXTerminal. Quando você o executa do LXPanel, ele provavelmente está sendo executado pelo shell padrão ( /bin/sh , que é um link simbólico para o dash shell), enquanto quando você o executa de dentro de bash no LXTerminal, ele está sendo executado por bash . O script usa algumas sintaxes incomuns com as quais não estou familiarizado, o que pode refletir que meu conhecimento de script está um pouco enferrujado, mas pode ser porque eu escrevo scripts para sh / dash em vez de bash .

Eu recomendo que você faça o backup do script ( sudo cp /opt/gish/gi.sh /opt/gish/gi.sh.old ) e, em seguida, tente editá-lo adicionando a linha #!/bin/bash ao topo, para torná-lo executado com bash . Então veja se ele funciona corretamente.

Se isso acontecer, recomendo enviar um relatório de bug para os criadores de gi.sh . (Eu estou supondo que este não é um pacote Ubuntu, já que está instalado em /opt , então você terá que verificar se o projeto tem suas próprias diretrizes de relatório de erros primeiro.) Embora a correção detalhada acima seja apropriada para o Ubuntu, O conserto provável de funcionar adequadamente em uma variedade maior de sistemas semelhantes ao Unix (com base no Linux e outros) seria usar #!/usr/bin/env bash em vez de #!/bin/bash , pois env está em /usr/bin significativamente mais do que bash em código%. (Os autores também devem estar cientes de que /bin não está presente em todos os sistemas semelhantes ao Unix, portanto, se o Gish tiver a intenção de rodar em sistemas que provavelmente não têm bash e não requerer bash , eles podem querer editar o script.) E, de qualquer forma, um script que requer bash não deve ter o sufixo bash , mas deve ter o sufixo .sh (ou nenhum).

Se essa alteração não fizer o script ser executado corretamente, ainda será recomendável verificar se o problema é que a versão de 32 bits do Gish estava em execução, em vez da versão de 64 bits. Então você pode criar um novo arquivo .bash com o conteúdo:

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

A execução desse arquivo .desktop - supondo que ele funcione - deve confirmar que o problema é que o executável incorreto está sendo executado (e também deve contornar o problema para você, assim você pode executar o Gish do LXPanel).

    
por Eliah Kagan 19.11.2011 / 22:34