Ustaw zmienną w pliku .desktop

75

Czy istnieje sposób ustawienia zmiennej środowiskowej w pliku .desktop? Próbuję uruchomić aplikację (zaćmienie) w niestandardowym stylu GTK, więc w zasadzie chcę uzyskać następujący wynik, uruchamiając plik .desktop:

GTK2_RC_FILES=gtkrc.custom /path/to/eclipse

Próbowałem umieścić go w skrypcie bash i uruchomić z pliku .desktop, ale potem nie integruje się on dobrze z programem uruchamiającym Unity.

dotintegral
źródło

Odpowiedzi:

111

Możesz dodać zmienną środowiskową do aplikacji, edytując jej .desktopplik. Na przykład, aby uruchomić „digiKam” ze zmienną środowiskową APPMENU_DISPLAY_BOTH=1, znajdź odpowiedni digikam.desktopplik i dodaj ustawienie zmiennej za pomocą envpolecenia do wpisu „Exec”:

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

W Twoim przypadku:

Exec=env GTK2_RC_FILES=gtkrc.custom /path/to/eclipse
jaśmin
źródło
1
jak mogę ustawić zmienną env zawierającą użytkownika $HOME? Ani się Exec=env MYVAR="$HOME/foo"nie Exec=env MYVAR="~/foo"rozszerza. Zamiast tego są przekazywane dosłownie.
400 Cat
wygląda na to, że możesz to zrobić zgodnie z opisem w stackoverflow.com/a/8980518/1446479
peedee
9

Alternatywą do modyfikacji .desktoppliku jest umieszczenie skryptu opakowania np ~/bin.

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

W ten sposób dostosowanie nie zostanie zastąpione przy kolejnej aktualizacji pakietu aplikacji.

Edytować:

Wskazówka na temat tego, dlaczego to działa, można zobaczyć, sprawdzając, co PATHzawiera zmienna. W moim przypadku:

$ 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

~/binjest pierwszym folderem na liście i dlatego jest przeglądany wcześniej /usr/bin.

Gunnar Hjalmarsson
źródło
Jeśli po prostu umieścisz plik .desktop w ustawieniach lokalnych, i tak nie zostanie on przesłonięty.
Auspex
@Auspex: Prawda. Ale jednocześnie, jeśli użyjesz kopii lokalnej, nie skorzystasz z możliwych aktualizacji .desktoppliku będącego własnością pakietu .
Gunnar Hjalmarsson
Nie rozumiem, w jaki sposób założenie opakowania ~/binpomoże w tym. Plik będący własnością pakietu .desktopnigdy nie zobaczy tego opakowania! Trzeba też użyćupdate-alternatives
Auspex
@Auspex: .desktopplik nie musi „widzieć” opakowania. Po prostu wykonuje się eclipse, a ze względu PATHna opakowanie jest wybierane zamiast /usr/bin/eclipse. Zredagowałem odpowiedź, aby wyjaśnić.
Gunnar Hjalmarsson
Tak, plik .desktop nie trzeba zobaczyć opakowanie. Myślałam, że przeciętny plik .desktop określa pełną ścieżkę, ale na dalszej kontroli myślę, że większość z tych systemów nie tylko określić nazwę polecenia-i tak będzie zobaczyć swoje opakowanie. Jednak jedyne pliki pulpitu Eclipse, które mam, są w formacie określonym w pytaniu - podając pełną ścieżkę do pliku binarnego Eclipse.
Auspex