<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Chris Ball: Multi-pointer Remote Desktop</title>
    <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Multi-pointer Remote Desktop</title>
      <description>Remote desktop is a pretty useful technology.  It would be more useful if it wasn't so competitive, though;  when someone joins, the sharer has to sit back and watch, or fight over who gets control.  Well, now it's cooperative &amp;mdash; here's a video demo:
&lt;p&gt;
&lt;div align="center"&gt;
&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/nCQ-5eOElxE&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/nCQ-5eOElxE&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;br&gt;
&lt;i&gt;Download the &lt;a href="http://chris.printf.net/mpx.avi"&gt;video&lt;/a&gt; (23M)&lt;/i&gt;
&lt;/div&gt;
&lt;br&gt;
I should make it clear that I'm responsible only for the smallest piece of this work.  Peter Hutterer's &lt;a href="http://wearables.unisa.edu.au/mpx/"&gt;MPX&lt;/a&gt; is the core technology enabling an X desktop to have more than one pointer and keyboard present on it, and my work was modifying the &lt;a href="http://www.gnome.org/~markmc/remote-desktop-2.html"&gt;Vino&lt;/a&gt; VNC server to make it understand how MPX works.  As shown in the video, this requires no modifications to VNC clients &amp;mdash; each client can become another pointer on your X desktop regardless of whether it's running on a Windows, Mac or other Unix machine, which I think makes the whole thing pretty compelling.
&lt;p&gt;&lt;br&gt;
My patches against Vino are &lt;a href="http://dev.laptop.org/git?p=users/cjb/vino;a=shortlog;h=mpx"&gt;here&lt;/a&gt;, and this is a complete summary of them: for each new client that joins, we create a new keyboard/pointer pair and store its details with that client, then when new events come in for a client we send them through to the appropriate device.  That's all.  This is still prototype code, so there are bugs, the most noticeable of which is when you have more than one client connected, each client can only see the pointer of themselves and the server, although the server can see everyone's pointer; this will be fixed by having &lt;code&gt;vino_cursor_update_timeout()&lt;/code&gt; and parents act on a list of cursor positions rather than a single one.  (Ideally, GDK should become aware of multiple pointers, too.)
&lt;p&gt;
The next steps are to fix some bugs and get the code upstream into the main Vino repository, so that it's ready for when the distros start shipping a multi-pointer X server &amp;mdash; one way to do this would be to have Vino's preferences check to see whether your X server supports MPX, and ask you to choose between sharing your main pointer or granting extra pointers to new clients if it does.
&lt;p&gt;
The original motivation for this work, besides it being a useful-sounding idea in general, was as an experiment for a collaboration model for OLPC.  A very intuitive way for writing collaborative applications would be to make programs that don't have to understand anything about networking, but do have the idea that there's going to be more than one pointer and keyboard around sometimes and that they should be treated differently, just like when using a games console with multiple controllers.
&lt;p&gt;
For example: to write a collaborative text editor using this model, you'd want to color the text written by each participant's keyboard differently, but other than that you don't need to care about any details of networking.  (You'd want an out-of-band way for each participant to get a copy of the file they were working on afterwards, though...)
&lt;p&gt;
I'd be interested to hear any other use cases people could imagine.  If you want to give this a try, you need an MPX-enabled X server (which you can get from &lt;a href="http://www.x.org/wiki/JhBuildInstructions"&gt;Xorg Jhbuild&lt;/a&gt;) and window manager (such as &lt;a href="http://cgit.freedesktop.org/~whot/compiz/"&gt;compiz&lt;/a&gt;), and you'll need to apply &lt;a href="http://dev.laptop.org/git?p=users/cjb/vino;a=shortlog;h=mpx"&gt;my Vino patches&lt;/a&gt;.  Enjoy.


