KDE 4.3.4 cannot start

Duncan 1i5t5.duncan at cox.net
Fri Jan 8 09:56:16 GMT 2010


James Tyrer posted on Thu, 07 Jan 2010 11:11:15 -0700 as excerpted:

> Duncan wrote:
>> James Tyrer posted on Wed, 06 Jan 2010 16:07:26 -0700 as excerpted:
>> 
>>> However, these instructions are wrong:
>>> 
>>> http://cblfs.cross-lfs.org/index.php/Starting_KDE
>>> 
>>> I suggest that you try this for your ~/.xinitrc file:
>>> 
>>> ------8<------8<------8<------8<------8<------8<------8<------8<------
>>> 
>>> 
>>> eval `dbus-launch --sh-syntax --exit-with-session`
>>> 
>>> exec startkde
>>> 
>>> ------8<------8<------8<------8<------8<------8<------8<------8<------
>>> 
>>> 
>> According to the dbus-launch manpage I have here, the instructions at
>> the given URL (the starting dbus ones) appear to do about the same
>> thing, except that dbus instance should start and stop with the
>> session, which is what's desired if you're doing it that way.  Why are
>> they wrong?
>> 
>> Here's the (single) line they use (minus the echo to the ~/.xinitrc
>> bit), reprinted here for comparison:
>> 
>> exec dbus-launch --exit-with-session startkde
>> 
> First, there is an error is in this line:
> 
> echo "exec dbus-launch --exit-with-session startkde" >> ~/.xinitrc
> 
> Note the ">>", that is wrong.

Why is that wrong?  It's the file-redirect and append (instead of 
replacing).  Thus, it appends that line to the end of .xinitrc if it 
exists already, and creates it with that line, if not.  Presumably, the 
user may have several other things already setup to run when starting X, 
and would not want them to be overwritten.  Also, because it's an exec, 
the new command runs in the existing process, replacing the bash code 
running the script with the dbus-launch program, so you wouldn't want it 
anywhere else /but/ the end of an existing .xinitrc, since it's not 
conditional, and if it were any place but the bottom, the rest of the 
script wouldn't get run.  So, appending to the existing file (if it 
exists) would seem to be exactly the intended effect.  (They do mention 
to be sure there's no other WMs started above it, however, which would 
again be desired, and confirms the intent to have what's there remain and 
continue to function, just now, with the new line invoking dbus to 
startkde.)

> I have to say that I do not know exactly why the D-Bus documentation
> said to do this:
> 
> eval `dbus-launch --sh-syntax --exit-with-session`
> 
> as you probably know, using "eval" make the command take effect in the
> current Bash session.  Which appears to be what you want.

Well, there's basically two ways to accomplish the same thing -- 
arranging for the dbus-launcher to track the session that's doing the 
startx.  Using the eval method, it runs it in the same session, but the 
launcher then forks off the daemon (after getting the info about the 
session that it needs so it can track it) and returns control to the 
script, while printing the necessary dbus info for the WM (using --sh-
syntax) to STDOUT.  The eval then takes are of setting up the environment 
from that output, such that an exec of the WM launcher (startkde in our 
case) further down the script will have the information about the dbus 
instance that the wm launcher needs all setup.  The two sides thus know 
about each other, and the dbus daemon can track the wm session and shut 
down when it does.  This method does the dbus launch first, then later, 
the wm launch-exec, on a different line.

The other way to do it is as that kde page mentions, all in one line.  
When a program is supplied to dbus-launcher as a parameter (it's the only 
non-option argument, with everything following being args for the invoked 
program), dbus-launcher itself launches it (as well as dbus), setting the 
environment appropriately before doing so.  As such, the dbus-launcher 
invoking script no longer needs to know the information otherwise handed 
to it on STDOUT, so in that case, STDOUT doesn't get it.  Since dbus-
launcher takes care of setting up the WM-launcher in this case, the two 
are accomplished all on the same line, with no second line needed (which 
is of course the reason for the exec in that case, it's slightly more 
efficient reusing the same process instead of setting up a new one, and 
that makes sure any other environment settings, etc, carry over, even if 
they're not exported).

So, unless I've seriously missed something, I don't see what's wrong with 
either method.  They're just two different ways of doing the same thing, 
one running dbus-launch first, as a separate command, then the WM-
launcher, the second handing the WM-launcher to dbus-launch as a 
parameter, so it's all accomplished in a single line.

That's why I'm asking what's wrong.  Because I can't figure it out, but 
I've been known to overlook the obvious on occasion, and in fact am still 
learning "neat bash tricks" (and unfortunate bash misunderstandings) 
myself, so I'm just wondering if this is a "neat dbus-launcher 
trick" (and/or a bash redirect trick) you didn't understand, or an 
"unfortunate bash misunderstanding" of my own.  Either way, I'm learning 
stuff, and expect you might be doing so as well.

-- 
Duncan - List replies preferred.   No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master."  Richard Stallman

___________________________________________________
This message is from the kde mailing list.
Account management:  https://mail.kde.org/mailman/listinfo/kde.
Archives: http://lists.kde.org/.
More info: http://www.kde.org/faq.html.




More information about the kde mailing list