¿Cómo configuro la RUTA u otras variables de entorno para que las aplicaciones X puedan acceder a ella?

16

¿Cómo puedo configurar las variables env para que KDE las reconozca?

¿Cómo se configura la ruta en un entorno no shell (KDE)?

A diferencia de las dos preguntas anteriores, quiero saber cómo hacer esto para GNOME. O mejor aún, ¿existe un método que sea independiente del administrador de ventanas? Para el shell / terminal, suelo editar ~/.bashrc. ¿Dónde puedo colocar declaraciones de exportación para que las variables de entorno estén disponibles para todas las aplicaciones X, sin importar el administrador de ventanas utilizado?

Code-Guru
fuente

Respuestas:

12

El módulo pam_env PAM le permite configurarlos en /etc/environmento dentro ~/.pam_environment, dependiendo de si lo desea para todos los usuarios (todo el sistema) o solo su usuario (toda la sesión).

Variables de entorno de todo el sistema

La configuración de las variables de entorno que afectan al sistema en su conjunto (en lugar de solo a un usuario en particular) no debe colocarse en ninguno de los muchos scripts de nivel de sistema que se ejecutan cuando se carga el sistema o la sesión de escritorio, sino en

/etc/environment- Este archivo está específicamente diseñado para configuraciones variables de entorno de todo el sistema. No es un archivo de script, sino que consiste en expresiones de asignación, una por línea. Específicamente, este archivo almacena la configuración regional y la configuración de ruta de todo el sistema.

Variables de entorno de toda la sesión

La configuración de la variable de entorno que debería afectar solo a un usuario en particular (en lugar del sistema en su conjunto) debe establecerse en:

~/.pam_environment- Este archivo está específicamente diseñado para configurar el entorno de un usuario. No es un archivo de script, sino que consiste en expresiones de asignación, una por línea.

Nota: El uso .pam_environmentrequiere un reinicio de sesión para inicializar las variables. Reiniciar solo el terminal no es suficiente para poder usar las variables.

Vea más en la wiki de Ubuntu sobre Variables de entorno .

bahamat
fuente
2
El problema con la ~/.pam_environmentsolución es que, de manera predeterminada, el módulo pam_env no lo lee, a menos que la distribución lo configure de otra manera. En Fedora 20 no se lee, por ejemplo.
Cristian Ciupitu
@CristianCiupitu tiene razón. ~/.xsessioncargará variables de entorno para aplicaciones X. Ver unix.stackexchange.com/questions/47359/what-is-xsession-for
Tek
@CristianCiupitu: Muchas gracias por tu comentario que me llevó a pam_env. Actualicé mis archivos Fedora 24 pam para habilitar el entorno del usuario. Ahora, todas mis sesiones de Wayland vuelven a tener un CAMINO personalizado.
Zan Lynx
@CristianCiupitu es eso cierto? La documentación linux-pam.org/Linux-PAM-html/sag-pam_env.html implica que ~ / .pam_environment es el archivo predeterminado que se debe leer a menos que se especifique lo contrario. Mira la línea user_envfile=filename. Mi problema con pam_env es que la variable HOME puede no estar disponible dependiendo de la aplicación PAM. Lo que limita su uso a solo variables absolutas.
CMCDragonkai
2
@CMCDragonkai, la página del comando man pam_env (8) de Fedora solía decir: " Por defecto, esta opción está desactivada ya que las variables de entorno proporcionadas por el usuario en el entorno PAM podrían afectar el comportamiento de los módulos posteriores en la pila sin el consentimiento del administrador del sistema" . Entonces, aunque el módulo PAM ascendente tiene algunas configuraciones predeterminadas, algunas distribuciones las sobrescriben.
Cristian Ciupitu
1

/etc/X11/Xsession.d/... o siguiendo las líneas de ese directorio, dependiendo de su Linux (?). Escribí un poco aquí .

El concepto es que después del inicio de sesión, un administrador de pantalla inicia una "Xsession" y las fuentes (!) Todo en ese directorio en orden alfabético. Simplemente puede agregar un script que modifique PATH. La Xsession será su DE en última instancia y, por lo general, todos los procesos son hijos de esa Xsession, por lo tanto, heredan el entorno PATH.

Bananguin
fuente
¿Hay un equivalente que pueda establecer en mi directorio $ HOME? ¿Como .Xsession?
Code-Guru
Según Xession (5): /etc/X11/Xsession.d/40x11-common_xsessionrc Fuente de variables de entorno global. Este script generará cualquier cosa en $ HOME / .xsessionrc si el archivo está presente. Esto permite al usuario establecer variables de entorno globales para su sesión X, como la información de configuración regional.
Bananguin
1

Un proceso hereda un entorno del proceso padre que lo inicia. Para cambiar la RUTA u otros valores del entorno en un elemento secundario, podemos establecer una variable en un valor en el elemento primario y exportar la variable si estamos en un shell, y luego iniciar el proceso secundario. El niño también puede leer uno o más archivos de inicialización para cambiar su propio entorno cuando se inicia.

Entonces, hay dos preguntas más para obtener una respuesta:

¿Cuál es el árbol de herencia padre / hijo que conduce al proceso que desea que se vea afectado por la RUTA o el cambio de entorno?

¿Qué archivos de inicialización utilizan / leen / obtienen los procesos relevantes en ese árbol?

Aquí está parte de la salida de ps (1) para mostrar lo que quiero decir con un árbol de herencia:

# /bin/ps -o 'uid:5,pid:5,ppid:5,user:4,args' axf 

UID   PID  PPID USER COMMAND
  0     1     0 root /usr/lib/systemd/systemd
  0  1481     1 root /usr/sbin/gdm-binary -nodaemon
  0  1497  1481 root  \_ /usr/libexec/gdm-simple-slave ...
  0  1504  1497 root      \_ /usr/bin/Xorg :0 ...
  0  1855  1497 root      \_ gdm-session-worker ...

Tenga en cuenta las secuencias gráficas \ _ y los números PIP / PPID (ID de proceso y PID principal). PID 1855 se inició por (¿algún hijo de?) 1497, que se inició en 1481, que se inició por el PID 1, que se inició por el proceso ancestro 0.

Haga un seguimiento de herencia similar para el proceso que desea afectar, descubra qué archivos de inicialización son relevantes y realice el cambio a RUTA en algún lugar de ese árbol, probablemente con algo similar a:

PATH=${PATH}:/usr/local/bin
D McKeon
fuente
¿Puedo usar pspara determinar el proceso principal de un inicio de sesión GUI?
Code-Guru