Los archivos de escritorio no parecen usar $ PATH correctamente


13

Estoy creando .desktoparchivos para usar en Unity Launcher.

Tengo mi propia ubicación en mi directorio de inicio donde pongo mis ejecutables ( ~/usr/bin/) que se agregan correctamente a mi PATHvariable de entorno en mi .pam_environmentarchivo como se especifica en la documentación relevante de Ubuntu .

Este es el contenido de mi .pam_environmentarchivo:

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/

Lo que da como resultado que mi PATHvariable sea la siguiente:

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/

Sé que se agrega dos veces, pero cualquier cosa en el .pam_environmentarchivo parece agregarse dos veces sin importar qué cuando se usa la sintaxis correcta recomendada en la Documentación de Ubuntu a la que he hecho referencia.

Este es un ejemplo del problema (ocurre con todos los casos). Tengo un script (llamadoeclipse ) en el ~/usr/bin/que se ejecuta Eclipse IDE.

Puedo abrir cualquier terminal y simplemente escribir eclipse y funciona bien como cabría esperar.

Pero cuando se usa el siguiente .desktoparchivo:

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

Me sale el error: Error

Pero cuando cambio la Exec=línea a:

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

Funciona perfectamente.

La documentación oficial de Unity Launchers y Desktop files sugiere que esto debería funcionar:

Exec es la ruta al archivo ejecutable. La ruta completa al archivo ejecutable debe usarse solo en caso de que no se encuentre en ninguna de las rutas especificadas en la variable $ PATH. Por ejemplo, cualquier archivo que esté dentro de la ruta / usr / bin no necesita tener su ruta completa especificada en el campo Exec, sino solo su nombre de archivo.

¿Alguna sugerencia sobre lo que está pasando?


Modifique su archivo de escritorio para eclipse divertido en un shell y puede funcionar. No podría decirlo desde que dejé de usar el portátil hace algún tiempo.
RobotHumans

Respuestas:


5

La tilde no se expande .pam_environmentcomo lo haría en un script de perfil, y los archivos de escritorio no hacen expansión de shell en suExec líneas como lo haría el shell, por lo que está buscando un archivo que literalmente se llama ~/usr/bin/eclipse, lo que por supuesto no t existe.

Reemplace la tilde en la asignación de RUTA con $ {HOME} y parece funcionar.


Su respuesta es correcta, eso soluciona el problema por completo. ¡Gracias! Para salvarme haciendo otra pregunta, ¿tienes alguna idea de por qué anexar esto $PATHsucede dos veces?
BT

1
Es un error: pad.lv/955032
cscarney

3

Lo que se dice en la documentación de Ubuntu tiene sentido, sin embargo, su sección "ya no se recomienda" carece de algunos detalles. Por esa razón, mi respuesta implicará usar uno de estos métodos. Además: ya se usa para este mismo propósito.

Visite rápidamente su archivo ./.profile.

El mío contiene esto:

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

Como puede ver en la última sección de este archivo (líneas debajo de # set PATH para que incluya el bin privado del usuario si existe), esto ya se está haciendo. Entonces, si desea agregar algo a la variable $ PATH, simplemente haría lo mismo. La documentación mencionó que esto se ejecutará cada vez que se inicie el sistema.

En su caso, todo lo que necesita hacer es agregar esto:

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

En este punto, estoy empezando a pensar que la única razón por la que este método ya no se recomienda es porque implica secuencias de comandos en el inicio, lo cual es muy sensible a pequeños errores. Sin embargo, cuando alguien está trabajando con algo como esto, se puede deshacer un pequeño error simplemente cambiando el archivo a la forma en que estaba.

Si no está seguro de cómo hacer esto:

1) Primero, presione CTRL + ALT + F3

2) Inicie sesión siguiendo el mensaje en pantalla

3) Escriba esto en el símbolo del sistema:

/usr/bin/nano ./.profile

4) elimine estas líneas: (las acabamos de agregar)

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

5) presione CTRL + O (como en Out)

6) presione CTRL + X (como en eXit)

7) escriba exity presione ENTRAR (a veces VOLVER)

8) ahora presiona CTRL + ALT + F7

9) Debería obtener su pantalla de inicio de sesión o escritorio, dependiendo de cuándo ocurrió el problema. De lo contrario, presione CTRL + ALT + SUPR (a veces CTRL + ALT + SUPRIMIR) y su sistema debería reiniciarse de manera segura.

¡Espero que esto ayude!


Ambas soluciones funcionan para solucionar el problema, así que gracias :) Les he votado a los dos, pero @csarney explica la razón exacta del problema y utiliza el método de configuración de la variable de entorno recomendado en la documentación, así que lo he marcado como la solución.
BT
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.