Файли на робочому столі, схоже, не використовують $ PATH правильно


13

Я створюю .desktopфайли для використання в запуску Unity Launcher.

У мене в моєму домашньому каталозі є власне місце розташування, куди я поміщаю свої виконувані файли ( ~/usr/bin/), які правильно додаються до моєї PATHзмінної середовища у моєму .pam_environmentфайлі, як зазначено у відповідній документації на Ubuntu .

Це вміст мого .pam_environmentфайлу:

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/

В результаті чого моя PATHзмінна така:

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/

Я знаю, що додається двічі, але все, що .pam_environmentздається, у файлі здається, що додається двічі незалежно від того, що при використанні правильного синтаксису, рекомендованого у цій документації на Ubuntu, на яку я посилався.

Це один із прикладів проблеми (це відбувається з усіма випадками). У мене є сценарій (званий eclipse), в ~/usr/bin/якому запускається IDE Eclipse.

Я можу відкрити будь-який термінал і просто набрати, eclipseі він працює нормально, як ви очікували.

Але при використанні наступного .desktopфайлу:

#!/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

Я отримую помилку: Помилка

Але коли я змінюю Exec=рядок на:

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

він працює чудово.

Документація офіційних запусків Unity і файлів настільних файлів говорить про те, що це має працювати:

Exec - шлях до виконуваного файлу. Повний шлях до виконуваного файлу повинен використовуватися лише в тому випадку, якщо він не знаходиться в жодному з контурів, зазначених у змінній $ PATH. Наприклад, для будь-яких файлів, що знаходяться всередині шляху / usr / bin, не повинно бути повного шляху, вказаного в полі Exec, а лише їх ім'я файлу.

Будь-які пропозиції щодо того, що відбувається?


Змініть файл на робочому столі, щоб він забавив затемнення в оболонці, і він може працювати. Я не могла сказати, оскільки перестала використовувати портативний деякий час тому.
RobotHumans

Відповіді:


5

Тильда не розгортається .pam_environmentтак, як це було б у профілі скрипту, а настільні файли не роблять розширення оболонки у своїх Execрядках так, як би оболонка, тому він шукає файл, який буквально названий ~/usr/bin/eclipse, що, звичайно, не ' t існують.

Замініть тильду у призначенні PATH на $ {HOME}, і вона, здається, спрацює.


Ваша відповідь правильна, що повністю виправляє проблему. Спасибі! Щоб врятувати мене, задаючи інше запитання, чи маєте ви уявлення, чому приєднання до цього $PATHтрапляється двічі?
BT

1
Це помилка: pad.lv/955032
cscarney

3

Те, що сказано в документації на Ubuntu, має сенс, однак у розділі "більше не рекомендується" відсутні деякі деталі. З цієї причини моя відповідь передбачає використання одного з цих методів. Також: він уже використовується з цією ж ціллю.

Швидко відвідайте файл ./.profile.

Шахта містить це:

# ~/.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

Як ви бачите в останньому розділі цього файлу (рядки нижче # set PATH, щоб він містив приватну скриньку користувача, якщо вона існує), це вже робиться. Тож якби ви хотіли додати щось до змінної $ PATH, ви просто зробите те саме. У документації було зазначено, що це буде виконуватися кожного разу при запуску системи.

У вашому випадку все, що вам потрібно зробити, - це додати це:

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

У цей момент я починаю думати, що єдиною причиною того, що цей метод більше не рекомендується, є те, що він включає в себе сценарій при запуску, який дуже чутливий до незначних помилок. Однак, коли хтось працює з чимось подібним, невелику помилку можна усунути, просто змінивши файл назад таким, яким він був.

Якщо ви не впевнені, як це зробити:

1) Спочатку натисніть CTRL + ALT + F3

2) Увійдіть, дотримуючись підказки на екрані

3) Введіть це в командний рядок:

/usr/bin/nano ./.profile

4) видаліть ці рядки: (ми щойно їх додали)

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

5) натисніть CTRL + O (як у вихідному)

6) натисніть CTRL + X (як у eXit)

7) введіть exitі натисніть клавішу ВВОД (іноді ПОВЕРНУТИСЯ)

8) тепер натисніть CTRL + ALT + F7

9) Ви повинні отримати свій екран входу або робочий стіл, залежно від того, коли виникли проблеми. Якщо ні, натисніть CTRL + ALT + DEL (іноді CTRL + ALT + DELETE), і ваша система повинна безпечно перезапуститись.

Сподіваюся, це допомагає!


Обидва рішення працюють над тим, щоб виправити проблему, тож спасибі :) Я обирав вас обох, але @csarney пояснює точну причину проблеми та використовує метод налаштування змінної середовища, рекомендований у документації, тому я позначив це як рішення.
BT
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.