#!/bin/dash # Filename: grml-screen # Purpose: wrapper for screen to start with appropriate configuration # Authors: grml-team (grml.org), (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. ################################################################################ # export variable USER for use withing GNU screen: export USER=`id -un` # fix tty permissions TTY=`tty` sudo chmod 660 $TTY sudo chown $USER.tty $TTY # FIXME: fix for screen race-conditions PID_FILE_="/var/lock/grml-screen" PID_FILE_CREATED_="false" MY_PID_="$$" if [ ! -d "/var/run/screen/S-$USER" ]; then # no /var/run/screen/S-$USER and possible no /var/run/screen either -> locking for i in `seq 40`; do # 40*0.25 = 10 seconds if lockfile-create --retry 0 $PID_FILE_; then echo $MY_PID_ >$PID_FILE_ PID_FILE_CREATED_="true" break else PID_FILE_CREATED_="error" fi sleep 0.25 done fi if [ $PID_FILE_CREATED_ = "true" ]; then # FORK BEGIN ( for i in `seq 40`; do # 40*0.25 = 10 seconds if [ ! -d "/var/run/screen/S-$USER" ]; then sleep 0.25 # educated guess else break fi done if [ `cat $PID_FILE_` = $MY_PID_ ]; then rm $PID_FILE_ lockfile-remove $PID_FILE_ fi )& # FORK END elif [ $PID_FILE_CREATED_ = "error" ]; then SLEEP_TIME_="$(( $$ % 5 * 5 + 5 ))" echo "grml-screen: Error could not create lockfile! (sleeping for $SLEEP_TIME_)" >&2 sleep $SLEEP_TIME_ elif [ $PID_FILE_CREATED_ = "false" ]; then echo "nothing to do" &>/dev/null else echo "grml-screen: internal error - PID_FILE_CREATED_ == \"$PID_FILE_CREATED_\"" >&2 fi # now run screen with config cd $HOME # important for e.g. hardcopy-feature # do we have a utf8 enabled terminal? [ -x /usr/bin/vt-is-UTF8 ] && /usr/bin/vt-is-UTF8 -q && UTF='-U' if [ `id -u` = 0 ] ; then exec screen $UTF -c /etc/grml/screenrc elif [ -r "$HOME/.screenrc" ] ; then exec screen $UTF -c "$HOME/.screenrc" else exec screen $UTF -c /etc/grml/screenrc_grml fi ## END OF FILE #################################################################