Bug 2216

Summary: Multiseat support for Xorg
Product: xorg Reporter: Adam Jackson <ajax>
Component: Server/GeneralAssignee: Xorg Project Team <xorg-team>
Status: RESOLVED FIXED QA Contact:
Severity: major    
Priority: high CC: daniel, dberkholz, intangir, johan.walles, roland.mainz
Version: 6.8.2   
Hardware: x86 (IA32)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Bug Depends on: 968    
Bug Blocks:    
Attachments:
Description Flags
inhibit initial/final vt switches
none
novtswitch-and-sharevts-1.patch
none
novtswitch-and-sharevts-3.patch
none
-isolateDevice support none

Description Adam Jackson 2005-01-04 09:35:37 UTC
This is mostly solved, for linux, by bug #968.  Several other patches exist
against XFree86; example implementations:

http://cambuca.ldhs.cetuc.puc-rio.br/multiuser/
http://www.itsopen.net/projects/x-hack/

Both of these are unusable as-is because the 'usbev' driver they use is lifted
straight from GPL'd code (though the itsopen solution omits the license header).
 The rest is MIT clean though, and the evdev driver in bug #968 replaces the
usbev driver.

Targetting 6.9 for this, as it's low-impact and widely desired in the user
community.
Comment 1 Daniel Stone 2005-01-17 14:16:22 UTC
For Ubuntu, we're using the evdev driver, and a novtswitch PLUS sharevts patch
which I'll attach in a second.
Comment 2 Daniel Stone 2005-01-17 14:17:08 UTC
Created attachment 1699 [details] [review]
inhibit initial/final vt switches
Comment 3 Adam Jackson 2005-01-24 13:46:30 UTC
wow, that's so much less ugly.  however that looks like just the noswitchvt
patch, is the sharevts one not needed?  also, i looked in the ubuntu changelog
but couldn't find an attribution for those patches.

there's one piece of the community solution that i'm still not sure about:

--- xc/programs/Xserver/hw/xfree86/common/xf86pciBus.c	Wed May 16 04:56:06 2001
+++ xc.1st/programs/Xserver/hw/xfree86/common/xf86pciBus.c	Mon Aug 20 10:10:26 2001
@@ -534,9 +534,11 @@
 #ifdef DEBUG
     ErrorF("pciIoAccessDisable: 0x%05lx\n", *(PCITAG *)arg);
 #endif
+#if 0
     ((pciArg*)arg)->ctrl &= ~SETBITS;
     ((pciArg*)arg)->func(((pciArg*)arg)->tag, PCI_CMD_STAT_REG,
 			 ((pciArg*)arg)->ctrl);
+#endif
 }
 
 #undef SETBITS
---

this is _extremely_ dirty, basically this turns pciIoAccessDisable into a nop. 
apparently this is to work around lockups when one server shuts down.  how
gross.  need to look at the gentoo patches to figure out if they have a better
solution.

the sharevts and novtswitch patches in ubuntu look good to go, between those and
evdev i think we're mostly sorted for multiseat.  but i do want to figure out
that PCI hack.
Comment 4 Adam Jackson 2005-01-25 17:01:56 UTC
Created attachment 1749 [details] [review]
novtswitch-and-sharevts-1.patch

this merges the noswitchvt and sharevts patches from debian, and ports them
forward to head.  minor changes were needed to account for egbert's work on OS
restore of console fonts.

still no idea how these should be attributed...
Comment 5 Daniel Stone 2005-01-25 18:55:28 UTC
Authored by Daniel Stone, copyright © 2004 Canonical Ltd.  Happy to licence
under the same terms currently governing lnx_init.c.
Comment 6 Adam Jackson 2005-02-07 12:32:23 UTC
Created attachment 1853 [details] [review]
novtswitch-and-sharevts-3.patch

updated to apply against cvs rev 1.4.
Comment 7 Daniel Stone 2005-02-12 02:19:40 UTC
Created attachment 1891 [details] [review]
-isolateDevice support

you'll also need this one in order to not have it crap all over the PCI bus on
start; without this, the other displays just freeze as the last X server to
start randomly obliterates all other display devices on the PCI bus.  usage is
-isolateDevice PCI:1:0:0, f.e.
Comment 8 Adam Jackson 2005-02-12 09:20:21 UTC
so is there any reason we can't do isolateDevice behaviour by default?
Comment 9 Daniel Stone 2005-02-12 12:53:15 UTC
yeah, some devices get cranky if you isolate it down to them; they'll just hang
solid at startup (this was the case for me with a cirrus gd5446, nvidia riva128,
tseng et6000, ark 2000pv, s3 vision964; they only work when you don't pass -iD.
 starting the server and loading that device without -iD (a normal run) first
seems to improve the situation a little, but not much -- it's extremely fiddly.
Comment 10 Adam Jackson 2005-03-22 13:55:25 UTC
okay, so we need novtswitch + sharevts + isolatedevice, but none of them on by
default.  i'll make a rollup patch against HEAD later this week, and i'd like to
get some pretty wide testing before landing it all.
Comment 11 Adam Jackson 2005-07-04 09:34:46 UTC
Created attachment 3024 [details] [review]
add mimetype for Hancom Hangul Document and Template

so, exactly one week later, here's your rollup patch against 6.8.99.14.  gonna
do some quick build and boot tests with it, and then (hopefully) commit.
Comment 12 Adam Jackson 2005-07-04 14:01:32 UTC
applied.  leaving this open since it assuredly doesn't work yet for someone...
Comment 13 Adam Jackson 2005-08-01 09:53:01 UTC
closing.  please open new bugs if you hit issues with multiseat support.
Comment 14 Intangir 2005-09-19 14:42:39 UTC
what is the earliest version that supports this?
Comment 15 Adam Jackson 2005-09-19 16:11:05 UTC
*** Bug 4514 has been marked as a duplicate of this bug. ***
Comment 16 Adam Jackson 2005-12-03 03:48:00 UTC
pulling this off the blocker list for 7.0, so transitive evdev bugs aren't
marked as blocking 7.0.
Comment 17 Tristan Van Berkom 2006-03-09 06:19:50 UTC
Well, I cant say I understand what 'multiseat' is supposed to mean :-/

But I'm pretty sure I found a bug in these patches.

From my understanding; the -noswitchvt stuff ensures that X doesnt
just automatically switch the active console to its VT, that works.

But any calls to XOpenDisplay at this point block; maybe I missed the point
but to me the -noswitchvt stuff is very usefull because I intend to stay
in bootsplash untill the heavy X based applications finish loading up
and displaying themselves in X... and *then* chvt into the X terminal
(so as to minimize graphical glitches at startup on an embedded device).

Is this a bug or just impossible to achieve because of some hardware 
dependancy ? (i.e. I cant get a Display handle if X has never taken over
the console yet).

BTW: maybe its an issue with my setup ? I'm running xorg 6.8.2 + the above
noswitchvt patch on a via epia lookalike board.
Comment 18 Daniel Stone 2006-03-09 06:41:04 UTC
multiseat is supporting multiple users on the same machine through multiple
input devices (i.e. the logical polar opposite of multihead; multifoot wasn't
sensible, and the other suggested names weren't quite tell-your-boss-about-it-safe).

and yeah, you probably won't be able to accept client connections until after
you've done the VT switch, because the driver defers initialisation until then;
so it may very well fail, in which case you don't want to have already accepted
client connections.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.