This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Emacs and DBUS


On 8/26/2010 4:16 PM, Michael Albinus wrote:
Ken Brown writes:

I'm confused: do you mean, the problem is happening when the system bus
is running, or when it is *not* running? I suspect the latter case.

I really meant it the way I said it: The problem occurs if the system bus *is* running. I've done some further testing, and here are the results, all with a build of emacs from the trunk, starting in the emacs src directory.

Oops.


1. With the system bus not running, I start Emacs via 'dbus-launch
./emacs.exe -Q&' and load dbus.el.  In the *scratch* buffer I evaluate
some of the expressions that you suggested in your earlier email:

(dbus-get-unique-name :session)
":1.0"
(defun my-dbus-signal-handler (&rest args)
     (message "Signal from bus %s received: %s"
              (dbus-event-bus-name last-input-event) args))
my-dbus-signal-handler
(dbus-register-signal
    :session dbus-service-dbus dbus-path-dbus dbus-interface-dbus
    "NameOwnerChanged" 'my-dbus-signal-handler)
((:session "org.freedesktop.DBus" "NameOwnerChanged")
("org.freedesktop.DBus" "/org/freedesktop/DBus"
my-dbus-signal-handler))

Now I try 'dbus-monitor --session' in the xterm window from which I
started emacs.  This produces output in the xterm window, but I don't
see anything in Emacs.

No surprise. You have started an own session bus for Emacs, which is not known to dbus-monitor. You shall do

# eval `dbus-launch --auto-syntax`

dbus-launch returns some environment variables to be set, which is done
by the eval command. The most interesting one is $DBUS_SESSION_BUS_ADDRESS

# emacs&

Emacs will find the session bus via $DBUS_SESSION_BUS_ADDRESS. Load
dbus.el, and eval the expressions as suggested.

# dbus-monitor --session

This is also a D-Bus client, which connects to the *same* session bus as
Emacs did due to $DBUS_SESSION_BUS_ADDRESS. Now you should see the
signal sent by dbus-monitor in Emacs.

OK, I started the session bus the right way this time, but I still didn't see any signal from dbus-monitor in Emacs. I assume I should have seen something in the echo area?


2. With the system bus running, I start Emacs as above and load
dbus.el. The cursor stops blinking, and Emacs becomes unresponsive.  I
can type C-g and hear a bell, and I can type C-x C-c to exit, but I
can't get a response to any other key presses.

That I need to debug. Hmm, no system available next days.


Maybe you can compile dbusbind.c with the compiler flag DBUS_DEBUG,
something like this in the Emacs source tree:

# MYCPPFLAGS='-DDBUS_DEBUG' make

This enables test traces sent to Emacs' stdout (the shell where you have
started it). I've introduced this flag while testing dbusbind.c, when it
has blocked Emacs, and I didn't want to start gdb ...

Maybe I can see something suspicious in the traces.

There's very little there. It prints the two lines


  xd_add_watch: fd 8
  xd_add_watch: fd 9

and no more. Does this tell you anything?

Ken

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]