Установить переменную в файле .desktop

75

Есть ли способ установить переменную окружения в файле .desktop? Я пытаюсь запустить приложение (eclipse) с пользовательским стилем gtk, поэтому в основном я хочу получить следующий результат, запустив файл .desktop:

GTK2_RC_FILES=gtkrc.custom /path/to/eclipse

Я попытался поместить его в скрипт bash и запустить из файла .desktop, но тогда он плохо интегрируется с модулем запуска Unity.

dotintegral
источник

Ответы:

111

Вы можете добавить переменную среды в приложение, отредактировав его .desktopфайл. Например, чтобы запустить «digiKam» с переменной среды APPMENU_DISPLAY_BOTH=1, найдите соответствующий digikam.desktopфайл и добавьте настройку переменной с помощью envкоманды в запись «Exec»:

Exec=env APPMENU_DISPLAY_BOTH=1 digikam -caption "%c" %i

В твоем случае:

Exec=env GTK2_RC_FILES=gtkrc.custom /path/to/eclipse
жасмин
источник
1
как я могу установить переменную env, содержащую пользователя $HOME? Ни то, Exec=env MYVAR="$HOME/foo"ни другое не Exec=env MYVAR="~/foo"расширяется. Вместо этого они передаются буквально.
400 Кот
кажется, вы можете сделать это, как описано в stackoverflow.com/a/8980518/1446479
peedee
9

Альтернатива для изменения .desktopфайла - поместить скрипт-обертку, например, в ~/bin.

$ cat ~/bin/eclipse
#!/bin/sh
export GTK2_RC_FILES=gtkrc.custom
exec /usr/bin/eclipse "$@"

Таким образом, настройка не будет перезаписана при следующем обновлении пакета приложения.

Редактировать:

Подсказку о том, почему это работает, вы можете увидеть, проверив, что PATHсодержит переменная. В моем случае:

$ echo $PATH
/home/gunnar/bin:/home/gunnar/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

~/binявляется первой папкой в ​​списке и, таким образом, рассматривается ранее /usr/bin.

Гуннар Хьялмарссон
источник
Если вы просто поместите свой файл .desktop в свои локальные настройки, он все равно не будет переопределен.
Auspex
@Auspex: правда. Но в то же время, если вы используете локальную копию, вы не сможете извлечь выгоду из возможных обновлений .desktopфайла, принадлежащего пакету .
Гуннар Хьялмарссон
Я не вижу, как установка обертки ~/binпоможет с этим. .desktopФайл, принадлежащий пакету, никогда не увидит эту оболочку! Вы должны также использоватьupdate-alternatives
Auspex
@Auspex: .desktopфайл не должен «видеть» оболочку. Он просто выполняется eclipse, а из- PATHза обертки выбирается вместо /usr/bin/eclipse. Я отредактировал ответ, чтобы уточнить.
Гуннар Хьялмарссон
Да, .desktop файл действительно нужно увидеть обертку. Я думал , что средний .desktop файл определяет полный путь, но при дальнейшем осмотре я думаю , что большинство из них системы действительно просто указать имя-и команд , так будет видеть вашу обертку. Однако единственные файлы рабочего стола Eclipse, которые у меня есть, находятся в формате, указанном в вопросе, и дают полный путь к двоичному файлу Eclipse.
Auspex