X-Git-Url: http://git.grml.org/?a=blobdiff_plain;ds=sidebyside;f=usr_bin%2Fgrml-screen;h=ddc1a98ab2eecc5e9cdfba48449b5c15ee4e4db8;hb=a481de8dab190f141d68e99d22d42ebee44bcddb;hp=73bdea922d1184a8cc665e7f832bde3ded699d89;hpb=e6d6fc4594d6310f8510e92bae6859884355a8b9;p=grml-scripts-core.git diff --git a/usr_bin/grml-screen b/usr_bin/grml-screen index 73bdea9..ddc1a98 100755 --- a/usr_bin/grml-screen +++ b/usr_bin/grml-screen @@ -15,7 +15,7 @@ sudo chown $USER.tty $TTY # FIXME: fix for screen race-conditions -PID_FILE_="/var/run/grml-screen" +PID_FILE_="/var/lock/grml-screen" PID_FILE_CREATED_="false" MY_PID_="$$" if [ ! -d "/var/run/screen/S-$USER" ]; then @@ -25,14 +25,15 @@ if [ ! -d "/var/run/screen/S-$USER" ]; 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 - if [ -f $PID_FILE_ ]; then - # FORK BEGIN - ( + # 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 @@ -44,25 +45,27 @@ if [ $PID_FILE_CREATED_ = "true" ]; 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 + )& + # 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 #################################################################