screen-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Updating DISPLAY, SSH and other environment variables


From: Surinder Singh
Subject: Updating DISPLAY, SSH and other environment variables
Date: Fri, 2 Sep 2011 15:06:06 -0700

Hi All,

After reattaching to a screen session, some of the environment variables need to be updated. I have seen some solution where the variables need to be explicitly updated (sourcing files). I haven't found any automated solution to this.

My implementation below can do this automatically and may be useful to others. This is for bash but can be adapted for other shells. Just source it from your .bashrc.

Thanks
-Surinder

--X----------------------------------------------------------------------------------------
#!/bin/bash

# screen-attach <SessionName>
#
# $ screen -ls
# There are screens on:
#         64809.pvt104    (Detached)
#         8086.resman     (Attached)
# ....
#
# $ screen-attach 8086.resman
#
# The complete name is needed as it needs to extract process Id from the name.
# One could potentially relax this.
#     - put the variable in a file.
#     - Run a script in a new window of the to be attached screen that:
#           - sources the file
#           - uses STY env variable to get the process Id.
#
function screen-attach # {{{
{
    local STY=$1
    local VARS="SSH_AUTH_SOCK DISPLAY"
    VARSLOC=${HOME}/tmp/screen.$STY.vars

    echo > $VARSLOC
   
    for v in $VARS ; do
        val=`eval echo \\${$v}`
        echo "export $v=$val" >> $VARSLOC
       
        # setup environment for new shells
        screen -S $STY -X setenv $v "$val"
    done
   
    # force environment update in existing screens
    CHILDS=`ps -o  pid,ppid| grep ${STY/.*/} | awk '{print $1}'`
   
    for child in $CHILDS
    do
        # a copy of environment file is created for each screen.
        cp $VARSLOC  $VARSLOC.$child
       
        kill -USR1 $child # tell the child to reload the values
    done
   
    rm $VARSLOC
   
    screen -x $STY
}  
#}}}

function sourcevars #{{{
{
    VARSLOC=${HOME}/tmp/screen.$STY.vars.$$
    if [ -f $VARSLOC ] ; then
        source ${VARSLOC}
        rm ${VARSLOC}
    fi 
} #}}} 

function trap_usr1 #{{{
{
    sourcevars
    echo "Updated Variables"
}  
#}}}

if [ "x$STY" != "x" ]; then
    # handle SIGUSR1 if we are under screen session
    trap "trap_usr1" SIGUSR1
    sourcevars
fi 

# END of File

reply via email to

[Prev in Thread] Current Thread [Next in Thread]