Eines der must have tools im *nix Umfeld ist ohne Zweifel „screen„. Allerdings haben mich einige Dinge immer etwas genervt:
Windows: Das schöne Feature verschiedener Fenster innerhalb einer Screen Sitzung hat leider diverse Hacken: In welchem Fenster bin ich gerade überhaupt? Wieviele Windows gibts es eigentlich?
Titles: Windows können mit Namen versehen werden. Da man im Administrationsalltag auf X verschiedenen Servern eingeloggt ist, wäre es doch schön anhand der screen titles erkennen zu können, auf welchem Host man im entsprechenden Fenster eingeloggt ist.
SSH Agent: Wie kommt man an einen laufenden ssh-agent der im Screen läuft und von allen Screen Windows aus nutzbar ist.
Irgendwie lebte ich mit diesen Problemchen und war zu faul mal eine Lösung zu suchen. Aber dann habe ich mich durchgerungen!
Problem: Windows
Die Lösung hierzu kam von meinem Kollegen Hombertho:
Man füge in die .screenrc folgendes ein:
caption always "%{= kw}%-w%{= BW}%n %t%{-}%+w %-= @%H - %LD %d %LM - %c"
Schon hat man eine schöne „Taskbar“ mit allen vorhanden Fenstern sowie farblicher Markierung des aktuell aktiven Fensters im unteren Bereich des Screens. 10014
HowTo dynamic Titles:
Alle Hosts die diesen Code in der .bashrc oder .bash_profile haben aktualisieren die screen titles beim einloggen auf $user@$host:
function rename_screen_tab () { echo -ne "x1bk$@x1b\"; return 0; }
if [[ "$TERM" = screen* ]]; then
echo
PROMPT_COMMAND="rename_screen_tab ${USER}@${HOSTNAME%%.*}; $PROMPT_COMMAND"
fi
Der Host auf dem screen läuft sollte natürlich ebenfalls den Code in der .bashrc haben. Sonst wird der Screen Title beim Ausloggen nicht wieder zurück geändert.
SSH Agent für screen:
Um dieses zu bewerkstelligen hilft ein Screen Window welches immer vorhanden sein muss und den ssh-agent Prozess vorhält.
.screenrc:
setenv SSH_AUTH_SOCK $HOME/.screen-ssh-agent
screen -t agent bash -c "ssh-agent -a $SSH_AUTH_SOCK $SHELL; ssh-add;"