Использование относительных путей для запуска Gnome

Мы разрабатываем приложение, которое должно работать на съемном устройстве (например, USB-накопителе). В Linux мы используем программы запуска Gnome, чтобы разместить ярлык для приложения в корневом каталоге устройства. Однако нам нужно использовать относительные пути для исполняемого файла и значка, поскольку мы не знаем заранее, где будет монтироваться устройство. В файле .desktop у меня есть что-то вроде:

Exec = .. / myapp / myexecutable
Значок = .. / myapp / myicon.png

Ни исполняемый файл, ни значок не найдены. Я прочитал спецификацию поиска значков в файлах .desktop (http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html#icon_lookup), но это меня не просветило.

Есть ли способ заставить пусковые установки использовать относительный путь? Если нет, есть ли другой подход для достижения того, что я хочу (т.е. ярлык со значком и исполняемым файлом, указанный с использованием относительных путей)?


person Matthew Gertner    schedule 28.09.2010    source источник


Ответы (2)


Относительные пути не поддерживаются *.

Одно из решений - установить установщик. Этот сценарий обновляет файл рабочего стола в соответствии с местоположением, из которого он запускается. Сделайте сценарий исполняемым, и пользователь сможет щелкнуть его для установки. Сценарий требует, чтобы файл рабочего стола был доступен для записи.

Это было сделано с учетом Linux. Файл называется autorun.sh; но это всего лишь соглашение, обычно он не запускается автоматически. Если вы развертываете это на чем-то другом, кроме Linux, тогда назовите файл как-нибудь (autorun.linux) или адаптируйте его для выполнения разных задач в зависимости от платформы.

#! /bin/sh

####  Fixup $APPNAME.desktop.
APPNAME=xvscatter
ICONNAME=xv_logo.png

cd $(dirname "$0")
APPDIR="$PWD/$APPNAME"
EXEC="$APPDIR/$APPNAME"
ICON="$APPDIR/$ICONNAME"

sed -i -e "s@^Icon=.*@Icon=$ICON@" \
    -e "s@^Exec.*@Exec=$EXEC@"  "$APPNAME.desktop"

* Соглашение для freedesktop: чтобы значки располагались в $ HOME / .icons, / usr / share / icons или / usr / share / pixmaps. В этих каталогах находятся подкаталоги для значков разных размеров и типов. При использовании одного из этих каталогов для хранения значка в файле рабочего стола отображается только имя значка (без каталога); в противном случае запишите полный путь к файлу.

Исполняемый файл, если он указан в пути, может быть указан без имени пути (небезопасно). Лучше всего указать полный путь. Представьте, что запускается не та программа, потому что не указан полный путь.

Другой вариант - скопировать файл рабочего стола на рабочий стол пользователя или в / usr / share / applications и отредактировать его там. Сделайте это, когда программа находится на носителе только для чтения.

Поскольку ничего из вышеперечисленного не приводит к истинной установке, по возможности используйте собственный установщик платформы и инструменты упаковки (rpm, dep, portage и т. Д.). Эти инструменты обеспечивают основу для полной установки, включая соответствующие права доступа к файлам (подумайте о selinux) и меню рабочего стола. Они также обеспечивают легкое удаление.

Если программа должна запускаться со съемного носителя, рассмотрите возможность использования системной установки только для установки символических ссылок, возможно, в / opt / vendor / progname.

person frayser    schedule 07.10.2010

Что я делал и работал отлично, так это:

Exec=sh -e -c "exec \\"\\$(dirname \\"\\$0\\")/.sh/server.sh\\";$SHELL" %k

Объяснение команды:

В приведенном ниже фрагменте будет указано имя каталога того, кто его выполняет, поэтому имя каталога запуска

$(dirname \\"\\$0\\")

Таким образом, добавление желаемого пути приведет к выполнению относительного пути.

Ссылка: https://askubuntu.com/questions/1144341/execute-shell-on-a-relative-path-on-ubuntu-launcher

person Lucas Mendes Mota Da Fonseca    schedule 18.05.2019