Date: Mon, 03 Feb 2014 14:37:29 +0000 From: Robert Millan <rmh@freebsd.org> To: Baptiste Daroussin <bapt@FreeBSD.org> Cc: freebsd-x11@freebsd.org Subject: [PATCH] do not feed keyboard device path in X devd backend Message-ID: <52EFA9A9.2040901@freebsd.org>
next in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
When feeding the keyboard device path (e.g. /dev/ukbd0) to X server,
it will attempt to open it. This is incorrect because X doesn't want
_all_ the input from keyboard but rather just the one typed in its
VT (usually /dev/ttyv7).
Plus, attempting to open /dev/ukbd0 usually fails with EBUSY as the
keyboard is already being used by syscons.
This patch adjusts devd.c to follow the same approach as HAL: detect
the keyboard but feed it a zero-length device path. The result is
that X detects the presence of a keyboard, and therefore loads the
kbd_drv module, but doesn't attempt to open it directly (which is
unnecessary since /dev/ttyv7 is already open).
--
Robert Millan
[-- Attachment #2 --]
=== modified file 'devd.c'
--- devd.c 2014-02-03 14:28:22 +0000
+++ devd.c 2014-02-03 14:28:02 +0000
@@ -224,7 +224,15 @@ device_added(char *line)
return;
}
#endif
- if (asprintf(&path, "/dev/%s", line) == -1)
+
+ if (attrs.flags & ATTR_KEYBOARD)
+ /* For keyboards, we don't want to open the actual device, because
+ we only need input from the VT that X is running on (see
+ xf86OpenConsole() in bsd_init.c). However, we still want
+ kbd_drv to be loaded, so rather than skipping keyboards we
+ register them with a zero-length device path. */
+ path = xstrdup("");
+ else if (asprintf(&path, "/dev/%s", line) == -1)
return;
#if XORG_VERSION_CURRENT < 10800000
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?52EFA9A9.2040901>
