Как установить переменную «Путь» в файле .desktop относительно места расположения файла рабочего стола?

11

Я хочу установить переменную 'Path' в файле .desktop относительно места, где находится файл рабочего стола, и мне не удается это сделать.

Когда я не объявляю это или не устанавливаю это пустым, по умолчанию это моя домашняя папка, независимо от того, откуда я его запускаю; и он не принимает значения относительно моего текущего местоположения в файловой системе.

kicsyromy
источник
У меня была эта проблема. Я нашел обходные пути, хотя иногда радикально сложные в зависимости от того, что вы делаете. Вы используете обходной путь в это время? Если нет, я могу помочь с этим. Я не нашел документов XDG, которые многое объясняют по этому вопросу.
Bambuntu
ОП ты все еще ищешь ответ? Если это так, возможно, вам придется опубликовать свой вопрос, так как он помечен для закрытия. С уважением,
Ringtail

Ответы:

3

Вы не можете установить CWD внутри файла .desktop. Если вы хотите, чтобы приложение имело определенный CWD, вам нужно написать простой скрипт-обертку для приложения, который выглядит примерно так:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Вы можете заменить your_programего на $@и запустить скрипт с your_program в качестве аргумента, например run-in-dir.sh your_program. Таким образом, вы можете использовать тот же скрипт, чтобы обернуть любую программу, которую вы хотите запустить в этом каталоге.

Добей
источник
14

Вы можете обойти это, используя встроенный мини-скрипт bash на вашем Exec. Это добавит путь к файлу .desktop в PATH до запуска вашей команды.

Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"

% k будет заменен путем к самому файлу рабочего стола. Команда dirnameотрубает часть имени файла, оставляя только каталог. Как только PATH установлен как этот, your_commandможет быть вызван без полного пути.

roadmr
источник
1
Я нажал, чтобы быстро и проголосовал не тот, но ваше решение идеально.
CrandellWS
1
это могло бы прекрасно работать с другим вопросом / ответом stackoverflow.com/a/3464561/1815624
CrandellWS
2

Я использовал это:

Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'

% K - полное имя файла .desktop, включая его путь. Затем он используется dirname, чтобы получить местоположение и изменить каталог на это местоположение. Наконец, теперь, когда он находится в нужном месте, он находит скрипт и запускает его.

Мэриан
источник
0

Для имен каталогов с пробелами в имени это, наконец, сработало для меня:

Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k

Кредит /unix//a/144428/61349

ThorSummoner
источник
0

Это сработало для меня Ubuntu 14.04:

Exec=bash -c "cd %k && ./app.run"

В последней спецификации говорится, что % k указывает на местоположение файла рабочего стола:

% k - Местоположение файла рабочего стола в виде URI (если он, например, получен из системы vfolder) или локального имени файла или пустое, если местоположение не известно.

nexayq
источник