</description>
      <pubDate>Mon, 26 Jan 2009 05:10:00 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:44d17c41-f5bd-4fc6-bcb1-e7bd440b6c9d</guid>
      <author>Chris Ball</author>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop</link>
      <category>vnc</category>
      <category>olpc</category>
      <category>mpx</category>
      <category>Xorg</category>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Chrome OS</title>
      <description>&lt;p&gt;Chrome OS&lt;/p&gt;</description>
      <pubDate>Sat, 13 Mar 2010 11:17:14 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:0f273a29-bb1f-4d2d-ab14-a95fa66d4fa4</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-57135</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Compatible Ink Cartridges</title>
      <description>&lt;p&gt;Remote desktop in itself is a great technology..ya but the problem is in getting the hands onto it..seems MPX technology enabled X desktop would fret out the issues..&lt;/p&gt;</description>
      <pubDate>Thu, 24 Sep 2009 12:16:15 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:48d337a1-3725-4df8-b8f1-b1d6effefe6d</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-56106</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Eibriel</title>
      <description>&lt;p&gt;Woooowwwwwwwwwwww!!!!!!
:)&lt;/p&gt;</description>
      <pubDate>Sun, 24 May 2009 21:34:08 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:c75f560f-d101-4527-ace8-a23168d1e082</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55991</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by christian</title>
      <description>&lt;p&gt;how funny, i did almost the same thing you did at almost the same time ;-)&lt;/p&gt;

&lt;p&gt;but instead of vino i patched x11vnc:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www2.informatik.hu-berlin.de/~beier/code/CollabKit/src/server/x11vnc-0.9.6-multi5.tar.gz" rel="nofollow"&gt;http://www2.informatik.hu-berlin.de/~beier/code/CollabKit/src/server/x11vnc-0.9.6-multi5.tar.gz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and btw, did you also have problems with XTestFakeDeviceMotionEvent() not sending XI2 events? i had to use xwarppointer() instead...&lt;/p&gt;</description>
      <pubDate>Mon, 27 Apr 2009 23:31:45 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:e34f1139-ee5e-4d1a-949a-0ac63ce7a589</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55968</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Chris</title>
      <description>&lt;p&gt;Oops, the URL for the patchset broke in a migration from gitweb to cgit.  Here's the current URL:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://dev.laptop.org/git/users/cjb/vino/log/?h=mpx" rel="nofollow"&gt;http://dev.laptop.org/git/users/cjb/vino/log/?h=mpx&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 16 Mar 2009 21:59:50 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:b31617c7-39d5-4d9d-921d-de5b3b9e6206</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55875</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Siegfried Pammer</title>
      <description>&lt;p&gt;Is there a possibility to get the patches for vino? The link posted above doesn't seem to work anymore. I get: "cgit error: Invalid request"&lt;/p&gt;

&lt;p&gt;Any help would be appreciated!&lt;/p&gt;

&lt;p&gt;Thank you&lt;/p&gt;</description>
      <pubDate>Mon, 16 Mar 2009 14:07:41 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:4fbde86f-477d-41c5-a8a9-81673aff6553</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55874</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by rektide</title>
      <description>&lt;p&gt;Obby is the open spec for concurrent text editing.  The stock implementation is the text editor Gobby.  Its much akin to SubEthaEdit, but its free &amp;amp; extendable.  Ah, sorry, I'm a bit out of date: Obby appears to have been replaced by &lt;a href="http://gobby.0x539.de/trac/wiki/Infinote/Protocol" rel="nofollow"&gt;infinote&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Even with MPX, afaik there are no editors that permit multiple people to work on the same document within a single editor.  That would make an interesting project; a Gobby editor built around MPX.&lt;/p&gt;

&lt;p&gt;There is however a blog post I'm recalling, a warning to the effect of "dont write a text editor".  Indeed, this would be a cute gimmicky feature to prototype out, but writing an actual text editor sounds un-fun.  Not unless theres a modularized vim somewhere I can tap.&lt;/p&gt;</description>
      <pubDate>Wed, 28 Jan 2009 17:50:26 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:eac7b2d4-01c5-4c0a-ab6f-d2fee7498df6</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55723</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by z0d</title>
      <description>&lt;p&gt;mox, Chris: Also, SubEthaEdit is OSX only.&lt;/p&gt;</description>
      <pubDate>Wed, 28 Jan 2009 13:31:17 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:6d65d01d-3b51-4da5-b945-981642ab96b5</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55721</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Steven</title>
      <description>&lt;p&gt;Hey Chris,&lt;/p&gt;

