GNU/Linux >> Tutoriales Linux >  >> Linux

¿Actualizando las variables de entorno de la sesión de pantalla para reflejar el nuevo inicio de sesión gráfico?

No puede iniciar un script de shell desde el screen sesión ya que heredaría el antiguo entorno. Sin embargo, puede usar un fifo para obtener las nuevas variables de entorno en la sesión de pantalla anterior. Puede llenar ese fifo cuando inicie su sesión gráfica.

#!/bin/bash
FIFO=/tmp/your_variables
[ -e $FIFO ] && cat $FIFO > /dev/null || mkfifo $FIFO

# save number of variables that follow
NVARS=2
echo $NVARS > $FIFO
echo ENV1=sth1 > $FIFO
echo ENV2=sth2 > $FIFO

Inicie ese script en segundo plano al iniciar sesión (solo terminará cuando se lean todas las variables).

Ahora puede leer desde el fifo, p. agrega esta función a tu .bashrc

update_session() {
  FIFO=/tmp/your_variables

  NVAR=$(cat $FIFO)
  for i in $(seq $NVAR); do
    export $(cat $FIFO)
  done
  #delete the pipe, or it will not work next time 
  rm $FIFO
}

para que puedas en tu viejo screen sesión

update_session

Puedes invocar el setenv comando para cambiar las variables de entorno en el proceso de pantalla de forma interactiva, usando:Ctrl -A +:setenv (Tenga en cuenta el : carácter para ingresar un comando de pantalla). Se le solicitará el nombre y el valor de la variable de entorno.

Tenga en cuenta que (según otras respuestas/comentarios) esto afecta el proceso de pantalla (principal) y, por lo tanto, las sesiones de pantalla recién creadas, pero no su sesión de pantalla actual ni ninguna sesión de pantalla existente.

Puede especificar el nombre y el valor de la variable de entorno al mismo tiempo si lo desea:Ctrl -A +:setenv DISPLAY :100 . Establecerá la PANTALLA en ":100" para nuevas sesiones de pantalla.

Para eliminar una variable de entorno, puede usar 'unsetenv', p. Ctrl -A +:unsetenv DISPLAY


He implementado un script para hacer esto. Puede obtenerlo aquí:https://github.com/DarwinAwardWinner/screen-sendenv

Después de poner screen-sendenv.py en tu $PATH , puede usar el siguiente fragmento en su .bashrc:

VARS_TO_UPDATE="DISPLAY DBUS_SESSION_BUS_ADDRESS SESSION_MANAGER GPG_AGENT_INFO"
screen_pushenv () {
  screen-sendenv.py -t screen $VARS_TO_UPDATE
}
tmux_pushenv () {
  screen-sendenv.py -t tmux $VARS_TO_UPDATE
}
screen_pullenv () {
  tempfile=$(mktemp -q) && {
    for var in $VARS_TO_UPDATE; do
      screen sh -c "echo export $var=\$$var >> \"$tempfile\""
    done
    . "$tempfile"
    rm -f "$tempfile"
  }
}
tmux_pullenv () {
  for var in $VARS_TO_UPDATE; do
    expr="$(tmux showenv | grep "^$var=")"
    if [ -n "$expr" ]; then
      export "$expr"
    fi
  done
}

Para usarlo, simplemente ejecute screen_pushenv antes de ejecutar screen -r para volver a adjuntar a su sesión de pantalla. Luego, después de adjuntar con screen -r , puede actualizar el entorno en sus shells existentes con screen_pullenv . Las funciones de tmux logran lo mismo para tmux, otro multiplexor de terminal similar a screen.


Linux
  1. ¿Cómo saber si se ejecuta en una consola de Linux frente a una sesión de ssh?

  2. Comprobación de variables de entorno

  3. Variables de entorno en enlaces simbólicos

  4. Establecer un entorno temporal ($PATH)

  5. Cómo desarmar muchas variables de entorno

Cómo establecer la variable de entorno en Windows

Cómo establecer variables de entorno en MacOS

Cómo usar la pantalla de Linux

Eliminar la sesión INVITADA de la pantalla de inicio de sesión de Ubuntu

Guía fácil paso a paso de variables de entorno de Linux

Variables de entorno de Linux