GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Aktualisieren der Umgebungsvariablen der Bildschirmsitzung, um die neue grafische Anmeldung widerzuspiegeln?

Sie können kein Shell-Skript von screen aus starten Sitzung, da sie die alte Umgebung erben würde. Sie können jedoch ein Fifo verwenden, um die neuen Umgebungsvariablen in die alte Bildschirmsitzung zu bekommen. Sie können dieses Fifo füllen, wenn Sie Ihre grafische Sitzung starten.

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

Starten Sie dieses Skript im Hintergrund bei der Anmeldung (es wird nur beendet, wenn alle Variablen daraus gelesen wurden).

Jetzt können Sie aus dem Fifo lesen, z. Fügen Sie diese Funktion zu Ihrem .bashrc hinzu

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
}

damit Sie in Ihrem alten screen können Sitzung

update_session

Sie können den setenv aufrufen Befehl zum interaktiven Ändern von Umgebungsvariablen im Bildschirmprozess mit:Ctrl -A +:setenv (Beachten Sie den : Zeichen, um einen Bildschirmbefehl einzugeben.) Sie werden aufgefordert, den Namen und Wert der Umgebungsvariablen einzugeben.

Beachten Sie, dass dies (gemäß anderen Antworten/Kommentaren) den (übergeordneten) Bildschirmprozess und damit neu erstellte Bildschirmsitzungen betrifft, aber weder Ihre aktuelle Bildschirmsitzung noch vorhandene Bildschirmsitzungen.

Sie können den Namen und den Wert der Umgebungsvariablen gleichzeitig angeben, wenn Sie möchten:Ctrl -A +:setenv DISPLAY :100 . Setzt die ANZEIGE für neue Bildschirmsitzungen auf ":100".

Um eine Umgebungsvariable zu entfernen, können Sie 'unsetenv' verwenden - z. Strg -A +:unsetenv DISPLAY


Dazu habe ich ein Skript implementiert. Sie können es hier herunterladen:https://github.com/DarwinAwardWinner/screen-sendenv

Nach dem Setzen von screen-sendenv.py in Ihr $PATH , können Sie das folgende Snippet in Ihrer .bashrc-Datei verwenden:

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
}

Um es zu verwenden, führen Sie einfach screen_pushenv aus bevor Sie screen -r ausführen wieder an Ihre Bildschirmsitzung anhängen. Dann nach dem Anhängen mit screen -r , können Sie die Umgebung in Ihren vorhandenen Shells mit screen_pullenv aktualisieren . Die tmux-Funktionen erreichen dasselbe für tmux, einen anderen Terminal-Multiplexer, ähnlich wie screen.


Linux
  1. Umgebungsvariablen *in* /etc/environment referenzieren?

  2. Beenden Sie die getrennte Bildschirmsitzung

  3. Wie vergebe ich einen Namen für einen Bildschirm?

  4. Wie viele Umgebungsvariablen nicht gesetzt sind

  5. Bildschirmsitzung umbenennen

So legen Sie die Umgebungsvariable in Windows fest

So legen Sie Umgebungsvariablen in MacOS fest

So verwenden Sie den Linux-Bildschirm

GAST-Sitzung vom Ubuntu-Anmeldebildschirm entfernen

Einfache Schritt-für-Schritt-Anleitung zu Linux-Umgebungsvariablen

Linux-Umgebungsvariablen