X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=usr_bin%2Fgrml-screen;h=7deeb770928482505deac1f49668848a3caba42e;hb=f9835a0551733e1540cf826f2a520ee96c342718;hp=1288aa11f758607783093f1e08fbbfed1fceecca;hpb=e720deae78f1eda5e6f62629606c194f16796762;p=grml-scripts-core.git diff --git a/usr_bin/grml-screen b/usr_bin/grml-screen index 1288aa1..7deeb77 100755 --- a/usr_bin/grml-screen +++ b/usr_bin/grml-screen @@ -1,16 +1,11 @@ #!/bin/dash # Filename: grml-screen -# Purpose: wrapper for 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. -# Latest change: Sun Jan 08 15:30:06 CET 2006 [mika] ################################################################################ -# fix tty permissions -# sudo chmod 660 $TTY -# sudo chown root.tty $TTY - # export variable USER for use withing GNU screen: export USER=`id -un` @@ -19,14 +14,51 @@ sudo chmod 660 $TTY sudo chown $USER.tty $TTY +# FIXME: fix for screen race-conditions +PID_FILE_="/var/run/grml-screen" +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_ + break + fi + sleep 0.25 + done +fi +if [ -f $PID_FILE_ ]; 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 +else + SLEEP_TIME_="$(( $$ % 5 * 5 + 5 ))" + echo "grml-screen: Error could not create lockfile! (sleeping for $SLEEP_TIME_)" + sleep $SLEEP_TIME_ +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 -c /etc/grml/screenrc - elif [ -r $HOME/.screenrc ] ; then - exec screen -c $HOME/.screenrc + exec screen $UTF -c /etc/grml/screenrc + elif [ -r "$HOME/.screenrc" ] ; then + exec screen $UTF -c "$HOME/.screenrc" else - exec screen -c /etc/grml/screenrc_grml + exec screen $UTF -c /etc/grml/screenrc_grml fi ## END OF FILE #################################################################