Não é possível obter um iniciador de desktop funcional para um programa Python

Não é possível obter um iniciador de desktop funcional para um programa Python

Estou construindo um pacote Debian inteiramente novo cpconverter, A simple utility to change the code page of plain text based filesde uma fonte publicada no Google Code.

Tudo correu bem. No entanto, não consigo um iniciador de launchpad funcional.

O arquivo python cpConverter.pyé armazenado na pasta /usr/share/cpconverter/cpconverter/.

Eu tenho um Shell Scriptnomeado cpconverterin folder /usr/bin/, que diz:

#!/bin/sh

python /usr/share/cpconverter/cpconverter/cpConverter.py

O Desktop Launcher cpconverter.desktopé simples

[Desktop Entry]
Version=0.5
Encoding=UTF-8
Name=Code Page Converter
Name[en_US]=Code Page Converter
Comment=A simple utility to change the code page of plain text based files
Type=Application
Exec=/usr/bin/cpconverter
Icon=cpconverter
Terminal=false
StartupNotify=true
Categories=Utility;

No entanto, ele não consegue iniciar.

Eu verifiquei se o instalado cpConverter.pyestá funcionando bem iniciando-o:

$ python /usr/share/cpconverter/cpconverter/cpConverter.py

Então o programa é lançado em algumas ocasiões. Depois de clicar no inicializador, muitas vezes ele não funciona mais.

Porém o arquivo cpConverter.pyna estrutura de construção do pacote sempre funciona, por exemplo

$ python cpconverter-0.5/debian/cpconverter/usr/share/cpconverter/cpconverter/cpConverter.py

Tentei digitar a mesma linha de comando em um Terminal e recebi vários erros inéditos (pelo menos para mim):

$ cpconverter
/usr/bin/cpconverter: 3: /usr/bin/cpconverter: pyhton: not found
$ 
$ pyhton /usr/share/cpconverter/cpconverter/cpConverter.py
No command 'pyhton' found, did you mean:
 Command 'python' from package 'python-minimal' (main)
pyhton: command not found
$

Então tentei pegar um exemplo prático de pacote convertallque para seus Shell Scriptusos:

#!/bin/sh

exec /usr/bin/python3 /usr/share/convertall/convertall.py "$@"

No Terminal, eu o iniciaria com sucesso com:

$ python3 /usr/share/convertall/convertall.py "$@"

Então modifiquei o Shell Scriptde acordo para ler:

exec /usr/bin/python2 /usr/share/cpconverter/cpConverter.py "$@"

O resultado ainda é que o Desktop Launcher não está funcionando... alguma ampulheta e nada. No entanto, qualquer uma destas 3 linhas de comando sempre inicia o programa:

$ python2 /usr/share/cpconverter/cpconverter/cpConverter.py "$@"
$ /usr/bin/cpconverter
$ cpconverter

Os direitos de acesso para cpconverter.desktopsão padrão:

$ ls -l /usr/share/applications/clipgrab.desktop
-rw-r--r-- 1 root root 626 Dec  9  2014 /usr/share/applications/clipgrab.desktop

Por que então o Desktop Launcher não consegue iniciar o programa? O que há de errado com meu Desktop Launcher? [Veja acima]

Responder1

Não tenho certeza se isso é realmente necessário, mas quando fiz um script bash, lancei o script com este comando "bash $$$$$$$.sh". A única razão pela qual mencionei isso é que a extensão .py não está no nome do script no inicializador da área de trabalho. Pode não ser nada, vale a pena dar uma olhada e tentar. Craig

Responder2

Bem, como eu disse no comentário, executar a Dash Scriptpartir do /usr/bin/diretório exatamente como o inicializador da área de trabalho está fazendo, falhou com este erro do Python:

/usr/bin$ cpconverter
Traceback (most recent call last):
  File "/usr/share/cpconverter/cpconverter/cpConverter.py", line 342, in <module>
    app = cpConverter()
  File "/usr/share/cpconverter/cpconverter/cpConverter.py", line 74, in __init__
    builder.add_from_file("./gui/gui.xml")
glib.GError: Failed to open file './gui/gui.xml': No such file or directory
$ 

Durante a execução cpconverterno prompt em outro lugar na pasta Home ou em /usr/share/cpconverter/cpconverter(onde está o arquivo coCPnverter.py) seria bem-sucedido.

Então ficou óbvio que o culpado estava ./no cpConverter.pyarquivo.

Simplesmente criei um patch allow-launch-from-usr-bin-script.patchpara colocar o caminho absoluto (uma vez empacotado) em vez do caminho relativo:

builder.add_from_file("/usr/share/cpconverter/cpconverter/gui/gui.xml")

Isso explicou e resolveu o problema.

informação relacionada