# Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
# Bug-Reports: see http://grml.org/bugs/
# License: This file is licensed under the GPL v2.
-# Latest change: Mit Mär 21 15:39:00 CET 2007 [mika]
################################################################################
# export variable USER for use withing GNU screen:
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
+ exec screen -U -c /etc/grml/screenrc
elif [ -r "$HOME/.screenrc" ] ; then
- exec screen $UTF -c "$HOME/.screenrc"
+ exec screen -U -c "$HOME/.screenrc"
else
- exec screen $UTF -c /etc/grml/screenrc_grml
+ exec screen -U -c /etc/grml/screenrc_grml
fi
## END OF FILE #################################################################