web-dev-qa-db-fra.com

Les fichiers du bureau ne semblent pas utiliser correctement $ PATH

Je crée des fichiers .desktop à utiliser dans Unity Launcher.

J'ai mon propre emplacement dans mon répertoire personnel où je place mes exécutables (~/usr/bin/) correctement ajoutés à ma variable d'environnement PATH dans mon fichier .pam_environment, comme indiqué dans le documentation pertinente sur Ubunt .

Voici le contenu de mon fichier .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/

Ce qui a pour résultat que ma variable PATH est la suivante:

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/

Je sais qu'il est ajouté deux fois, mais tout ce qui se trouve dans le fichier .pam_environment semble avoir été ajouté deux fois, peu importe l'utilisation de la syntaxe correcte recommandée dans la documentation Ubuntu à laquelle j'ai fait référence.

Ceci est un exemple du problème (cela se produit dans tous les cas). J'ai un script (appelé Eclipse) dans ~/usr/bin/ qui exécute Eclipse IDE.

Je peux ouvrir n'importe quel terminal et taper simplement Eclipse et tout se passe bien, comme vous vous en doutez.

Mais lorsque vous utilisez le fichier .desktop suivant:

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

Je reçois l'erreur: Error

Mais quand je change la ligne Exec= en:

Exec=/home/ben/usr/bin/Eclipse

cela fonctionne parfaitement.

Le documentation officielle sur les lanceurs Unity et les fichiers du burea suggère que cela devrait fonctionner:

Exec est le chemin du fichier exécutable. Le chemin complet du fichier exécutable doit être utilisé uniquement s'il ne figure dans aucun des chemins spécifiés dans la variable $ PATH. Par exemple, tous les fichiers situés dans le chemin/usr/bin n'ont pas besoin de spécifier leur chemin complet dans le champ Exec, mais uniquement leur nom de fichier.

Des suggestions sur ce qui se passe?

13
B T

Le tilde ne se développe pas dans .pam_environment comme il le ferait dans un script de profil, et les fichiers du bureau ne développent pas le shell sur leurs lignes Exec de la même manière que le shell. fichier qui s'appelle littéralement ~/usr/bin/Eclipse, qui n'existe bien sûr pas.

Remplacez le tilde dans l'affectation PATH par $ {HOME} et cela semble fonctionner.

5
cscarney

Ce qui est dit dans la documentation Ubuntu est logique, mais certains détails manquent dans la section "Non recommandé". Pour cette raison, ma réponse impliquera l’utilisation d’une de ces méthodes. En outre: il est déjà utilisé dans le même but.

Effectuez une visite rapide de votre fichier ./.profile.

Le mien contient ceci:

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

Comme vous pouvez le voir à la dernière section de ce fichier (lignes sous # définir PATH pour qu'il inclue le bac privé de l'utilisateur s'il existe), cela est déjà fait. Donc, si vous vouliez ajouter quelque chose à la variable $ PATH, vous feriez simplement la même chose. La documentation a indiqué que cela sera exécuté à chaque démarrage du système.

Dans votre cas, tout ce que vous devez faire est d’ajouter ceci:

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

À ce stade, je commence à penser que la seule raison pour laquelle cette méthode n'est plus recommandée est qu'elle implique la création de scripts au démarrage, ce qui est très sensible aux petites erreurs. Lorsque quelqu'un travaille avec quelque chose comme cela, cependant, une petite erreur peut être annulée simplement en modifiant le fichier pour le rendre tel qu'il était.

Si vous ne savez pas comment faire cela:

1) D'abord, appuyez sur CTRL + ALT + F3

2) Connectez-vous en suivant l'invite à l'écran

3) Tapez ceci dans l'invite de commande:

/usr/bin/nano ./.profile

4) supprime ces lignes: (nous les avons juste ajoutées)

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

5) appuyez sur CTRL + O (comme dans Out)

6) appuyez sur CTRL + X (comme dans eXit)

7) tapez exit et appuyez sur ENTREE (parfois RETURN)

8) maintenant, appuyez sur CTRL + ALT + F7

9) Vous devriez obtenir votre écran de connexion ou votre bureau, selon le moment où le problème est survenu. Sinon, appuyez sur CTRL + ALT + SUPPR (parfois CTRL + ALT + SUPPR) et votre système devrait redémarrer en toute sécurité.

J'espère que cela t'aides!

3
JimmyC866