GNU/Linux >> Tutoriels Linux >  >> Linux

Mise à jour des variables d'environnement de session d'écran pour refléter la nouvelle connexion graphique ?

Vous ne pouvez pas démarrer un script shell à partir du screen session puisqu'il hériterait de l'ancien environnement. Vous pouvez cependant utiliser un fifo pour obtenir les nouvelles variables d'environnement dans l'ancienne session d'écran. Vous pouvez remplir ce fifo lorsque vous démarrez votre session graphique.

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

Démarrez ce script en arrière-plan lors de la connexion (il ne se terminera que lorsque toutes les variables seront lues).

Vous pouvez maintenant lire à partir du fifo, par ex. ajoutez cette fonction à votre .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
}

afin que vous puissiez dans votre ancien screen séance

update_session

Vous pouvez invoquer le setenv commande pour modifier les variables d'environnement dans le processus d'écran de manière interactive, en utilisant :Ctrl -A +:setenv (Notez le : caractère pour entrer une commande d'écran.) Vous serez invité à entrer le nom et la valeur de la variable d'environnement.

Notez que (selon d'autres réponses/commentaires) cela affecte le processus d'écran (parent) et donc les sessions d'écran nouvellement créées, mais pas votre session d'écran actuelle ni les sessions d'écran existantes.

Vous pouvez spécifier le nom et la valeur de la variable d'environnement en même temps si vous le souhaitez :Ctrl -A +:setenv DISPLAY :100 . Définit l'AFFICHAGE sur ":100" pour les nouvelles sessions d'écran.

Pour supprimer une variable d'environnement, vous pouvez utiliser 'unsetenv' - par ex. Ctrl -A +:unsetenv DISPLAY


J'ai implémenté un script pour ce faire. Vous pouvez l'obtenir ici :https://github.com/DarwinAwardWinner/screen-sendenv

Après avoir mis screen-sendenv.py dans votre $PATH , vous pouvez utiliser l'extrait de code suivant dans votre .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
}

Pour l'utiliser, lancez simplement screen_pushenv avant d'exécuter screen -r pour vous rattacher à votre session d'écran. Puis, après avoir attaché avec screen -r , vous pouvez mettre à jour l'environnement dans vos shells existants avec screen_pullenv . Les fonctions tmux accomplissent la même chose pour tmux, un autre multiplexeur de terminal similaire à screen.


Linux
  1. Tuer la session d'écran détaché

  2. Comment savoir s'il s'exécute dans une console Linux par rapport à une session ssh ?

  3. Comment attribuer un nom à un écran ?

  4. Comment désactiver un grand nombre de variables d'environnement

  5. Comment lire les variables d'environnement d'un processus

Comment définir une variable d'environnement dans Windows

Comment définir des variables d'environnement dans MacOS

Comment utiliser l'écran Linux

Supprimer la session GUEST de l'écran de connexion Ubuntu

Guide facile étape par étape des variables d'environnement Linux

Variables d'environnement Linux