&lt;p&gt;Very interesting, I saw some commercial attempt at something very similar that only tackled multiple pointers.  If I can dig out the link I'll send it over.&lt;/p&gt;

&lt;p&gt;Its certainly something the real time collaboration space could do with, this is the first implementation I have seen that actually does exactly whats required.&lt;/p&gt;

&lt;p&gt;P.S. How have you been, long time no see and all that :)&lt;/p&gt;

&lt;p&gt;P.P.S. I may be east coast US at somepoint in the near future with a few days to spare if you want to catch up.&lt;/p&gt;

&lt;p&gt;Steven&lt;/p&gt;</description>
      <pubDate>Tue, 27 Jan 2009 22:14:40 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:aa89f6c1-0ee3-4dd5-a8da-3c017bcea0b5</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55719</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Chris</title>
      <description>&lt;p&gt;mox: Sure, but their solution only works for text editing (rather than any application) and required writing all kinds of network synchronization and conflict-resolution algorithms; it's not something average programmers could have done.&lt;/p&gt;

&lt;p&gt;The point of my suggestion of MPX as a collaborative framework was to show that such applications wouldn't need to know anything about networking in order to be collaborative, and that makes it a powerful environment for programming.&lt;/p&gt;</description>
      <pubDate>Tue, 27 Jan 2009 19:46:10 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:dc8d6728-14e8-42bb-9c4b-a3e15f04658f</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55718</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by mox</title>
      <description>&lt;p&gt;For &lt;em&gt;good&lt;/em&gt; collaborative text editing, look up SubEthaEdit &lt;a href="http://www.codingmonkeys.de/subethaedit/" rel="nofollow"&gt;http://www.codingmonkeys.de/subethaedit/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;They have solved pretty nicely all kinds of design issues related to multiple users edting the same document.&lt;/p&gt;</description>
      <pubDate>Tue, 27 Jan 2009 19:39:08 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:30532f16-90a1-4a16-8350-6c1dcc74f5df</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55717</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Chris</title>
      <description>&lt;p&gt;z0d: You've just described the MPX (multi-pointer X) work -- it moves focus from being a single window per display to a window per pointer/device per display.&lt;/p&gt;

