Subject: auto connect to screen and open a new shell?

From: Nils <[email-masked]>
Date: Tue, 21 Oct 2008 15:37:28 -0500

Hey guys.
I am trying to get this working:
i open op a new terminal, which the opens my shell (zsh). I want the zsh to
check if it is already inside of a screen session, and if it is not, to
connect to one, and open a new shell in there.
essentially i would like i to do a screen -x, C-a c. I check if i am inside
a shell with the STY variable, but i have not found a good way to connect
while creating a new shell

Thanks,
Nils
_______________________________________________
screen-users mailing list
[email-masked]
http://lists.gnu.org/mailman/listinfo/screen-users

---

From: [email-masked] (Trent W. Buck)
Date: Wed, 22 Oct 2008 15:40:28 +1100

Nils <[email-masked]> writes:

> i open op a new terminal, which the opens my shell (zsh). I want the
> zsh to check if it is already inside of a screen session, and if it is
> not, to connect to one, and open a new shell in there.

I have almost that for sh:

    ### ~/.profile: sourced by bourne-compatible login shells.
    ### If ~/.bash_profile exists, this will NOT be read by bash!
    ### SUS bookmark: http://www.opengroup.org/onlinepubs/009695399/

    # [unrelated code elided.]

    ## The naive "chsh -s /usr/bin/screen" breaks scp (and other things).
    ## Have sh start screen automatically "when appropriate".  That is,
    ## 1) not in a screen window (STY);
    ## 2) stdin is a tty;
    ## 3) screen is installed; and
    ## 4) terminal is capable of displaying screen.
    ## Replace "$STY" with "$STY$SSH_CLIENT$SSH_ORIGINAL_COMMAND" to avoid
    ## nesting screens when sshing (untested).
    test -z "$STY" -a -t 0 &&
    { type screen && tput clear && tput cup && ! tput hc && ! tput os
    } 2>/dev/null >&2 &&          # ignore boring, expected error messages
    {
        ## Set the window title to the host name.
        ## Note that using echo -e \e for ^[ is not portable.
        type uname >/dev/null 2>&1 &&
        test -n "${HOSTNAME:=`uname -n`}" &&
        case "$TERM" in
            screen*) printf %bk%s%b%b \\033 "${HOSTNAME%%.*}" \\033 \\0134;;
        esac
        ## If new session, start agents.
        screen -ls | grep -i 'No Sockets found' >/dev/null 2>&1 &&
        eval "$(twb-agents)"
        ## Start screen.
        exec screen -DRR
    }

    ## If execution reaches this point, screen isn't the login shell.  In
    ## that case, if this is a bash shell, it's a good idea to do the
    ## bashisms in .bashrc.
    test -n "$BASH" &&
    test -f ~/.bashrc &&
    . ~/.bashrc

> essentially i would like i to do a screen -x, C-a c. I check if i am
> inside a shell with the STY variable, but i have not found a good way
> to connect while creating a new shell

I'm not sure if you can do exactly that.  I suppose it depends if you're
starting xterm from within the screen session, or from some other X
client.  When STY is set you can just do "screen foo" and it'll pop up a
new window running foo inside the screen session.  Otherwise you might
be able to do something like "screen -X screen && screen -xRR" to first
start a new window, *then* connect to the session.