No se puede obtener un iniciador de escritorio que funcione para un programa Python

No se puede obtener un iniciador de escritorio que funcione para un programa Python

Estoy creando un paquete Debian completamente nuevo cpconverterque proviene A simple utility to change the code page of plain text based filesde una fuente publicada en Google Code.

Todo salió bien. Sin embargo, no puedo conseguir un lanzador de plataforma de lanzamiento que funcione.

El archivo Python cpConverter.pyse almacena en la carpeta /usr/share/cpconverter/cpconverter/.

Tengo una carpeta Shell Scriptnombrada , que dice:cpconverter/usr/bin/

#!/bin/sh

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

El iniciador de escritorio cpconverter.desktopes simple

[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;

Sin embargo, no puede comenzar.

Verifiqué que la instalación cpConverter.pyfunciona bien al iniciarla:

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

Luego el programa se lanza en algunas ocasiones. Después de hacer clic en el iniciador, a menudo ya no funciona.

Sin embargo, el archivo cpConverter.pyen la estructura de construcción del paquete siempre funciona, por ejemplo

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

Intenté escribir la misma línea de comando desde una Terminal y luego obtuve una variedad de errores inauditos (al menos para mí):

$ 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
$

Luego intenté tomar un ejemplo funcional para el paquete convertallque por sus Shell Scriptusos:

#!/bin/sh

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

Desde la Terminal lo iniciaría exitosamente con:

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

Luego modifiqué el Shell Scriptde acuerdo para leer:

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

El resultado sigue siendo el de que el Desktop Launcher no funciona…algo de reloj de arena y nada. Sin embargo, cualquiera de estas 3 líneas de comando siempre inicia el programa:

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

Los derechos de acceso para cpconverter.desktopson estándar:

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

¿Por qué entonces Desktop Launcher no puede iniciar el programa? ¿Qué le pasa a mi Iniciador de escritorio? [Verlo arriba]

Respuesta1

No estoy seguro de si esto es realmente necesario, pero cuando hice un script bash, lo inicié con este comando "bash $$$$$$$.sh". La única razón por la que menciono esto es que la extensión .py no está en el nombre del script en el iniciador de su escritorio. Puede que no sea nada, vale la pena echarle un vistazo y probarlo. Craig

Respuesta2

Bueno, como dije en el comentario, al ejecutar Dash Scriptdesde el /usr/bin/directorio tal como lo hace el iniciador de escritorio, falló con este error de 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
$ 

Mientras se ejecuta cpconverteren el mensaje en otra parte de la carpeta de inicio o en /usr/share/cpconverter/cpconverter(donde está el archivo coCPnverter.py), se realizará correctamente.

Entonces quedó claro que el culpable estaba ./en el cpConverter.pyexpediente.

Simplemente creé un parche allow-launch-from-usr-bin-script.patchpara colocar la ruta absoluta (una vez empaquetada) en lugar de la ruta relativa:

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

Eso explicó y resolvió el problema.

información relacionada