A month ago an update to MESA and related X11 ports [1] introduced an experimental devd-based hotplug backend to xorg-server. Unfortunately that code contains a number of major problems: 1) the code added by xorg-server/files/extra-config_devd.c is literally never called; the call to config_devd_init() was never added to config_init() (in config/config.c of the server); see this mail [2] and PR 182609 [3] 2) files/extra-config_devd.c has a typo: it'll try to load driver "kdb" instead of "kbd", see PR 181660 3) if the above problems are fixed, the backend will crash when used with xorg-server 1.7.7 inside one of the option-parsing routines (I did not pursue a fix for this, so I can't comment on how it'll work if the crash is fixed) 4) the backend always sets 'usb_id' attribute to NULL, thus preventing 'MatchUSBID' directive in xorg.conf from working 5) the backend incorrectly parses vendor and product name, thus making 'MatchVendor' and 'MatchProduct' directives hard to use 6) if devd is restarted when Xorg is running, the backend will lose connection to devd, and will not report any new hardware attaching or old hardware detaching (see mail at [5] for the last three items) To put it shortly, the current devd backend doesn't work. To fix all of the above points I've developed a new devd-based backend, which I propose we use instead. Read a (somewhat) detailed description of it in the mail at [6]. I'm attaching a patch agains current x11-servers/xorg-server port (it's the same patch as at [6], only updated to catch up with the port changes). [1] http://svnweb.freebsd.org/ports?limit_changes=0&view=revision&revision=328711 [2] http://lists.freebsd.org/pipermail/freebsd-x11/2013-September/013645.html [3] http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/182609 [4] http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/181660 [5] http://lists.freebsd.org/pipermail/freebsd-x11/2013-September/013626.html [6] http://lists.freebsd.org/pipermail/freebsd-x11/2013-September/013656.html Fix: Patch attached with submission follows:
Responsible Changed From-To: freebsd-ports-bugs->freebsd-x11 Over to maintainer (via the GNATS Auto Assign Tool)
According to your description, your backend should not suffer from the problem mentioned in https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=175731 ?
(In reply to Henry Hu from comment #2) > According to your description, your backend should not suffer from the > problem mentioned in > https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=175731 > ? This backend doesn't try to take over individual keyboards, so since the problem in that bug is not present while in console, it should not be present in Xorg with this backend. That being said, it's hard to say without trying.
Created attachment 147331 [details] xorg-server-1.12.4_2--2.hotplug.diff BTW, this is the patch I'm currently using. (No functional changes, just an update to catch up to port changes).
I've tried this patch and it gives me better results than the current hal/devd backend. It does not have the problem in bug 175731. After unplugging one keyboard, other keyboards are still usable. There is a small problem though: vendor/product information is missing. From xorg log: // unplug [ 16484.088] (II) config/devd: received: -ums0 [ 16484.089] (II) config/devd: removing device ums0 [ 16484.089] (II) UnloadModule: "mouse" [ 16484.104] (II) config/devd: received: -uhid0 // plug [ 16486.469] (II) config/devd: received: +ums0 driver=mouse flags=pointer usb_id=: [ 16486.469] (II) config/devd: ums0: driver=<mouse> [ 16486.469] (II) config/devd: ums0: flags=<pointer> [ 16486.469] (II) config/devd: ums0: usb_id=<:> [ 16486.469] (II) config/devd: adding device ums0 [ 16486.469] (II) Using input driver 'mouse' for 'ums0' [ 16486.469] (**) ums0: always reports core events [ 16486.469] (**) Option "Device" "/dev/ums0" [ 16486.470] (==) ums0: Protocol: "Auto" [ 16486.470] (**) ums0: always reports core events [ 16486.470] (==) ums0: Emulate3Buttons, Emulate3Timeout: 50 [ 16486.470] (**) ums0: ZAxisMapping: buttons 4 and 5 [ 16486.470] (**) ums0: Buttons: 5 [ 16486.470] (**) Option "config_info" "devd:ums0" [ 16486.470] (II) XINPUT: Adding extended input device "ums0" (type: MOUSE, id 8) [ 16486.470] (**) ums0: (accel) keeping acceleration scheme 1 [ 16486.470] (**) ums0: (accel) acceleration profile 0 [ 16486.470] (**) ums0: (accel) acceleration factor: 2.000 [ 16486.470] (**) ums0: (accel) acceleration threshold: 4 [ 16486.470] (II) ums0: SetupAuto: hw.iftype is 5, hw.model is 0 [ 16486.470] (II) ums0: SetupAuto: protocol is SysMouse [ 16486.471] (WW) fcntl(28, F_SETOWN): Inappropriate ioctl for device [ 16486.495] (II) config/devd: received: +uhid0 usb_id=: [ 16486.495] (II) config/devd: uhid0: usb_id=<:> [ 16486.495] (II) config/devd: adding device uhid0 [ 16486.496] (II) No input driver specified, ignoring this device. [ 16486.496] (II) This device may have been added with another device file. The reason is that, in xhotplug.conf, it says action "/usr/local/etc/rc.d/xhotplug add/usb $device-name $port.$devaddr"; and in xhotplug usbconfig is called with '-d $1' where $1 is $port.$devaddr. However, usbconfig expects $bus.$devaddr, not $port.$devaddr. For example, in this case ums0 is at ugen0.3, but xhotplug is called with 2.3, but if you change it into $bus it still does not work. From debug devd log: Processing event '+ums0 at bus=0 hubaddr=2 port=2 devaddr=3 interface=1 vendor=0x046d product=0xc52b devclass=0x00 devsubclass=0x00 sernum="" release=0x1201 mode=host intclass=0x03 intsubcla ss=0x01 intprotocol=0x02 on uhub3' Pushing table setting device-name=ums0 setting bus=0 setting hubaddr=2 setting port=2 setting devaddr=3 setting interface=1 setting vendor=0x046d setting product=0xc52b setting devclass=0x00 setting devsubclass=0x00 setting sernum= setting release=0x1201 setting mode=host setting intclass=0x03 setting intsubclass=0x01 setting intprotocol=0x02 setting bus=uhub3 Processing attach event Testing device-name=ums0 against ^(joy|psm)[0-9]+$, invert=0 Testing device-name=ums0 against ^(atp|uep|uhid)[0-9]+$, invert=0 Testing device-name=ums0 against ^ums[0-9]+$, invert=0 Executing '/etc/rc.d/moused quietstart ums0' Executing '/usr/local/etc/rc.d/xhotplug add/usb ums0 2.3' Popping table The correct value (bus=0) is silently overridden by bus=uhub3, so it's hard to obtain the usb bus value. It's possible to obtain this value by looking into dmesg but that's too ugly.
Hm. That's strange. On my machine (FreeBSD 10) when I plug in one of my devices, this is what devd shows: +uhid0 at bus=1 hubaddr=1 port=3 devaddr=2 interface=0 vendor=0x0079 product=0x0011 devclass=0x00 devsubclass=0x00 sernum="" release=0x0106 mode=host intclass=0x03 intsubclass=0x00 intprotocol=0x00 on uhub0 ... and then: # usbconfig -d 3.2 ugen3.2: <USB Gamepad vendor 0x0079> at usbus3, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (100mA) ... but: # usbconfig -d 1.2 No device match or lack of permissions. So in this case, "3.2" (i.e. "$port.$devaddr") is the right address here, "1.2" (i.e. "$originalbus.$devaddr") would not work. I'm not quite sure why is this different on your system. What does your 'usbconfig dump_device_desc' show for 0.3 and 2.3?
> sudo usbconfig -d 2.3 dump_device_desc No device match or lack of permissions. > sudo usbconfig -d 0.3 dump_device_desc ugen0.3: <USB Receiver Logitech> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (98mA) bLength = 0x0012 bDescriptorType = 0x0001 bcdUSB = 0x0200 bDeviceClass = 0x0000 bDeviceSubClass = 0x0000 bDeviceProtocol = 0x0000 bMaxPacketSize0 = 0x0008 idVendor = 0x046d idProduct = 0xc52b bcdDevice = 0x1201 iManufacturer = 0x0001 <Logitech> iProduct = 0x0002 <USB Receiver> iSerialNumber = 0x0000 <no string> bNumConfigurations = 0x0001 > usbconfig ugen0.1: <XHCI root HUB 0x8086> at usbus0, cfg=0 md=HOST spd=SUPER (5.0Gbps) pwr=SAVE (0mA) ugen1.1: <EHCI root HUB Intel> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA) ugen2.1: <EHCI root HUB Intel> at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA) ugen0.2: <USB2.0 Hub vendor 0x05e3> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (100mA) ugen1.2: <product 0x0024 vendor 0x8087> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA) ugen2.2: <product 0x0024 vendor 0x8087> at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (0mA) ugen0.4: <USB Keyboard vendor 0x04d9> at usbus0, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON (100mA) ugen1.3: <product 0x07da vendor 0x8087> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (0mA) ugen0.5: <PCTV 801e SE YUANRD> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA) ugen1.4: <USB2.0 HD UVC WebCam Chicony Electronics Co.,Ltd.> at usbus1, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA) ugen0.6: <My Passport 0820 Western Digital> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA) ugen0.3: <USB Receiver Logitech> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON (98mA) ugen0.7: <Mass Storage USB> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (200mA) It seems like that usbus is always correct.
The only explanation I see is that both "$port" and "$bus" are wrong. I'll try to look into it and/or ping usb@ for a solution in the next few days. Stay tuned for updates.
(In reply to Henry Hu from comment #7) > It seems like that usbus is always correct. Right, but $bus seems to be something unrelated. Interestingly, you can actually find the correct usbus like this: $ sysctl -n dev.uhid.0.%parent uhub0 $ sysctl -n dev.uhub.0.%parent usbus3 If no better solution will turn out, I'll use this.
Created attachment 147351 [details] xorg-server-1.12.4_2--3.hotplug.diff OK, try this patch.
I tried the latest patch, and it works well. I got vendor information in the Xorg.0.log, and when I unplug the keyboard, the internal keyboard still works.
A commit references this bug: Author: dumbbell Date: Fri Dec 19 23:04:16 UTC 2014 New revision: 374982 URL: https://svnweb.freebsd.org/changeset/ports/374982 Log: x11-servers/xorg-server: Update to 1.14 The X.Org server has been updated to 1.14. The changes it brings are described in a post on the Graphics team blog: http://blogs.freebsdish.org/graphics/2014/11/19/xserver-1-14-update-ready/ The most noticable change is the DEVD input device autodetection backend which is enabled by default, replacing the HAL backend. The keyboard layout configuration must be migrated from HAL's .fdi files to X.Org files. The procedure is explained in the post mentionned above. Several ports were removed with this update, mainly because they are not compatible with the X.Org server anymore: o nvidia-driver-71 o nvidia-driver-96 o xf86-input-egalax o xf86-video-newport o xf86-video-tga PR: 155696, 181660, 183478 (partially fixed), 188640, 191331 Differential Revision: https://reviews.freebsd.org/D1337 Submitted by: ak (most of the work on the DEVD backend), dumbbell, kwm, zeising Tested by: Many people on freebsd-x11@ and IRC Reviewed by: kwm, portmgr (antoine) Approved by: kwm, portmgr (antoine) Changes: head/MOVED head/Mk/bsd.xorg.mk head/UPDATING head/emulators/virtualbox-ose-additions/Makefile head/net/tigervnc/Makefile head/net/tigervnc/files/patch-unix_xserver114.patch head/x11/Makefile head/x11/nvidia-driver/distinfo head/x11/nvidia-driver-173/Makefile head/x11/nvidia-driver-71/ head/x11/nvidia-driver-96/ head/x11-drivers/Makefile head/x11-drivers/xf86-input-acecad/Makefile head/x11-drivers/xf86-input-acecad/pkg-plist head/x11-drivers/xf86-input-egalax/ head/x11-drivers/xf86-input-elographics/Makefile head/x11-drivers/xf86-input-elographics/distinfo head/x11-drivers/xf86-input-elographics/pkg-plist head/x11-drivers/xf86-input-fpit/Makefile head/x11-drivers/xf86-input-fpit/pkg-plist head/x11-drivers/xf86-input-hyperpen/Makefile head/x11-drivers/xf86-input-hyperpen/distinfo head/x11-drivers/xf86-input-hyperpen/files/extra-patch-src_xf86HyperPen.c head/x11-drivers/xf86-input-hyperpen/pkg-plist head/x11-drivers/xf86-input-joystick/Makefile head/x11-drivers/xf86-input-joystick/distinfo head/x11-drivers/xf86-input-joystick/pkg-plist head/x11-drivers/xf86-input-keyboard/Makefile head/x11-drivers/xf86-input-keyboard/pkg-plist head/x11-drivers/xf86-input-mouse/Makefile head/x11-drivers/xf86-input-mouse/pkg-plist head/x11-drivers/xf86-input-mutouch/Makefile head/x11-drivers/xf86-input-mutouch/pkg-plist head/x11-drivers/xf86-input-penmount/Makefile head/x11-drivers/xf86-input-penmount/distinfo head/x11-drivers/xf86-input-penmount/pkg-plist head/x11-drivers/xf86-input-synaptics/Makefile head/x11-drivers/xf86-input-synaptics/distinfo head/x11-drivers/xf86-input-synaptics/files/extra-Makefile.in head/x11-drivers/xf86-input-synaptics/pkg-plist head/x11-drivers/xf86-input-vmmouse/Makefile head/x11-drivers/xf86-input-vmmouse/pkg-plist head/x11-drivers/xf86-input-void/Makefile head/x11-drivers/xf86-input-void/distinfo head/x11-drivers/xf86-input-void/pkg-plist head/x11-drivers/xf86-input-wacom/Makefile head/x11-drivers/xf86-video-apm/Makefile head/x11-drivers/xf86-video-apm/files/ head/x11-drivers/xf86-video-apm/files/patch-src_apm.h head/x11-drivers/xf86-video-apm/pkg-plist head/x11-drivers/xf86-video-ark/Makefile head/x11-drivers/xf86-video-ark/files/ head/x11-drivers/xf86-video-ark/files/patch-src_ark__driver.c head/x11-drivers/xf86-video-ark/pkg-plist head/x11-drivers/xf86-video-ati/Makefile head/x11-drivers/xf86-video-ati-ums/Makefile head/x11-drivers/xf86-video-ati-ums/files/extra-src__radeon_kms.c head/x11-drivers/xf86-video-ati-ums/files/patch-configure head/x11-drivers/xf86-video-ati-ums/files/patch-configure.ac head/x11-drivers/xf86-video-ati-ums/files/patch-src__radeon_dri2.c head/x11-drivers/xf86-video-ati-ums/files/patch-src_radeon__driver.c head/x11-drivers/xf86-video-chips/Makefile head/x11-drivers/xf86-video-chips/files/patch-src_ct__driver.c head/x11-drivers/xf86-video-chips/pkg-plist head/x11-drivers/xf86-video-cirrus/Makefile head/x11-drivers/xf86-video-cirrus/pkg-plist head/x11-drivers/xf86-video-dummy/Makefile head/x11-drivers/xf86-video-dummy/pkg-plist head/x11-drivers/xf86-video-fbdev/Makefile head/x11-drivers/xf86-video-fbdev/pkg-plist head/x11-drivers/xf86-video-glint/Makefile head/x11-drivers/xf86-video-glint/files/ head/x11-drivers/xf86-video-glint/files/patch-src_glint__driver.c head/x11-drivers/xf86-video-glint/pkg-plist head/x11-drivers/xf86-video-i128/Makefile head/x11-drivers/xf86-video-i128/files/ head/x11-drivers/xf86-video-i128/files/patch-src_i128__driver.c head/x11-drivers/xf86-video-i128/pkg-plist head/x11-drivers/xf86-video-i740/Makefile head/x11-drivers/xf86-video-i740/files/ head/x11-drivers/xf86-video-i740/files/patch-src_i740__driver.c head/x11-drivers/xf86-video-i740/pkg-plist head/x11-drivers/xf86-video-intel/Makefile head/x11-drivers/xf86-video-mach64/Makefile head/x11-drivers/xf86-video-mach64/pkg-plist head/x11-drivers/xf86-video-mga/Makefile head/x11-drivers/xf86-video-mga/pkg-plist head/x11-drivers/xf86-video-neomagic/Makefile head/x11-drivers/xf86-video-neomagic/pkg-plist head/x11-drivers/xf86-video-newport/ head/x11-drivers/xf86-video-nv/Makefile head/x11-drivers/xf86-video-nv/files/patch-src-nv_driver.c head/x11-drivers/xf86-video-nv/files/patch-src_g80__driver.c head/x11-drivers/xf86-video-nv/files/patch-src_nv__include.h head/x11-drivers/xf86-video-nv/files/patch-src_riva__driver.c head/x11-drivers/xf86-video-nv/files/patch-src_riva__include.h head/x11-drivers/xf86-video-nv/pkg-plist head/x11-drivers/xf86-video-openchrome/Makefile head/x11-drivers/xf86-video-openchrome/pkg-plist head/x11-drivers/xf86-video-r128/Makefile head/x11-drivers/xf86-video-r128/pkg-plist head/x11-drivers/xf86-video-rendition/Makefile head/x11-drivers/xf86-video-rendition/files/ head/x11-drivers/xf86-video-rendition/files/patch-src_rendition.c head/x11-drivers/xf86-video-rendition/files/patch-src_rendition.h head/x11-drivers/xf86-video-rendition/pkg-plist head/x11-drivers/xf86-video-s3/Makefile head/x11-drivers/xf86-video-s3/files/ head/x11-drivers/xf86-video-s3/files/patch-src_s3__driver.c head/x11-drivers/xf86-video-s3/pkg-plist head/x11-drivers/xf86-video-s3virge/Makefile head/x11-drivers/xf86-video-s3virge/pkg-plist head/x11-drivers/xf86-video-savage/Makefile head/x11-drivers/xf86-video-savage/pkg-plist head/x11-drivers/xf86-video-scfb/Makefile head/x11-drivers/xf86-video-scfb/distinfo head/x11-drivers/xf86-video-scfb/files/ head/x11-drivers/xf86-video-scfb/files/patch-src_compat-api.h head/x11-drivers/xf86-video-scfb/files/patch-src_scfb__driver.c head/x11-drivers/xf86-video-scfb/pkg-plist head/x11-drivers/xf86-video-siliconmotion/Makefile head/x11-drivers/xf86-video-siliconmotion/files/ head/x11-drivers/xf86-video-siliconmotion/files/patch-src_smi__driver.c head/x11-drivers/xf86-video-siliconmotion/pkg-plist head/x11-drivers/xf86-video-sis/Makefile head/x11-drivers/xf86-video-sis/files/ head/x11-drivers/xf86-video-sis/files/patch-src_sis__driver.c head/x11-drivers/xf86-video-sis/pkg-plist head/x11-drivers/xf86-video-sunffb/Makefile head/x11-drivers/xf86-video-sunffb/pkg-plist head/x11-drivers/xf86-video-tdfx/Makefile head/x11-drivers/xf86-video-tdfx/files/ head/x11-drivers/xf86-video-tdfx/files/patch-src_tdfx__driver.c head/x11-drivers/xf86-video-tdfx/pkg-plist head/x11-drivers/xf86-video-tga/ head/x11-drivers/xf86-video-trident/Makefile head/x11-drivers/xf86-video-trident/files/ head/x11-drivers/xf86-video-trident/files/patch-src_trident__driver.c head/x11-drivers/xf86-video-trident/pkg-plist head/x11-drivers/xf86-video-tseng/Makefile head/x11-drivers/xf86-video-tseng/files/ head/x11-drivers/xf86-video-tseng/files/patch-src_tseng__driver.c head/x11-drivers/xf86-video-tseng/pkg-plist head/x11-drivers/xf86-video-vesa/Makefile head/x11-drivers/xf86-video-vesa/pkg-plist head/x11-drivers/xf86-video-vmware/Makefile head/x11-drivers/xf86-video-vmware/pkg-plist head/x11-drivers/xf86-video-voodoo/Makefile head/x11-drivers/xf86-video-voodoo/pkg-plist head/x11-drivers/xorg-drivers/Makefile head/x11-drivers/xorg-drivers/pkg-plist head/x11-servers/xorg-dmx/pkg-plist head/x11-servers/xorg-server/Makefile head/x11-servers/xorg-server/distinfo head/x11-servers/xorg-server/files/extra-Xext-xace.c head/x11-servers/xorg-server/files/extra-Xserver-hw-xfree86-common-xf86Config.c head/x11-servers/xorg-server/files/extra-Xserver-os-xprintf.c head/x11-servers/xorg-server/files/extra-arch-i386 head/x11-servers/xorg-server/files/extra-arch-powerpc head/x11-servers/xorg-server/files/extra-arch-sparc64 head/x11-servers/xorg-server/files/extra-clang head/x11-servers/xorg-server/files/extra-config_devd.c head/x11-servers/xorg-server/files/extra-configure head/x11-servers/xorg-server/files/extra-dix_events.c head/x11-servers/xorg-server/files/extra-include_eventstr.h head/x11-servers/xorg-server/files/extra-new-arch-i386 head/x11-servers/xorg-server/files/extra-new-arch-powerpc head/x11-servers/xorg-server/files/extra-new-arch-sparc64 head/x11-servers/xorg-server/files/extra-new-bad-impl head/x11-servers/xorg-server/files/extra-new-dix_dixfonts.c head/x11-servers/xorg-server/files/extra-old-arch-i386 head/x11-servers/xorg-server/files/extra-old-arch-powerpc head/x11-servers/xorg-server/files/extra-old-arch-sparc64 head/x11-servers/xorg-server/files/extra-old-dix_dixfonts.c head/x11-servers/xorg-server/files/extra-os-utils.c head/x11-servers/xorg-server/files/patch-CVE-2014-8092-3-4 head/x11-servers/xorg-server/files/patch-CVE-2014-8095 head/x11-servers/xorg-server/files/patch-CVE-2014-8098-7-8 head/x11-servers/xorg-server/files/patch-CVE-2014-8100-1-2 head/x11-servers/xorg-server/files/patch-Xserver-hw-xfree86-os-support-bsd-i386_video.c head/x11-servers/xorg-server/files/patch-config_config-backends.h head/x11-servers/xorg-server/files/patch-config_config.c head/x11-servers/xorg-server/files/patch-config_devd.c head/x11-servers/xorg-server/files/patch-hw_xfree86_common_xf86Config.c head/x11-servers/xorg-server/files/patch-hw_xfree86_common_xf86Globals.c head/x11-servers/xorg-server/files/patch-hw_xfree86_loader_loadmod.c head/x11-servers/xorg-server/files/patch-hw_xfree86_modes_xf86Crtc.c head/x11-servers/xorg-server/files/patch-xkb_Makefile.in head/x11-servers/xorg-server/files/patch-xorgconf.cpp head/x11-servers/xorg-server/pkg-plist
Several problems were fixed in r374982. The parsing of the USB ID or vendor/product are still missing or broken.
Hi, Can you have a look here: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=196678 --HPS
patch-config_devd.c is in the port. This is surely overcome by events and surely solved.
4) the backend always sets 'usb_id' attribute to NULL, thus preventing 'MatchUSBID' directive in xorg.conf from working 5) the backend incorrectly parses vendor and product name, thus making 'MatchVendor' and 'MatchProduct' directives hard to use These points are still not addressed.
(In reply to Alex Kozlov from comment #16) Can these issues be tracked in a separate PR? Since you wrote some of the DEVD backend, can you help in fixing this?
It was mostly FYI post. I think it's alright to close this pr unless OP object. The 4 point is quite hard to fix, you need libusb and quite complex string parser. The 5 is easier, I'd even partially fixed it along with 196678 in my last patchset. Unfortunately, it's perished in the review limbo.
OP certainly would have objected to closing PRs without fixing the problems, but in this case the remaining two issues -- items 4 and 5 -- should be fixed by the patch from 196678, so it would best for everyone if that patch would be committed instead. I'm actually very surprised 196678 is not yet committed. The last time I looked at it, I was almost sure the Xorg team will take it in a few months, but 3 years later, and it's still up...