Re: howto serialize tasks in .xsession

From: Greg Folkert (greg_at_gregfolkert.net)
Date: 02/29/04

  • Next message: Мария: "Фигура"
    To: DebianUser List <debian-user@lists.debian.org>
    Date: Sun, 29 Feb 2004 10:18:13 -0500
    
    
    

    On Sun, 2004-02-29 at 02:09, Gregory Seidman wrote:
    > On Sat, Feb 28, 2004 at 03:50:17PM -0800, Nano Nano wrote:
    > } I run a hybrid desktop: gnome-control-center is installed, but not
    > } metacity. Fluxbox is my WM; but I remove gnome-session as a Session
    > } Manager so I have No Session Manager. Here is my .xsession:
    > }
    > } #!/bin/sh
    > } ARGS="--hide-menubar --window-with-profile=Default"
    > } #gnome-control-center
    > } gnome-settings-daemon --oaf-activate-iid=OAFIID:GNOME_SettingsDaemon --oaf-ior-fd=21 &
    > } xscreensaver -nosplash &
    > } kdeinit &
    > ( sleep 5
    > } gbuffy &
    > } #xmms &
    > } gnome-terminal $ARGS --geometry=80x25+1+22 &
    > } gnome-terminal $ARGS --geometry=95x25+582+22 &
    > } gnome-terminal $ARGS --geometry=80x40+1+418 &
    > } gnome-terminal $ARGS --geometry=95x40+582+418 &
    > )
    > } exec fluxbox
    > [...]
    > } The problem is if gbuffy or gnome-terminal starts before
    > } gnome-settings-daemon, themes and various gnome-ish things are broken.
    > } It's a classic race conditions.
    > }
    > } How can I serialize the tasks? Remember, none can block.
    > } gnome-settings-daemon doesn't return.
    >
    > Note the two added lines above. This is the simplest way to deal with
    > that sort of thing. Adjust the length of the sleep to taste. A better
    > way is to use a spinlock wrapped around lsof or netstat right after the
    > gnome-settings-daemon call (note that calling it without any arguments
    > works at least as well):
    >
    > #...
    > gnome-settings-daemon &
    > GSDPID=$!
    > while lsof -u$USER | awk 'BEGIN { found = 0; }
    > ($2 == "'$GSDPID'") && ($8 ~ /orbit-'$USER'/) { found = 1; next }
    > END { exit found }'
    > do
    > sleep 1
    > done
    > sleep 1
    > #...
    >
    > This will run lsof once a second until gnome-settings-daemon has set up
    > its unix socket, then sleep one extra second for safety, then proceed.
    > Note that it uses the pid gnome-settings-daemon started with, so other
    > instances of the daemon will be ignored.

    Thanks... sometimes it pays to not go the ugly hack route. Nicely done.

    -- 
    greg@gregfolkert.net
    REMEMBER ED CURRY! http://www.iwethey.org/ed_curry
    Novell's Directory Services is a competitive product to Microsoft's
    Active Directory in much the same way that the Saturn V is a competitive
    product to those dinky little model rockets that kids light off down at
    the playfield. -- Thane Walkup
    
    

    -- 
    To UNSUBSCRIBE, email to debian-user-request@lists.debian.org 
    with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
    


  • Next message: Мария: "Фигура"