> On Juli 29, 2014, 3:33 nachm., Aleix Pol Gonzalez wrote: > > kinit/kinit.cpp, line 1481 > > <https://git.reviewboard.kde.org/r/119497/diff/1/?file=293442#file293442line1481> > > > > do you need $DISPLAY in OS X? > > René J.V. Bertin wrote: > Nope. It can be set if the user has XQuartz installed and running, but > that shouldn't make a difference. > > In fact, $DISPLAY shouldn't be used on OS X because we wouldn't want > things like socket names change when the user starts or quits XQuartz with > KDE apps and/or services running. > > Ian Wadham wrote: > Perish the thought ($DISPLAY fluctuating between a value and an empty > string). On my system, OS X 10.7.5 (Lion), XQuartz was installed by Apple and > $DISPLAY is always set to a value, even if XQuartz (X11.app) is not running > (i.e. no X11 server running). I presume installing X11 somehow "doctors" the > OS X (Darwin) startup procedures so that DISPLAY is already defined in every > user's ~/.profile. I do not know if that would be the case if a FOSS version > of XQuartz would be installed (e.g. on OS X 10.9.x Mavericks). > > The big thing is that $DISPLAY -is- used (non-portably) in KDE to help > name a socket in kdeinit4 (kinit.cpp), wrapper.c, kwrapper and KCrash - and > FAIK it may be used in this way in several other places. If $DISPLAY is not > used consistently in all those places, communication with kdeinit4 can break, > as it does already in KCrash/kdeinit4 on Apple OS X. And THAT is what we are > trying to fix here. KDE apps on Apple OS X MUST be able to report a crash > reliably. > > This is why I keep asking for help from a KDE core developer. How > widespread is this problem in KDE on Apple OS X? What are the implication for > KDE apps? Should references to $DISPLAY in KDE be eliminated from the OS X > version? What do kdeinit4, kwrapper and klauncher really do? Is whatever they > do actually portable to Apple OS X? Or are we all, KDE guys and MacPorts guys > alike, just crossing our fingers and hoping for the best? > > I tried using lxr.kde.org to find further references, but there are > thousands: mostly because "display" is a commonly-used English word in > programming. And I did tick the case-sensitive box, but it does not seem to > work. > > René J.V. Bertin wrote: > Hmm, interesting. I should find some time to play with this in my 10.9 VM. > Know however that even if $DISPLAY is always set, it will not always have > the same value. At least for me, XQuartz has the annoying habit of increasing > the display number after a restart. > > If it's too complicated to remove all references to $DISPLAY from KDE > code (which wouldn't surprise me at all) there remains another approach. > Identify an appropriate location in the startup/initialisation code that all > KDE applications and services share, and set $DISPLAY to something sensible > (but preferably NOT a valid X11 display specifier). The only possible > undesirable side-effect I can see from here would be that shells in konsole > risk to inherit that value. > This probably isn't the most elegant solution, but then again that's > because KDE apparently never imposed the use of its own internal > variable/function (or one from Qt) instead of directly querying $DISPLAY. > > Ian Wadham wrote: > Restart of what? My system (Lion) has Apple OS X's XQuartz and $DISPLAY > has a random temp-file path prepended every time Apple OS X starts of > restarts. And that path is different every time. But so what? $DISPLAY keeps > the same value no matter how many times I start XQuartz (X11) by running Gimp > or whatever. And that value, determined immediately after boot or restart, > should be picked by all KDE components, which come into existence later. > > René J.V. Bertin wrote: > I meant restarts of the X server - it does crash sometimes, sometimes I > have to restart it for other reasons, like after logging off and back in. I > recall that I used to have those weird (socket based?) $DISPLAY values too, > but now they're of a perfectly normal host:X.Y form on my systems. Except > that X tends to increase each time I start XQuartz. I ignore how common this > is, but I think that if you're looking into the use of $DISPLAY on OS X, you > could just as well take all possible situations into account. I'd suggest to > use the fact that the actual value is irrelevant and without important to > clamp it to something appropriate (why not Qt4:Mac) in such a way that all > those younger components pick up that value. And not the actual, current > value of $DISPLAY, which may or may not have remained unchanged. (I > specifically used the term clamp to draw an analogy signal acquisition, where > unconnected inputs can carry all kinds of bogus signals.) > > René J.V. Bertin wrote: > I've looked into the $DISPLAY value variations mentioned (= described > from memory) above. The big lines hold: > > - When I log in, $DISPLAY is not set. This is probably because I > deactivated org.macosforge.xquartz.startx.plist (by moving it from > Library/LaunchAgents): I always launch an X11 environment anyways and the > autostart feature tends to start another server when I'm least expecting it. > - When I start XQuartz and launch (for instance) konsole, $DISPLAY > remains unset, unless I launch konsole using `open -a konsole` typed into an > xterm (i.e. with $DISPLAY set). > - The value $DISPLAY takes (initially) is ":0" > - ~/.MacOSX/environment.plist contains > <key>DISPLAY</key><string>:0.0</string> but the file does not exist on all > accounts I tried (which show the same behaviour, suggesting that the file is > irrelevant). > - Quitting and restarting XQuartz normally does not modify the $DISPLAY > value > - A crash (or SIGTERM, kill -9) of XQuartz DOES cause $DISPLAY to become > ":1" after restarting the server > - This is a system-wide phenomenon that's not linked to a particular > login session. In other words, if I log off and back in as a different user, > starting XQuartz as that user will still set $DISPLAY=:1 . (If I'd had to > guess, I'd say the crash/kill caused something like a shared memory segment > to not be released.) > - One of the accounts I checked is a guest account in which Xquartz is > started in a purely stock way (and had never been started before), without > any attempts to set $DISPLAY to something not including a filepath. > > In short, $DISPLAY doesn't necessarily have a file path (starting with > "/tmp") value, and can indeed change during login session. > > Testing was done on 10.6.8 and 10.9.2, using XQuartz.app maintained by > Apple's Jeremy Huddleston. This is not the same as the (deprecated) X11.app > that used to be distributed by Apple as an optional component of Mac OS X. > It's the same server of which (at least) the local libraries are installed by > MacPorts. > > Benjamin Reed wrote: > Ultimately, the point of using $DISPLAY in KDE is to be able to associate > things happening in KDE with a unique user "session", and on Mac OS X, > $DISPLAY is not in any way tied to the user's actual session. It can get > reset or changed for any number of reasons, even though the user is in a > single login session to the Mac desktop. > > Ian Wadham wrote: > This part of the patch has been discontinued. > > René J.V. Bertin wrote: > I'm not sure why you're dropping this. Wouldn't the simplest solution be > to make sure, somewhere at a very early stage (and I've seen places where it > seems DISPLAY is being set/changed in the environment, from kdelibs!) that > the variable is set to something sensible? Something that is a syntactically > correct DISPLAY variable? > > If we presume that KDE-mac never actually connects to an X11 server, it > would make perfect sense to set DISPLAY=localhost:0 . Any code using the host > information will get the correct host address out of this, the rest doesn't > matter. Except that all clients will agree on the host they're displaying on. > > Ian Wadham wrote: > The socket name is generated in 3 or 4 places, I am not sure how many. > All of these must "line up" if KCrash, kdeinit4, klauncher, kded4 and > kwrapper are to run as and when required and interact correctly on Apple OS > X. And I am not even sure how much or how many of those background processes > are really needed on Apple OS X or what their usual uses are or what their > uses should be on Apple OS X or even whether new versions of all the > processes are going to be used in KF5. > > Until I can get some expert help and advice from a core KDE developer I > am not going to touch any of that code. That is final. > > Thomas Lübking wrote: > http://lxr.kde.org/search?_filestring=&_string=kdeinit4_ > > Only the three sources should be relevant (but I don't speak docbook) > This *will* be relevant for wayland at some point, so ideally get > mgraesslin on the topic as well. > > There's also a NO_DISPLAY definition in kinit and kcrash (since around > 2006) which actually seems what you want to ensure being defined on OSX. > Applying the same approach (from kcrash.cpp & wrapper.c) to kinit.cpp > (where it seems forgotten?) should fix socket generation. > > Ian Wadham wrote: > Now you are talking! Actually I hit on that kdeinit4_ search-string > myself a while back, but could not be certain about exactly where all the > edits of socket names should be, in order to make kdeinit4 and friends work > on OS X and avoid breaking anything on any other platform. That is one place > where I really needed expert help from a KDE core developer who knows > kdeinit4 and friends. > > David Faure has said, re an earlier issue in this RR, that it would be OK > to make $DISPLAY an empty string on Apple OS X (the socket name would then > end with kdeinit4_) and that would be fine by me ($DISPLAY no longer exists > in OS X itself, only in the FOSS X11 called XQuartz). > > In the course of seeking expert help, I discovered several other serious > problems in kdeinit4, such as permanent blocking at several points in its > initialisation, including one that might also exist in the Linux version. > Another problem was that I once got all three of kdeinit4, klauncher and > kded4 to run at once, but then kdeinit4_shutdown failed because it had the > wrong socket name! I know why this is, BTW. I raised questions about these > problems by emails to the person who had offered to help and advise me, but > he never replied. > > Thomas, could we discuss these problems somewhere else than here: > kde-mac, kde-devel or kde-core-devel? I am a member of all three. Do you have > the time? Would Martin Graesslin be interested too? IRC is difficult for me > because my timezone is UTC + 10 (Australia).
> That is one place where I really needed expert help from a KDE core developer > who knows kdeinit4 and friends. Don't consider me one, sorry :-( I'm looking at this code the first times myself now. But lxr.kde.org would find every occasion of "kdeinit4_", so unless there's some supersmart "kdeinit4" + "_" + display, those are the relevant locations. I'f there is, we'll sooner or later hit it. > such as permanent blocking at several points in its initialisation Did you open a bug on this (or record the codepoints somehwere)? > kdeinit4_shutdown failed because it had the wrong socket name! I know why > this is, BTW. ... because the cmake builds it w/o setting the NO_DISPLAY variable, i'd say (unlike kdeinit4_wrapper) > emails to the person who had offered to help and advise me, but he never > replied You're hopefully not talking about me, since I cannot recall having received such mails (or offered not existing expertise for advisory =) > could we discuss these problems somewhere else Sure. kde-core-devel seems most suited to me (and *far* better than private mails) - I can just assume that Martin is very interested in making things work w/o DISPLAY being set (and ultimately we'll all be ;-) - Thomas ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://git.reviewboard.kde.org/r/119497/#review63447 ----------------------------------------------------------- On Sept. 16, 2014, 11:14 vorm., Ian Wadham wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://git.reviewboard.kde.org/r/119497/ > ----------------------------------------------------------- > > (Updated Sept. 16, 2014, 11:14 vorm.) > > > Review request for KDE Software on Mac OS X, KDE Runtime, kdelibs, and > Michael Pyne. > > > Repository: kdelibs > > > Description > ------- > > *NOTE: Issues for KCrash have been fixed. Changes to kinit/kinit.cpp > (kdeinit4) have been discontinued. For a summary, scroll to the very end of > this page. > > When a KDE app crashes in Apple OS X, it just disappears from the screen. At > the most, the user is invited to report the crash to Apple. AFAIK this has > been a problem in KDE on Apple OS X for years, leading to frustration with > KDE among Apple users and MacPorts developers and an attitude among KDE > developers of "Why does nobody report the problem(s) on bugs.kde.org?" > > It is my strong belief that the failure to report crashes of KDE apps in > Apple OS X also exists in Frameworks. > > So far I have identified a number of portability bugs in KDE on Apple OS X: 1 > in KCrash, 1 in kdeinit4 and 5 in Dr Konqi. Patches for the first two are > submitted in this review. Patches for three more are submitted in part 2 of > this review, against kde-runtime. I am still investigating the other two > problems in Dr Konqi - and there could be more than two... > > In this review we have two portability problems: > > 1. KCrash itself crashes (SIGILL) when it tries to close all file descriptors > and so Dr Konqi is not started. Some of the FDs belong to the Apple OS X > library (COCOA) and it crashes if they are closed prematurely. > > 2. The preferred way to start Dr K is via a socket message to kdeinit4, but > that fails in Apple OS X because kdeinit4 is listening with the wrong socket > name. The DISPLAY ID is missing from the end of the name. The fallback is for > KCrash to use fork() and exec(), which works, but could cause Dr K to be > polluted, depending on the nature of the crash. > > This "deafness" of kdeinit4 (and klauncher) could be causing other failures > in KDE software in the Apple OS X environment. > > > Diffs > ----- > > kdeui/util/kcrash.cpp 45eb46b > > Diff: https://git.reviewboard.kde.org/r/119497/diff/ > > > Testing > ------- > > Using Apple OS X 10.7.5 (Lion) on a MacBook Pro, I have installed KDE libs > via MacPorts (at version 4.12.5) and I have adapted kdesrc-build to run in an > Apple OS X environment and used it to test against the KDE 4.13 branch. I > have been testing with a KDE app that I can crash at will and using stderr > and Apple OS X Console log output to determine the outcome. > > Please note that I am the -only- KDE developer who has this kind of setup, > but I am NOT a KDE core developer. My experience before now has been in KDE > Games. However I used to be a UNIX and database guru before I retired in 1998. > > I NEED HELP from KDE -core- developers to proceed further. These problems > also exist in FRAMEWORKS, but I am as yet unable to build or test Frameworks > on Apple OS X. And I am sure there are many more Apple OS X portability > problems in KDE software. > > Without my patches, Dr Konqi is not started and, if it does get past its own > crash, KCrash reports: > KCrash: Attempting to start > /kdedev/kde4.13/kde4/lib/kde4/libexec/drkonqi.app/Contents/MacOS/drkonqi from > kdeinit > sock_file=/kdedev/kde4.13/home/.kde4.13/socket-Tara.local/kdeinit4__tmp_launch-svPd0L_org.x_0 > Warning: connect() failed: : No such file or directory > > With my patches, Dr Konqi can always be started directly (using fork()) and > it -will- start via kdeinit4 and klauncher but it immediately runs into a > privilege problem with Apple OS X (a problem which I am still investigating). > > I would not have got this far without help from Michael Pyne, Thomas Lübking > and several of the MacPorts developers, as well as the unfailing enthusiasm > and encouragement of my friend Marko Käning. > > > Thanks, > > Ian Wadham > >