[PATCH] Support filtering of hotplugged input devices

Ilia K. mail4ilia at gmail.com
Sat Oct 24 09:29:46 PDT 2009

Hi all.
I've just filled X.Org Bug 24712
<http://bugs.freedesktop.org/show_bug.cgi?id=24712> and attached a
patch to fix the issue.
Follows a copy of bug/fix description I added to bug report.

The usual deployment of multiseat environment involves running several
instances of X server simultaneously. If hotplugging is enabled, all
keyboards/mice are detected and used by all X servers, which makes multiseat
environment practically unusable. A traditional workaround for this issue was
disabling hotplugging with
 Option  "AutoAddDevices" "false"
However, this workaround misses all the advantages of hotplugging.
Particularly, changing a physical keyboard/mouse requires X server restart.
This is especially annoying when some low-end keyboards/mice/usb hubs "blink"
(go off, then immediately on) due to EMI or something like that.

A possible solution is to allow hotplugging but "filter out" new input device
notifications for unnecessary devices.

Attached patch implements the fix.
A user is able to attach x11_layout option to the device which is matched
against current server layout id. If x11_layout option is missing, is "*"
or equals to server layout id, the device is added. Otherwise it's ignored.

Assume that in xorg.conf AutoAddDevices option is set to true (which is a
default) and two ServerLayout sections are present:
Section "ServerLayout"
        Identifier     "Seat0"
        Screen      0  "Screen0" 0 0
Section "ServerLayout"
        Identifier     "Seat1"
        Screen      0  "Screen1" 0 0

Than the following file can be added as
/etc/hal/fdi/policy/30-multiseat_input.fdi :

<?xml version="1.0" encoding="UTF-8"?>
<!-- define which keyboard/mouse should be used by which instance of X server

<deviceinfo version="0.2">
    <!-- Seat 0 uses usb hub 1-7 only -->
    <match key="info.category" string="input">
      <match key="linux.sysfs_path"
        <merge key="input.x11_options.x11_layout" type="string">Seat0</merge>

    <!-- Seat 1 uses usb hub 1-8 only -->
    <match key="info.category" string="input">
      <match key="linux.sysfs_path"
        <merge key="input.x11_options.x11_layout" type="string">Seat1</merge>

    <!-- input devices which don't match above rules will be added to all X
instances -->

I've tested the patch (and actually I'm using it right now) on
xorg-server-1.6.0 under Ubuntu 9.04.

P.S. due to some problem with bugs.freedesktop.org (it has shown me
Internal Server Error several times) the patch attachment appears 3
times and the first comment 2 times on a bug page. If you know how to
delete superfluous entries, please do it.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Support-filtering-of-hotplugged-input-devices.patch
Type: text/x-diff
Size: 1854 bytes
Desc: not available
Url : http://lists.x.org/archives/xorg-devel/attachments/20091024/87eb4d10/attachment.patch 

More information about the xorg-devel mailing list