[xserver] kdrive: Grab evdev mouse/keyboard devices when X server is active

Peter Hutterer peter.hutterer at who-t.net
Wed Oct 28 17:30:55 PDT 2009


On Thu, Oct 29, 2009 at 12:40:48AM +0600, Mikhail Gusarov wrote:
> Input events are directed to both vt and input devices by default.
> Unless input devices are grabbed, keyboard events fill it vt buffers
> and cause spontaneous wakeups in kernel tty layer when buffers are full.
> 
> Signed-off-by: Mikhail Gusarov <dottedmag at dottedmag.net>
> ---
>  hw/kdrive/linux/evdev.c |   15 ++++++++++++++-
>  1 files changed, 14 insertions(+), 1 deletions(-)
> 
> diff --git a/hw/kdrive/linux/evdev.c b/hw/kdrive/linux/evdev.c
> index f6017ba..096a2dd 100644
> --- a/hw/kdrive/linux/evdev.c
> +++ b/hw/kdrive/linux/evdev.c
> @@ -243,7 +243,9 @@ EvdevPtrEnable (KdPointerInfo *pi)
>      if (fd < 0)
>          return BadMatch;
>  
> -        
> +    if (ioctl (fd, EVIOCGRAB, 1) < 0)
> +        perror ("Grabbing evdev mouse device failed");
> +
>      if (ioctl (fd, EVIOCGBIT(0 /*EV*/, sizeof (ev)), ev) < 0)
>      {
>          perror ("EVIOCGBIT 0");
> @@ -335,6 +337,10 @@ EvdevPtrDisable (KdPointerInfo *pi)
>          return;
>  
>      KdUnregisterFd (pi, ke->fd, TRUE);
> +
> +    if (ioctl (ke->fd, EVIOCGRAB, 0) < 0)
> +        perror ("Ungrabbing evdev mouse device failed");
> +
>      xfree (ke);
>      pi->driverPrivate = 0;
>  }
> @@ -425,6 +431,9 @@ EvdevKbdEnable (KdKeyboardInfo *ki)
>      if (fd < 0)
>          return BadMatch;
>  
> +    if (ioctl (fd, EVIOCGRAB, 1) < 0)
> +        perror ("Grabbing evdev keyboard device failed");
> +
>      if (ioctl (fd, EVIOCGBIT(0 /*EV*/, sizeof (ev)), ev) < 0) {
>          perror ("EVIOCGBIT 0");
>          close (fd);
> @@ -496,6 +505,10 @@ EvdevKbdDisable (KdKeyboardInfo *ki)
>          return;
>  
>      KdUnregisterFd (ki, ke->fd, TRUE);
> +
> +    if (ioctl (ke->fd, EVIOCGRAB, 0) < 0)
> +        perror ("Ungrabbing evdev keyboard device failed");
> +
>      xfree (ke);
>      ki->driverPrivate = 0;
>  }
> -- 
> 1.6.5

Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

Cheers,
  Peter


More information about the xorg-devel mailing list