[ubuntu-x] Backported features from xserver 1.8

Timo Aaltonen timo.aaltonen at aalto.fi
Thu Mar 25 13:49:47 GMT 2010

Ok, since this made the headlines on Phoronix I should probably correct 
some misconceptions and explain a bit more to the greater public.

First of all, backporting xorg.conf.d/inputclass was discussed already in 
December when the support was merged upstream. I backported these then and 
tried them out, and it worked fine. I think the only blocker, as 
Debian is concerned, was that the video driver autoconfig fallbacks had 
never worked when there was an xorg.conf present, and with xorg.conf.d 
config snippets, that condition would've always been true. The new patch 
from SUSE seems to fix that, so the blocker is gone (and release blockers 
remain ;).

Debian & Ubuntu have shipped an older version of the udev support 
patch-set by Julien Cristau for months now. The main diff versus the 
upstream version is that the vendor/driver matching is done by udev rules 
and not by xorg.conf.d config snippets as in 1.8 (where udev config is 
ignored). So the way how the input drivers are loaded has not been changed 
here, only the mechanism of telling the xserver about the drivers (and 
which is already used by Fedora 13 and openSUSE, possibly others).

There's more to 1.8 than just these features. Here's the diffstat of only 
these patches applied on top of 1.7.6:

  Xi/stubs.c                           |    3
  config/Makefile.am                   |   20 +
  config/config-backends.h             |   21 +
  config/config.c                      |   77 +++++++
  config/dbus.c                        |    2
  config/hal.c                         |   97 +++------
  configure.ac                         |   27 ++
  cpprules.in                          |    3
  hw/dmx/dmxinput.c                    |    3
  hw/kdrive/src/kinput.c               |   11 -
  hw/xfree86/common/xf86AutoConfig.c   |   79 ++++---
  hw/xfree86/common/xf86Config.c       |  172 +++++++++++-----
  hw/xfree86/common/xf86Globals.c      |    3
  hw/xfree86/common/xf86Init.c         |   15 +
  hw/xfree86/common/xf86Option.c       |   25 --
  hw/xfree86/common/xf86Priv.h         |    1
  hw/xfree86/common/xf86Xinput.c       |  223 +++++++++++++++++++--
  hw/xfree86/doc/man/Xorg.man.pre      |   34 ++-
  hw/xfree86/doc/man/xorg.conf.man.pre |  196 +++++++++++++++++-
  hw/xfree86/parser/Configint.h        |    2
  hw/xfree86/parser/Layout.c           |   79 +++++--
  hw/xfree86/parser/Makefile.am        |    1
  hw/xfree86/parser/configProcs.h      |    4
  hw/xfree86/parser/read.c             |    8
  hw/xfree86/parser/scan.c             |  370 ++++++++++++++++++++++++++---------
  hw/xfree86/parser/write.c            |    2
  hw/xfree86/parser/xf86Parser.h       |   48 +++-
  hw/xfree86/parser/xf86tokens.h       |   14 +
  hw/xquartz/darwinXinput.c            |    3
  hw/xwin/InitOutput.c                 |    3
  hw/xwin/winconfig.c                  |   40 +++
  hw/xwin/winconfig.h                  |    1
  hw/xwin/winprocarg.c                 |   18 +
  include/dix-config.h.in              |    6
  include/input.h                      |   17 +
  include/misc.h                       |    3
  include/xorg-config.h.in             |    3
  os/utils.c                           |   40 +++
  39 files changed, 1348 insertions(+), 344 deletions(-)

the libudev change alone is 415 insertions, 81 deletions - roughly a 
third of the total, and something we already had. Compare that to the diff 
between 1.7.6 and (diff'ing the git tags):

  608 files changed, 12060 insertions(+), 56398 deletions(-)

So it's not like there's nothing else in 1.8 ;)

The backport was not hard to create, it's just a bunch of commits on top 
of each other. The tagging support needed one cleanup commit, so it's 
included to minimize the diff and effort. The only real change was to not 
bump the input ABI in the inputclass diff just because of the wacom driver 
- the driver only needs to drop the check for the new ABI (and 
build-depend on the new headers). TTBOMK, there are no other input drivers 
needing the same.

Here's the full list of the backported patches with a short description 
of what it does:

config-xorg-conf-d.diff			"Merge dbn/xorg.conf.d"
inputclass-sans-abi9.diff		"Merge dbn/inputclass"
config-libudev-backend.diff 		"config: add libudev config backend"
config-dont-filter-input-subsys.diff	udeb backend fix (already in D/U)
xfree86-move-sanitycheck.diff		inputclass fix
xfree86-init-pointer-feedback.diff	more pointer accel defaults
xfree86-replace-true-false.diff		xkb cleanup for the tagging support
xfree86-make-docs-match-reality.diff	Ignore and tagging support 1/7
xfree86-handle-files-without-newline.diff	2/7
xfree86-add-ignore-option.diff			3/7
xfree86-allow-multiple-args.diff		4/7
xfree86-set-fnmatch-pathname-flag.diff		5/7
add-xstrtokenize-to-the-dix.diff		6/7
add-tag-matching-to-attrs.diff			7/7
xfree86-reorder-option-priorities.diff	fixes config priority order
xfree86-fix-video-fallback.diff		fix for the video fallbacks
xfree86-dont-complain-about-missing-coredevices.diff	silence the useless error

I/T patches could've been lumped together, but didn't bother.

And let's not forget that this is just a proposal that needs to pass 
_both_ Debian and Ubuntu devs. And while people are rightfully concerned 
about stability (shouldn't be a problem here as pointed out above), I'm 
concerned about the stability of the interfaces the users/admins need to 
configure their systems. We've come a full circle from xorg.conf via hal 
fdi-files to udev rules, and now back to xorg.conf{,.d}. It's mostly a 
matter of deciding should we stick to the udev rules for squeeze & lucid 
or not..

I've pushed the xserver and evdev/wacom/synaptics drivers to a PPA, but 
the build queue is quite long. Local builds are working for me though..

Timo Aaltonen
Systems Specialist
IT Services, Aalto University School of Science and Technology

More information about the Ubuntu-x mailing list