
Я создаю совершенно новый пакет Debian , cpconverter
который представляет собой A simple utility to change the code page of plain text based files
, из исходного кода, опубликованного в Google Code.
Все прошло хорошо. Однако я не могу получить работающий лаунчер launchpad.
Файл Python cpConverter.py
хранится в папке /usr/share/cpconverter/cpconverter/
.
У меня есть папка Shell Script
с именем , в которой написано:cpconverter
/usr/bin/
#!/bin/sh
python /usr/share/cpconverter/cpconverter/cpConverter.py
Desktop Launcher 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 "$@"
Результат по-прежнему тот, что Desktop Launcher не работает... какие-то песочные часы и ничего. Однако любая из этих 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
Почему тогда Desktop Launcher не может запустить программу? Что не так с моим Desktop Launcher? [См. выше]
решение1
Я не уверен, действительно ли это необходимо, но когда я делал скрипт bash, я запускал его с помощью этой команды "bash $$$$$$$.sh". Единственная причина, по которой я об этом упоминаю, заключается в том, что расширения .py нет в имени скрипта в вашем лаунчере. Может и ничего, стоит посмотреть и попробовать. Крейг
решение2
Ну, как я уже сказал в комментарии, запуск Dash Script
из /usr/bin/
каталога, как это делает лаунчер на рабочем столе, завершился с этой ошибкой 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
$
При запуске cpconverter
в командной строке в другом месте домашней папки или в папке /usr/share/cpconverter/cpconverter
(где находится файл coCPnverter.py) произойдет успешное завершение.
Тогда стало очевидно, что виновником был тот, кто указан ./
в cpConverter.py
деле.
Я просто создал патч, allow-launch-from-usr-bin-script.patch
чтобы указать абсолютный путь (после упаковки) вместо относительного пути:
builder.add_from_file("/usr/share/cpconverter/cpconverter/gui/gui.xml")
Это объяснило и решило проблему.