Pliki na pulpicie nie wydają się poprawnie używać $ PATH

13

Tworzę .desktoppliki do użycia w Unity Launcher.

Mam własną lokalizację w katalogu domowym, w której umieszczam pliki wykonywalne ( ~/usr/bin/), które są poprawnie dodane do mojej PATHzmiennej środowiskowej w moim .pam_environmentpliku, jak określono w odpowiedniej dokumentacji Ubuntu .

Oto zawartość mojego .pam_environmentpliku:

LANGUAGE=en_AU:en_GB:en
LANG=en_AU.UTF-8
LC_NUMERIC=en_AU.UTF-8
LC_TIME=en_AU.UTF-8
LC_MONETARY=en_AU.UTF-8
LC_PAPER=en_AU.UTF-8
LC_NAME=en_AU.UTF-8
LC_ADDRESS=en_AU.UTF-8
LC_TELEPHONE=en_AU.UTF-8
LC_MEASUREMENT=en_AU.UTF-8
LC_IDENTIFICATION=en_AU.UTF-8

PATH DEFAULT=${PATH}:~/usr/bin/

Co powoduje, że moja PATHzmienna jest następująca:

ben@ben-HPdv6:~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:~/usr/bin/:~/usr/bin/

Wiem, że jest dodawany dwukrotnie, ale wszystko w .pam_environmentpliku wydaje się dodawane dwukrotnie, bez względu na to, kiedy używa się poprawnej składni zalecanej w dokumentacji Ubuntu, do której się odwoływałem.

To jest jeden przykład problemu (zdarza się we wszystkich przypadkach). Mam skrypt (wywoływany eclipse), w ~/usr/bin/którym działa Eclipse IDE.

Mogę otworzyć dowolny terminal i po prostu pisać, eclipsei działa dobrze, jak można się spodziewać.

Ale podczas korzystania z następującego .desktoppliku:

#!/usr/bin/env xdg-open

[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Name=Eclipse - Juno (4.2)
Icon=/home/ben/.icons/eclipse.svg
Exec=eclipse

Dostaję błąd: Błąd

Ale kiedy zmieniam Exec=linię na:

Exec=/home/ben/usr/bin/eclipse

działa idealnie.

Dokumentacja oficjalnych programów uruchamiających Unity i plików na pulpicie sugeruje, że powinno to działać:

Exec to ścieżka do pliku wykonywalnego. Pełna ścieżka do pliku wykonywalnego musi być użyta tylko w przypadku, gdy nie znajduje się w żadnej ze ścieżek określonych w zmiennej $ PATH. Na przykład wszystkie pliki znajdujące się w ścieżce / usr / bin nie muszą mieć pełnej ścieżki określonej w polu Exec, a jedynie nazwę pliku.

Wszelkie sugestie dotyczące tego, co się dzieje?

BT
źródło
Zmodyfikuj swój plik na pulpicie, aby zabawny zaćmienie w powłoce mogło działać. Nie mogłem powiedzieć, odkąd jakiś czas temu przestałem używać przenośnego.
RobotHumans

Odpowiedzi:

5

Tylda nie jest rozwijana w .pam_environmentsposób, w jaki byłby w skrypcie profilu, a pliki pulpitu nie rozszerzają powłoki w swoich Execwierszach tak jak powłoka, więc szuka pliku o nazwie dosłownie ~/usr/bin/eclipse, co oczywiście nie istnieje.

Zamień tyldę w przypisaniu PATH na $ {HOME} i wydaje się, że działa.

cscarney
źródło
Twoja odpowiedź jest prawidłowa, co całkowicie rozwiązuje problem. Dzięki! Aby uratować mnie przed kolejnym pytaniem, czy masz pojęcie, dlaczego dołączanie do wydarzenia $PATHodbywa się dwukrotnie?
BT
1
To błąd: pad.lv/955032
cscarney
3

To, co zostało powiedziane w dokumentacji Ubuntu, ma sens, jednak w części „nie jest już zalecana” brakuje pewnych szczegółów. Z tego powodu moja odpowiedź będzie polegać na użyciu jednej z tych metod. Ponadto: jest już używany do tego samego celu.

Szybko odwiedź plik ./.profile.

Mój zawiera to:

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Jak widać w ostatniej sekcji tego pliku (wiersze poniżej # ustaw PATH, aby zawierał prywatny kosz użytkownika, jeśli istnieje), jest to już zrobione. Więc jeśli chcesz dodać coś do zmiennej $ PATH, po prostu zrobiłbyś to samo. W dokumentacji wspomniano, że będzie to uruchamiane przy każdym uruchomieniu systemu.

W twoim przypadku wystarczy dodać:

# set PATH to custom variable (this line is not needed)
if [ -d "$HOME/usr/bin" ]; then
    PATH="$HOME/usr/bin:$PATH"
fi

W tym momencie zaczynam myśleć, że jedynym powodem, dla którego ta metoda nie jest już zalecana, jest skryptowanie przy uruchamianiu, które jest bardzo wrażliwe na drobne błędy. Jednak gdy ktoś pracuje z czymś takim, niewielki błąd można naprawić, zmieniając plik z powrotem na taki, jaki był.

Jeśli nie masz pewności, jak to zrobić:

1) Najpierw naciśnij klawisze CTRL + ALT + F3

2) Zaloguj się, postępując zgodnie z instrukcjami wyświetlanymi na ekranie

3) Wpisz to w wierszu polecenia:

/usr/bin/nano ./.profile

4) usuń te linie: (właśnie je dodaliśmy)

# set PATH to custom variable (this line is not needed)
if [ -d "$HOME/usr/bin" ]; then
    PATH="$HOME/usr/bin:$PATH"
fi

5) naciśnij CTRL + O (jak na Out)

6) naciśnij CTRL + X (jak w eXit)

7) wpisz exiti naciśnij ENTER (czasami RETURN)

8) teraz naciśnij CTRL + ALT + F7

9) Powinieneś dostać ekran logowania lub pulpit, w zależności od tego, kiedy wystąpił problem. Jeśli nie, naciśnij CTRL + ALT + DEL (czasami CTRL + ALT + DELETE), a system powinien się ponownie uruchomić bezpiecznie.

Mam nadzieję że to pomoże!

JimmyC866
źródło
Oba rozwiązania działają w celu rozwiązania problemu, więc dziękuję :) Poprosiłem was obu, ale @csarney wyjaśnia dokładny powód problemu i używa metody ustawiania zmiennych środowiskowych zalecanej w dokumentacji, więc zaznaczyłem to jako rozwiązanie.
BT