My GSOC 2010 Proposal: Use upstream pieces to make a fully plug-and-play USB multiseat solution.

Hi everyone! To start this blog I’m posting my accepted proposal on Google Summer of Code. It is useful for everyone who wants to know what are the multiseat’s problems and what I will do to solve them. From this day forward I will post weekly the updates of the project.

The Proposal:

Use upstream pieces to make a fully plug-and-play USB multiseat solution.

Name: Lucas Nascimento Ferreira


    Over the last years many multiseat solutions have appeared, but many are
    closed projects and some are open projects that never became stable on any
    distribution. Nowadays a lot of features are being added in Xorg and Linux,
    and now is possible to make a clear and general solution that distributions
    can easily include it.

    One of these features is the correct VGA arbitration in Xorg 1.7 and
    Linux Kernel 2.6.32 [0]. This allows to set up a multiseat using multiple X
    servers on different graphical devices, and shows the interest of the
    community on this area. Another feature that is important to multiseat
    solutions is the secondary video cards initialization [1], that was included
    in Xorg 1.7 too. These features make possible to set up a multiseat with
    multiple instances of X server, but a tool that is extremely useful to
    manage sessions and seats is the ConsoleKit. All these pieces together and
    correctly integrated make a clear multiseat solution.

    Two common problems in multiseat environments are the association and
    detection of the devices, one solution based on a USB hierarchy [2] makes
    this environment more controlled and this turns the problem easier to be
    solved. A USB hierarchy is a way of dispose the devices, a set of devices
    (keyboard, mouse, ...) are attached in one USB HUB and this HUB is
    associated to one user, making one seat. The Plugable HUBS [3] are more
    useful to make a USB hierarchy because the video is also in the HUB, so the
    seats are totally separated. This kind of solution has some problems,
    because those USB HUBS must be fully plug-and-play, because user doesn't
    want to manually reconfigure the devices every time a USB HUB is detached
    from the machine. This problem can be solved with the udev[4] tool, that
    provides a way to do a dynamic detection and association of the devices.

    A USB Multiseat solution based on Plugable HUBS has another advantage, and
    this is the main attraction to end users, the cost/benefit.  The USB
    terminals themselves are a significant cost savings over buying even
    low-costs netbooks. The cost of maintaining PCs goes way down, as many
    terminals share a single server. Plug and play nature also provides big
    savings.  This solution is perfect to "office user", in other words, those
    users who only use browsers, messengers, text editors and other common
    applications like these.

    A hard work must be done to correctly integrate the new features + Linux
    Kernel tools (udev) + ConsoleKit + display managers to make a fully
    plug-and-play multiseat solution. What I am going to do is to study the
    state of all these pieces nowadays and, using the existing source code [5]
    of Plugable solution, refine and document it to make easily for
    distributions to include it.