&lt;p&gt;Part of the reason it's taken a long time to get MPX ready is that this assumption of a single focus was present in all kinds of other libraries and client toolkits too, so we need to fix those as well.&lt;/p&gt;</description>
      <pubDate>Tue, 27 Jan 2009 15:58:36 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:545b0167-11f2-4702-9177-1f69ae76ef53</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55716</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by z0d</title>
      <description>&lt;p&gt;Just an implementation question (I don't know the inner workings of X):&lt;/p&gt;

&lt;p&gt;How can you have multiple focused windows? Or is focus related to devices (keyboard, mount etc.) instead of windows?&lt;/p&gt;

&lt;p&gt;Thanks.&lt;/p&gt;</description>
      <pubDate>Tue, 27 Jan 2009 14:44:18 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:41d398e0-ee4d-4678-808e-4ee904b5a3cb</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55715</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by baze</title>
      <description>&lt;p&gt;really cool.
but you'd have to be careful, when one person logs in as root in a terminal and another quickly uses that terminal ;)&lt;/p&gt;</description>
      <pubDate>Tue, 27 Jan 2009 13:22:45 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:3b2d72f2-612e-4bae-8592-081870070a0e</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55714</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Chris</title>
      <description>&lt;p&gt;Carlos:
Yes, your GDK/XI2 work's exactly what this needs next.  ;-)  Thanks very much for doing it!&lt;/p&gt;

&lt;p&gt;Jeremy:
JHBuild isolates your build environment from your main setup in the way you describe.  You install into /opt/mpx, or wherever, and can then run the new Xorg inside a "jhbuild shell".&lt;/p&gt;

&lt;p&gt;Thanks for the positive feedback, all.&lt;/p&gt;</description>
      <pubDate>Tue, 27 Jan 2009 05:26:49 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:b926ff0c-2fe8-4016-bb27-7a5750b0e6d1</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55713</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Jeremy</title>
      <description>&lt;p&gt;Chris,&lt;/p&gt;

&lt;p&gt;With regards to building an MPX-enabled X.org server with jhbuild, does that have to replace your existing X server, or can you install it without any conflicts?&lt;/p&gt;

&lt;p&gt;Can it, say, be installed in &lt;code&gt;/opt/mpx&lt;/code&gt;?&lt;/p&gt;</description>
      <pubDate>Tue, 27 Jan 2009 04:42:50 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:e4defdfc-7d85-4496-8a4e-9f4cc794e6a8</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55712</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by rektide</title>
      <description>&lt;p&gt;I was thinking of extending synergy with a new MPX-capable server, but the code has defeated me more than once.&lt;/p&gt;

&lt;p&gt;I second Dylan's comments.  I've been a fervent supporter of using multiple cursors in X since 2004 and its absolutely sublime watching MPX taking root.  This is a &lt;strong&gt;fantastic&lt;/strong&gt; app for MPX.&lt;/p&gt;</description>
      <pubDate>Mon, 26 Jan 2009 21:53:43 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:98d97944-d346-4c5b-a445-562af9310b26</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55711</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Donnie Berkholz</title>
      <description>&lt;p&gt;Remote tech support and collaboration could really rock with this.&lt;/p&gt;</description>
      <pubDate>Mon, 26 Jan 2009 17:40:53 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:b203a27a-82a1-4b2d-94c5-bb2ebe2ca629</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55710</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Dylan McCall</title>
      <description>&lt;p&gt;This video showcases exactly why MPX wins everything. The fact that it's taking a while to be released as stable really helps, too, because so much support is being built in ahead of time.&lt;/p&gt;

&lt;p&gt;Chris, you are on my heroes list. (Don't worry, Peter is already there) :)&lt;/p&gt;</description>
      <pubDate>Mon, 26 Jan 2009 15:21:24 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:ad1a8f10-8a97-4c4a-b860-8830af567752</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55709</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by ikke</title>
      <description>&lt;p&gt;Just checked out that videos, you must be some really cool guy :)&lt;/p&gt;</description>
      <pubDate>Mon, 26 Jan 2009 15:05:21 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:b2ff9fda-08e5-414f-ac5a-2985666735da</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55708</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by nona</title>
      <description>&lt;p&gt;Really cool indeed. I hope to see a future where Gnome/X will be able to mix multiple users (as in posix permissions) in the same session. &lt;/p&gt;

&lt;p&gt;Right now you still have to use "shared users". Different "pointers" or users won't get their own bookmarks if they start their webbrowser, for instance.&lt;/p&gt;</description>
      <pubDate>Mon, 26 Jan 2009 12:37:33 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:e9e31027-c38f-4504-b897-7ef598942dd9</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55707</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Carlos Garnacho</title>
      <description>&lt;p&gt;Hey! not sure if you read this:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.gnome.org/carlosg/2009/01/19/more-multitouchy-fun/" rel="nofollow"&gt;http://blogs.gnome.org/carlosg/2009/01/19/more-multitouchy-fun/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm working on improving GTK+ to handle MPX, there are probably some things in the TODO that you'd miss for vino, but getting some feedback would be really great :)&lt;/p&gt;</description>
      <pubDate>Mon, 26 Jan 2009 12:14:30 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:4214e151-8ae1-4bec-a1f7-747071c531d4</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55706</link>
    </item>
    <item>
      <title>"Multi-pointer Remote Desktop" by Marius Gedminas</title>
      <description>&lt;p&gt;Awesome!&lt;/p&gt;</description>
      <pubDate>Mon, 26 Jan 2009 07:55:39 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:b832a5ed-1a69-4362-828e-a18898d345d3</guid>
      <link>http://blog.printf.net/articles/2009/01/26/multi-pointer-remote-desktop#comment-55705</link>
    </item>
  </channel>
</rss>
