So sane multi-seat handling was something I wanted to make KMS do at some point and designed for but never quite implemented.
So in an attempt to maybe get help out people who are interesting in this I've gotten two seats on a single card working here to a demoable level.
http://people.freedesktop.org/~airlied/multiseat/
contains a kernel patch + libdrm patch.
The kernel patch pretty much contains 3 pieces:
(a) ability to create "render" device nodes with an attached list of output resources it controls (crtcs/encoders/connectors).
(b) hardcoded render node setup for my X1900 - two parts - core drm creates 3 devices nodes, radeon driver assigns hardcoded
resources to the nodes - in this case render node 0 gets a crtc + DVI + encoders, and node 1 gets the other crtc/DVI/encoders, and
render node 2 gets no outputs.
(c) drm mapping fixups for multiple device nodes - this is something we should probably cleanup independently of this patch.
the libdrm patch just contains support to use an env var to pick the device path.
With this xorg.conf and the two startx wrappers I can run two X servers separately.
TODO:
(a) define a kernel/user interface to set seats and nodes up. The DRM control node is there specifically for this purpose but I never got around to specifying this interface. It basically needs a few methods:
1. Create new render node with output configuration.
2. Remove render node.
These would have to rely on their being no users of the render or legacy device nodes in advance. The kernel would
also have to get the driver to validate the output configuration. The output configuration would be a list of IDs for crtcs/encoders/connectors.
(b) maybe add a drm device path to xorg.conf so each card section can specify one, would help get away from BusID also.
(c) make a sane userspace interface to use it all - I suspect you'd need something in gdm/ConsoleKit to configure this sort of
thing, you'd have to construct per-card multi-seat profiles with a list of the outputs and stuff you want on each seat etc.
At this point I'm just trying to flesh out my backlog of projects and figure out how long they will take to do properly, feel free if someone is interested in picking this up and running with it.
|
Page Summary
:: Hmm [+1] :: (no subject) [+1] :: In practical terms... [+1] :: (no subject) :: thanks :: use with other drivers [+1]
July 2017
|
two X servers one graphics card.
This is very interesting work. I hope this work generates more interest because I have difficulty using multiple display devices on the same system right under KDE. (I'm aware this work may not be germane to my issues, but it's good to see people working the area nonetheless.) Thanks for the hard work. (Anonymous)
Question/Suggestion. Will this work with cgroups
One of the biggest issues of running distributions inside a cgroup is lack of means to run X11. Re: Question/Suggestion. Will this work with cgroups
don't think this will change anything in that area, not sure what stops X from running inside a cgroup though. We have Xvfb where X renders to a virtual framebuffer, though what to do with the surface after X is finished rendering to it is the problem, you still need to display it for it to be useful. (Anonymous)
Re: Question/Suggestion. Will this work with cgroups
Xvfb is normally not that useful in side openvz and other container like tech ie cgroup. (Anonymous)
thanks
Thanks, man! This is some really interesting work! |