GNU/Linux >> Belajar Linux >  >> Linux

Memperbarui variabel lingkungan sesi layar untuk mencerminkan login grafis baru?

Anda tidak dapat memulai skrip shell dari screen sesi karena akan mewarisi lingkungan lama. Namun Anda dapat menggunakan fifo untuk memasukkan variabel lingkungan baru ke sesi layar lama. Anda dapat mengisi fifo tersebut saat memulai sesi grafis.

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

Jalankan skrip tersebut di latar belakang saat login (ini hanya akan berhenti jika semua variabel dibaca darinya).

Sekarang Anda dapat membaca dari fifo, mis. tambahkan fungsi ini ke .bashrc Anda

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
}

sehingga Anda bisa di screen lama Anda sesi

update_session

Anda dapat memanggil setenv perintah untuk mengubah variabel lingkungan dalam proses layar secara interaktif, dengan menggunakan:Ctrl -A +:setenv (Perhatikan : karakter untuk memasukkan perintah layar.) Anda akan dimintai nama dan nilai variabel lingkungan.

Perhatikan bahwa (sesuai jawaban/komentar lainnya) ini memengaruhi proses layar (induk) dan karenanya sesi layar yang baru dibuat, tetapi bukan sesi layar Anda saat ini atau sesi layar yang ada.

Anda dapat menentukan nama dan nilai variabel lingkungan secara bersamaan jika Anda ingin:Ctrl -A +:setenv DISPLAY :100 . Akan menyetel DISPLAY ke ":100" untuk sesi layar baru.

Untuk menghapus variabel lingkungan, Anda dapat menggunakan 'unsetenv' - mis. Ctrl -A +:unsetenv DISPLAY


Saya telah menerapkan skrip untuk melakukan ini. Anda bisa mendapatkannya di sini:https://github.com/DarwinAwardWinner/screen-sendenv

Setelah meletakkan screen-sendenv.py ke dalam $PATH Anda , Anda dapat menggunakan cuplikan berikut di .bashrc:

Anda
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
}

Untuk menggunakannya, cukup jalankan screen_pushenv sebelum Anda menjalankan screen -r untuk memasang kembali ke sesi layar Anda. Kemudian, setelah dilampirkan dengan screen -r , Anda dapat memperbarui lingkungan di shell yang ada dengan screen_pullenv . Fungsi tmux mencapai hal yang sama untuk tmux, multiplexer terminal lain yang mirip dengan screen.


Linux
  1. Bagaimana cara menetapkan nama untuk layar?

  2. Tetapkan lingkungan sementara ($PATH)

  3. Betapa tidak disetelnya banyak variabel lingkungan

  1. Mengatur variabel lingkungan Linux

  2. Ganti nama sesi layar

  3. Cara membaca variabel lingkungan dari suatu proses

  1. Bagaimana Cara Mengatur Variabel Lingkungan Pengguna? (secara permanen, Bukan Sesi)?

  2. Referensi Variabel Lingkungan *di* /etc/environment?

  3. Bunuh sesi layar terpisah