Ubuntu tiene una RUTA diferente cuando se accede a través de una sesión XRDP

9

Noob aquí: tengo un problema, cuando accedo a mi servidor a través de SSH, el $ PATH es correcto

root@ks391320:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Pero cuando abro mi servidor a través de la sesión XRDP y voy al terminal, muestra una RUTA incorrecta :

root@ks391320:~# echo $PATH
/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin

Captura de pantalla de ambos: Captura de pantalla

Y esto crea un problema porque cuando trato de instalar algo usando el "Instalador de paquetes" muestra este error (entre otros)

dpkg: warning: 'ldconfig' not found in PATH
Ivan Castellanos
fuente

Respuestas:

7

Para Ubuntu-18.04, edite /etc/pam.d/xrdp-sesman e ingrese las siguientes líneas al principio:

session       required   pam_env.so readenv=1 envfile=/etc/environment
session       required   pam_env.so readenv=1 envfile=/etc/default/locale
Marcelo
fuente
Sí, sin esto, a las sesiones xrdp les faltaban todas las variables definidas en mi /etc/environment!
wisbucky
5

1

La RUTA predeterminada de todo el sistema se define en /etc/environment. Primero, verifique que esté configurado en un valor razonable. Como referencia, aquí está el mío, que es lo mismo que una instalación predeterminada:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

2

Si /etc/environmentestá cuerdo y aún tiene problemas, puede anular la RUTA predeterminada ~/.bashrc. Por ejemplo, tengo esto en mi .bashrc que agrega un directorio a mi PATH si y solo si existe y no está en mi PATH:

if [ -d "$HOME/bin" ]; then
    if [[ $PATH =~ $HOME/bin ]]; then :
    else export PATH="$HOME/bin:$PATH"
    fi
fi

Dado que, según su captura de pantalla, parece que ha habilitado los inicios de sesión de root, asegúrese de configurar también .bashrc de root. (Por cierto, dado que root no puede iniciar sesión de forma predeterminada en Ubuntu, esta configuración es probablemente menos probada y posiblemente esté relacionada con su problema).

3

Si los dos primeros métodos fallan, verifique si su cliente XRDP está haciendo algo exótico. Si es así, tendrá que configurarlo para que funcione normalmente o identificar una forma de solucionarlo.

Actualizar

He estado mirando un poco alrededor del sistema. Puede encontrar todos los lugares en su sistema que especifiquen una RUTA con el siguiente comando (el sudoestá allí porque algunos /etcusuarios no pueden leer algunos archivos ):

sudo egrep -nr '\bPATH' /etc | less

Creo que es seguro ignorar muchos de esos lugares, lo que resulta en el siguiente comando:

sudo egrep -nr '\bPATH' /etc | egrep -v '^/etc/(init|rc|ppp|bash_c)' | egrep -v '^Binary' | less

Un archivo que parece posible (aunque realmente no sé demasiado al respecto) es /etc/login.defs. Puedes echarle un vistazo.

Además, también puede grep sus archivos de puntos:

egrep -nr '\bPATH' $HOME/.* | less
Scott Cesantía
fuente
El archivo "entorno" es normal, al agregar las rutas correctas a ~ / .bashrc, los comandos se ejecutan en el terminal pero aún no funcionan en el "Instalador de paquetes" de Ubuntu. No pude encontrar la raíz del problema, pero ahora tengo una solución, creé un enlace simbólico en / bin / para cada programa requerido (ldconfig, etc.) ... esto es probablemente una violación de seguridad, así que dejaré esta pregunta abrir en caso de que alguien tenga una mejor solución.
Ivan Castellanos
@ IvanCastellanos: No estoy seguro de lo que quiere decir con "instalador de paquetes", ya que no hay un programa con ese nombre exacto AFAIK. ¿Podría describir los pasos que está tomando para instalar paquetes? ¿Y esto es una GUI o un instalador de línea de comandos?
Scott Severance
Lo siento, me refiero al "Instalador de paquetes de GDebi" (GUI).
Ivan Castellanos
@IvanCastellanos: ¿Lo lanzas como gksudo gdebi-gtk /full/path/to/package.deb? Me ha parecido un poco exigente. Si es así, debería heredar el entorno desde el que se inicia.
Scott Severance
3

Revelación completa: no uso Ubuntu ... pero tuve el mismo problema con Debian.

xrdp lanza /etc/xrdp/startwm.sh (a menos que Ubuntu haya modificado esta ubicación). Agregué esta línea:

. /etc/profile

en la parte superior de /etc/xrdp/startwm.sh y la RUTA ahora está configurada correctamente.

Para Ubuntu, agregar

. /etc/environment

en la parte superior de /etc/xrdp/startwm.sh podría hacer lo mismo.

EMI
fuente
2

Esto me dejó perplejo por un tiempo también. /etc/environmentno es un script de shell, por lo que no puede llamarlo como uno. Lo que funcionó para mí fue editar el script "sesman" del administrador de sesión xrdp en pam. Agregué la línea de "sesión" a mi /etc/pam.d/sesmanarchivo:

#%PAM-1.0
session required pam_env.so readenv=1 user_readenv=0
@include common-auth
@include common-account
@include common-session
@include common-password

Esto hace que el administrador de la sesión cargue el /etc/environmentarchivo al iniciar sesión.

Dave C
fuente
1

En teoría agregando

. /etc/environment

funcionaría pero no funciona. Simplemente lo puse en la parte superior de mi .bashrc para corregir el problema

Juan
fuente
1

Gracias a las respuestas anteriores llegué a tal solución:

cat /etc/xrdp/startwm.sh | sed "s/. \/etc\/X11\/Xsession/. \/etc\/environment/" > ./startwm.sh && echo ". /etc/X11/Xsession" >> ./startwm.sh && sudo mv ./startwm.sh /etc/xrdp/startwm.sh && sudo chmod 755 /etc/xrdp/startwm.sh

Puede no ser el más óptimo pero funciona (Ubuntu 12.04).

Alex Fliker
fuente
1

@ John: Creo que debe verificar su /etc/xrdpstartwm.sh: las primeras líneas en la mía dicen:

if [ -f /etc/X11/xinit/xinitrc ]
then
    . /etc/X11/xinit/xinitrc
    exit 0
fi**

Eso significa que si / etc / X11xinit / xinitrc existe, ese archivo se ejecutará en su lugar, y no ayudará mucho agregar el

. /etc/environment

a /etc/xrdpstartwm.sh. :-)

/ Per Hertz

Por hercios
fuente