Использование относительных путей для запуска Gnome - PullRequest
3 голосов
/ 28 сентября 2010

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

Exec = .. / MyApp / myexecutable
Icon = .. / MyApp / myicon.png

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

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

Ответы [ 2 ]

3 голосов
/ 07 октября 2010

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

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

Это было сделано с учетом 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 / apps и отредактироватьэто там.Делайте это, когда программа находится на носителе только для чтения.

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

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

.
0 голосов
/ 18 мая 2019

То, что я делал и работал отлично, было:

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

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

Фрагмент, приведенный ниже, получит имя dir того, кто его выполняет, поэтому имя dir запуска

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

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

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

...