grml-screen/grml-init-screen: no longer use vt-is-UTF8 but instead default to UTF...
[grml-scripts-core.git] / usr_bin / grml-screen
1 #!/bin/dash
2 # Filename:      grml-screen
3 # Purpose:       wrapper for screen to start with appropriate configuration
4 # Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
5 # Bug-Reports:   see http://grml.org/bugs/
6 # License:       This file is licensed under the GPL v2.
7 ################################################################################
8
9 # export variable USER for use withing GNU screen:
10   export USER=`id -un`
11
12 # fix tty permissions
13   TTY=`tty`
14   sudo chmod 660       $TTY
15   sudo chown $USER.tty $TTY
16
17 # FIXME: fix for screen race-conditions
18 PID_FILE_="/var/lock/grml-screen"
19 PID_FILE_CREATED_="false"
20 MY_PID_="$$"
21 if [ ! -d "/var/run/screen/S-$USER" ]; then
22     # no /var/run/screen/S-$USER and possible no /var/run/screen either -> locking
23     for i in `seq 40`; do   # 40*0.25 = 10 seconds
24         if lockfile-create --retry 0 $PID_FILE_; then
25             echo $MY_PID_ >$PID_FILE_
26             PID_FILE_CREATED_="true"
27             break
28         else
29             PID_FILE_CREATED_="error"
30         fi
31         sleep 0.25
32     done
33 fi
34 if [ $PID_FILE_CREATED_ = "true" ]; then
35     # FORK BEGIN
36     (
37         for i in `seq 40`; do   # 40*0.25 = 10 seconds
38             if [ ! -d "/var/run/screen/S-$USER" ]; then
39                 sleep 0.25  # educated guess
40             else
41                 break
42             fi
43         done
44         if [ `cat $PID_FILE_` = $MY_PID_ ]; then
45             rm $PID_FILE_
46             lockfile-remove $PID_FILE_
47         fi
48     )&
49     # FORK END
50 elif [ $PID_FILE_CREATED_ = "error" ]; then
51     SLEEP_TIME_="$(( $$ % 5 * 5 + 5 ))"
52     echo "grml-screen: Error could not create lockfile! (sleeping for $SLEEP_TIME_)" >&2
53     sleep $SLEEP_TIME_
54 elif [ $PID_FILE_CREATED_ = "false" ]; then
55     echo "nothing to do" &>/dev/null
56 else
57     echo "grml-screen: internal error - PID_FILE_CREATED_ == \"$PID_FILE_CREATED_\"" >&2
58 fi
59
60 # now run screen with config
61   cd $HOME     # important for e.g. hardcopy-feature
62
63   if [ `id -u` = 0 ] ; then
64     exec screen -U -c /etc/grml/screenrc
65   elif [ -r "$HOME/.screenrc" ] ; then
66     exec screen -U -c "$HOME/.screenrc"
67   else
68     exec screen -U -c /etc/grml/screenrc_grml
69   fi
70
71 ## END OF FILE #################################################################