Why Multiseat ?

    I would like to work in the "USB Multiseat Refinement" idea because I think
    is very important that linux distributions have an easy way to configure a
    multiseat environment. This is because in Brazil multiseats are becoming
    very common on public schools and I have saw that they are having many
    problems with it. Another big incentive to work with multiseats is because
    this kind of solution decreases the cost of computing, so this is a good
    tool to the digital inclusion. Three important points that justify the
    advantages of multiseats are the energy-saving, CPU optimization and ease of
    management. The first point is the most important, because with multiseats
    is possible to increase the number of users in a lab just using a little
    more of energy. This is because there is a large decrease of devices (CPUs,
    hard disks, etc) by the total number of users.  The second point is because
    in a common "office environment" (with common computers) which people are
    using only applications like browsers, messengers, text editors, a great part
    of time the CPU is idle. This is because the user is reading a document,
    seeing a website that is already loaded or something like these. So if in
    this environment is changed the common computers to multiseats, the time
    that the CPU is idle will be decreased, optimizing the use of CPU. The last
    point occurs due to the decrease of computer amount, so it turns easier the
    network management and the hardware maintenance.


    To create a fully plug-and-play USB multiseat solution is necessary to solve
    two common problems of multiseats: detection and association of devices.

    In a USB multiseat environment is necessary to detect every hub connected to
    the machine. Actually we need to detect the devices, but they will be
    plugged on the machine through the hub, for solve it will be created udev
    rules.  Every hub connected will be a seat, so is necessary to create some
    udev attributes to label this set of devices with a common seat ID. With
    this settings the detection problem is solved.

    The association problem will be divided into two classes: basic devices and
    other devices. What is considered basic devices are keyboard, mouse and
    video. Other devices are storage/audio devices. To solve it we need to get
    the devices that were detected and labeled through the udev rules/attributes
    and write a ConsoleKit script to launch independent GDM/X session to each
    set of devices (HUB). Before it, is necessary to check if in each hub are
    connected the 3 basic devices (keyboard, mouse and video). Then is important
    to create some InputClass rules to cause the primary X session to ignore
    multiseat-assigned devices, and the appropriate seat to use them.  Other
    devices like pendrives, mp3 players which will be attached on the machine
    when the sessions is already started, will also need to be detected and
    associated correctly. Since each seat has its own HUB, each new device
    attached into a hub must be associated and become available to that session
    user.  By creating some udev rules and X init scripts this can become

Project Plan

    Following the Google Summer of Code Timeline, these is my program schedule:

      April 27 - May 24

      Basically it is a study period, but detailed it is:

        - Get some Display Link USB Hubs and set up a multiseat environment with
          the source code that already exists.

        - Study the existent source code to become expert in what already been

        - Understand how does udev works

        - Study the state of Xorg today to know how to set up a good
          configuration file and explore the new features.

        - Study if there is some configuration or module that will need to set
          up on kernel.

      May 24 - June 7

        - Define the udev rules to detect hubs/devices which should be
          collectively treated as terminals

        - Define the udev attributes to label the set of devices with a common
          seat id

      June 8 - June 30

      At this period I will be more busy because I will be at the end of
      semester and I will have a lot of exams.

        - udev triggers for on-demand generation of the appropriate Xorg config
          files, to allow seats to coexist with the primary display/devices.

        - Implement ConsoleKit scripts to launch independent GDM/X sessions for
          each USB terminal seat

      June 1 - July 15

        - Write documentation and make a lot of tests (performance,
          plug-and-play tests, ...)

      July 16

        - Submit mid-term evaluation.

      July 17 - July 29

        - InputClass rules to cause the primary X session to ignore
          multiseat-assigned devices, and the appropriate seat to use them

        - udev rules and X init scripts to grant access to audio, storage, and
          other devices to the person logged into the matching seat

      July 30 - August 9

        - Study the state of some of the principal distros today to assess the
          best way to include a multiseat solution on it.

        - Adapt the code to include the solution to an example distribution, like
          Debian or Gentoo.

        - Write documentation and make a lot of tests (performance,
          plug-and-play tests, ...)

Personal Information

        My name is Lucas Nascimento Ferreira, I'm a 20 years old student of
        Computer Science at UFPR [6] (Federal University of Paraná). I live in
        Curitiba, capital of Paraná state, Brazil. I have worked with multiseats
        over the last 3 years in MDM project [7] at C3SL [8] (Center of
        Scientific Computing and Free Software). In 2008 I wrote a considerable
        amount of code [9] to MDM project and in 2009 I published a summary
        [10, 11] (only in portuguese) about the performance of the X Window
        System on the labs of the Informatics Department of UFPR. I have done
        one presentation (only in portuguese) [12] about multiseats to students
        of UFPR explaining the common problems and the MDM solution.  From 2009
        I started to work with NX server of NoMachine and Google's NeatX.



1 Response to “My GSOC 2010 Proposal: Use upstream pieces to make a fully plug-and-play USB multiseat solution.”

  1. 1 garcinia cambogia extract July 2, 2013 at 1:42 am

    Hurrah! At last I got a website from where I can actually take valuable facts regarding
    my study and knowledge.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s


%d bloggers like this: