无法获取 Python 程序的有效桌面启动器

无法获取 Python 程序的有效桌面启动器

我正在构建一个全新的 Debian 包,cpconverter它是A simple utility to change the code page of plain text based files来自 Google Code 中发布的源代码。

一切顺利。但是我无法获得可用的启动板启动器。

python 文件cpConverter.py存储在文件夹中/usr/share/cpconverter/cpconverter/

我有一个Shell Script名为的cpconverter文件夹/usr/bin/,其内容为:

#!/bin/sh

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

桌面启动器cpconverter.desktop很简单

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

但是它无法启动。

我确实通过启动它来检查安装是否cpConverter.py正常工作:

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

然后程序有时会启动。单击启动器后,它通常不再起作用。

cpConverter.py但是,包的构建结构中的文件始终有效,例如

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

我尝试从终端输入相同的命令行,然后出现了各种闻所未闻的错误(至少对我来说):

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

然后我尝试为包举一个工作示例convertall,说明其Shell Script用途:

#!/bin/sh

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

从终端我可以成功启动它:

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

然后我修改了一下内容Shell Script如下:

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

结果仍然是桌面启动器无法工作……只有沙漏,什么都没有。但是,以下 3 个命令行中的任何一个始终都可以启动该程序:

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

访问权限是cpconverter.desktop标准的:

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

那么为什么桌面启动器无法启动程序?我的桌面启动器出了什么问题?[参见上文]

答案1

我不确定这是否真的有必要,但是当我编写 bash 脚本时,我使用此命令“bash $$$$$$$.sh”启动脚本。我提到这一点的唯一原因是桌面启动器中的脚本名称上没有 .py 扩展名。可能没什么,值得一看和尝试。Craig

答案2

好吧,正如我在评论中所说的那样,就像桌面启动器一样Dash Script从目录运行,失败并出现此 Python 错误:/usr/bin/

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

在主文件夹的其他位置或(coCPnverter.py 文件所在的位置)的cpconverter提示符下运行时将会成功。/usr/share/cpconverter/cpconverter

那么很明显,罪魁祸首就是文件./中的那个cpConverter.py

我只是创建了一个补丁allow-launch-from-usr-bin-script.patch来放置绝对路径(一旦打包)而不是相对路径:

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

这解释并解决了这个问题。

相关内容