Tagged with GNOME

Debugging With Strace

I just check in a short doc explaining some tricks to use when debugging Vino.

I got a bit side tracked explaining how you can figure out what messages are being sent back and forth to the X server, just by looking at the read()s and write()s in the strace. A snippet:

[markmc@blaa ~]$ grep -rn X_QueryExtension /usr/include/X11/Xproto.h
2091:#define X_QueryExtension               98

  That's 0x62 in hex. So, we're looking for a write to the X
connection (file descriptor 3) with 0x62 as the first byte. What do ya
know:

1117012824.950683 writev(3, [{"\x62\x01\x04\x00\x06\x00\x01\x00", 8}, {"DAMAGE", 6}, {"\x00\x00", 2}], 3) = 16
1117012824.950939 read(3, "\x01\x00\x52\x00\x00\x00\x00\x00\x01\x9d\x75\xba\x00\x00"..., 32) = 32

  It's pretty clear that its QueryExtension for DAMAGE. Now, lets
figure out the event base from the reply. The format for the reply is:

typedef struct {
    BYTE type;  /* X_Reply */
    BYTE pad1;
    CARD16 sequenceNumber B16;
    CARD32 length B32; /* 0 */
    BOOL  present;
    CARD8 major_opcode;
    CARD8 first_event;
    ...
} xQueryExtensionReply;

   first_event is 11 bytes in. Looking at the read, that's 0x75. The
value of XDamageNotify is zero, so we can be 100% sure that all those
events after our NoExpose events are XDamageNotify events.

Some people might find it interesting. Others will think I'm weird and tell me to use something like xscope.

Tagged

Random Hacker Tool #753

For all those of you swimming in bug mail, I give you the super spiffy "Delete Resolved Bugs" plugin for Evolution. Woo.

I can't say its saved my life or anything, but its made a difference ...

Tagged

Design By Scribble

Yesterday, I finally got around to hacking up a dialog in Sabayon where you can assign profiles to users. Code-wise, I knew it was pretty trivial, but for once I decided to spend some time thinking about the UI design rather than hoping a real designer would come along and rescue me later.

So, I scribbled down a rough design, humed and hawed for a while and got hacking. I'm not totally depressed with the end result, so that's something ...

Tagged

Memory Usage Debugging

There's been a lot of talk about reducing memory usage in GNOME, so
some people may be interested in the little
adventure
I had this morning tracking down a mysterious 10M that
appeared in gnome-panel's memory map in FC4.

Update: I better clarify that to avoid misunderstandings ... this is
10M of unused virtual memory, not physical memory. The kernel would
only have ever allocated a handful of physical pages in this space.
This does not mean that GNOME now uses 10M less of your RAM.

Tagged

Session Migration With GDM

Last year Caolan
and I demoed hotdesking with GDM and VNC. Owen later pointed out that VNC
probably wasn't the way to go once the rendering
improvements
they're working come on line.

So, last week I picked up a patch I'd hacked up before Christmas,
finished it off and committed it to GDM. The idea is to do the same
thing as the VNC patch, but this time using a X proxy (like Xnest)
server on the terminal server instead of a VNC server.

Specifically, though, the features added to GDM are:

  • You can now configure GDM to run XDMCP sessions on a local X
    proxy server. This may be useful on its own for performance reasons;
    in theory, at least, an X proxy server should be able to limit the
    number of roundtrips it makes to the remote X server since if all you
    want to do is query server state, then that state is local. I've no
    idea yet how well Xnest and others do on this in practice, though.
  • If the proxy server supports disconnecting from its parent
    display and re-connecting later, you can configure GDM such that you
    can disconnect from your session and reconnect later simply by logging
    back in. The only proxy server's that I know of which support this is
    the DMX X server and NoMachine NX's nxagent. Its
    certainly possible to do this with any proxy though; I had it half
    done for Xnest before realizing DMX had good enough support to get the
    GDM patch done.

I've played around a little today with NoMachine's proxy. You can try
it out with GDM HEAD up by:

  1. Install NoMachine's server package
  2. Set xdmcp/EnableProxy=true in gdm.conf
  3. Download these scripts (run-nxagent.sh
    and reconnect-nxagent.sh)
    and stick them in /tmp
  4. Set xdmcp/ProxyXServer to
    ProxyXServer=/tmp/run-nxagent.sh -audit 0 -name NX -geometry 768x576 and xdmcp/ProxyReconnect to
    /tmp/reconnect-nxagent.sh
  5. Re-start GDM
  6. From another machine run X -query $server and login
    through the login screen
  7. Run /tmp/reconnect-nxagent.sh --to :20 on the server to
    disconnect your remote X server from the session
  8. Run X -query $server again on the server, login and you
    should be immediately re-directed to your original session
Tagged