Anda bisa berlari screen -S foo -X setenv DISPLAY "$DISPLAY"; screen -S foo -rd untuk mengubah lingkungan screen proses sebelum melampirkan. Ini tidak akan memengaruhi jendela yang ada.
Anda mungkin dapat mengkonfigurasi shell Anda untuk memeriksa pembaruan DISPLAY (dan variabel lain yang relevan seperti XAUTHORITY ) setiap kali mereka menampilkan prompt. (Ini berarti Anda mungkin harus menekan Memasukkan sekali jika shell sedang duduk di prompt ketika Anda memasang sesi.) Bash mengevaluasi $PROMPT_COMMAND sebelum menampilkan setiap prompt. Zsh menjalankan precmd berfungsi sebelum menampilkan setiap prompt. Misalnya, jika Anda telah memasukkan tugas lingkungan yang diinginkan dalam skrip ~/var/run/screen-12345.foo.env-update.sh (di mana 12345 adalah pid dari proses layar dan foo adalah nama sesi), Anda dapat menggunakan sesuatu seperti (untuk zsh, belum diuji; Saya tidak berpikir Anda akan bisa pergi tanpa forking di bash):
precmd () {
local now=$SECONDS
set ~/var/run/"screen-$STY.env-update.sh"(Nms-$(($now-$screen_env_time)))
if [[ $# -ne 0 ]]; then
screen_env_time=$now
. ~/var/run/"screen-$STY.env-update.sh"
fi
}
Hal lain yang bisa Anda lakukan $PROMPT_COMMAND atau precmd, pada beberapa sistem operasi, dibaca lingkungan proses induk (ini mengasumsikan Anda telah memperbarui lingkungan proses layar). Misalnya, di Linux dengan zsh (lakukan ini hanya jika berjalan di bawah layar):
precmd () {
local record
while read -r -d $'\0' record /proc/$PPID/environ; do
case ${record%%=*} in
DISPLAY|XAUHORITY) export $record;;
esac
done
}
Secara teknis, Anda dapat mengubah lingkungan proses lain, menggunakan debugger. Tetapi ada kemungkinan besar itu akan merusak proses itu, karena struktur data internal program tidak akan cocok dengan data yang disimpan oleh kernel.
Perhatikan bahwa tidak ada solusi ini yang berguna jika Anda menjalankan ssh di dalam jendela layar.
cat /tmp/screen_variablesemuanya baik. Saya hanya ingin mengotomatisasi itu.