ports/131124: x11/xorg - New xorg 7.4 hangs until mouse is
moved when AllowEmptyInput turned off
Jung-uk Kim
jkim at FreeBSD.org
Thu Feb 5 11:00:05 PST 2009
The following reply was made to PR ports/131124; it has been noted by GNATS.
From: Jung-uk Kim <jkim at FreeBSD.org>
To: freebsd-x11 at FreeBSD.org,
Serge Shilov <serguei.shilov at gmail.com>,
Peter Zehm <Peter.Zehm at crush-net.de>
Cc: bug-followup at freebsd.org,
freebsd-gnome at FreeBSD.org,
marcus at FreeBSD.org,
rnoland at FreeBSD.org
Subject: Re: ports/131124: x11/xorg - New xorg 7.4 hangs until mouse is moved when AllowEmptyInput turned off
Date: Thu, 5 Feb 2009 13:52:05 -0500
[Sorry for spamming y'all but I thought it is very important that
everyone understands the situation clearly.]
On Thursday 05 February 2009 11:50 am, Serge Shilov wrote:
> The following reply was made to PR ports/131124; it has been noted
> by GNATS.
>
> From: Serge Shilov <serguei.shilov at gmail.com>
> To: bug-followup at freebsd.org,
> xelah-freebsd-pr at xelah.com
> Cc:
> Subject: Re: ports/131124: x11/xorg - New xorg 7.4 hangs until
> mouse is moved when AllowEmptyInput turned off Date: Thu, 5 Feb
> 2009 19:40:29 +0300
>
> I perform some experiments. Results is here.
>
> I. Test other mice .
> The 1st is
> ums0: <A4Tech RF USB Mouse, class 0/0, rev 1.10/0.01, addr 2> on
> uhub0 ums0: 8 buttons and Z dir.
>
> and the 2nd is
> ums0: <Logitech Optical USB Mouse, class 0/0, rev 2.00/3.40, addr
> 2> on uhub0 ums0: 3 buttons and Z dir.
>
> Bug still exist
>
> II. Test direct connection mouse without hub.
>
> Bug still exist.
>
> Resume: It's not mice or hub or connection-via-hub problem. (But
> it may be some usb host problem)
>
> III. Hot plug out and plug in mouse in X environment
>
> After plug in mouse gehaviour BEGAN CONVENTIONAL. This can be
> recommended as workaround.
>
> Notice:
> 1. After plug out mouse cursor may still disappeared. In this case
> you can switch to VT0-VT7 terminals, move mouse and switch back to
> X session. 2. This advice is provided 'as is' without any
> warranties of usefulness, capacity to work with your hardware or
> software and other sorts of warranties.
>
> IV. After hot X session restart (without OS and hardware restart)
> mouse still work.
>
> V. Other cases:
> Hot plug out and plug in mouse in text mode environment before
> start X session.
> Start OS mouseless and plug in mouse before or after start X
> session. Hot OS restart after my workaround appliing.
>
> In all this cases mouse behaviour was still buggy.
>
> I'll be glad if my info help to resolve this problem.
A short answer:
Please remove "AllowEmptyInput" from your xorg.conf.
A longer answer:
http://docs.freebsd.org/cgi/mid.cgi?200902041908.50270.jkim
A technical answer:
Some devices are safe to be opened multiple times and shared by
different input drivers (e.g., Linux evdev, I think) and some devices
are not (e.g., our sysmouse).
Possible solutions (for ports maintainers):
- When hald probes mice, exclude all moused users
(e.g., /dev/psm0, /dev/ums1, ...) from x11_driver and create a pseudo
device UDI for /dev/sysmouse and set x11_driver property if moused(8)
is running and /dev/sysmouse is not being used by Xserver. If
Xserver tries to open /dev/sysmouse, then the UDI has to be removed
immediately. When Xserver closes /dev/sysmouse, the fake UDI has to
be restored immediately.
- Before Xserver starts auto-adding process, send a hint message to
hald that the device is configured and enabled by static user
configuration if CONFIG_HAL is defined and "AutoAddDevices" or
"AutoEnableDevices" is on. hald (i.e., FreeBSD mouse prober)
excludes all sysmouse users from x11_driver and sends ACK/NACK
message. Then, Xserver continues/stops auto-adding process depending
on it.
- Implement an ioctl command for sysmouse to report actual devices
that it is controlling. Let each input driver veto automagic
configuration process if it is being used or unsafe.
- Some combinations of the above...
The first solution is the least intrusive but it is not bulletproof
because of an unavoidable race condition. The second solution is
IMHO, a correct way but it requires Xserver change first. The third
solution is too platform-specific and it requires significant (and
ugly) hacks for Xserver and input drivers, I think.
Any more ideas?
Jung-uk Kim
More information about the freebsd-x11
mailing list