grml-screen: do not use & for redirecting output since it is running inside dash.
[grml-scripts-core.git] / usr_bin / grml-screen
index 55de1c8..b455b62 100755 (executable)
   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_)"
-    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_\""
+# try to mitigate raceconditions from screen
+SCREENDIR_="/var/run/screen"
+if [ `id -u` = 0 ] ; then
+    mkdir -m 755 $SCREENDIR_ >/dev/null 2>& 1 && chgrp utmp $SCREENDIR_
 fi
+mkdir -m 700 "${SCREENDIR_}/S-$USER" >/dev/null 2>&1
 
 # 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 #################################################################