Subject: xsrc/29591: pure wskbd devices (without console emulation) do not work with X
To: None <xsrc-manager@netbsd.org, gnats-admin@netbsd.org,>
From: Matthias Pfaller <leo@dachau.marco.de>
List: netbsd-bugs
Date: 03/04/2005 09:55:00
>Number: 29591
>Category: xsrc
>Synopsis: pure wskbd devices do not work with x
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: xsrc-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Fri Mar 04 09:55:00 +0000 2005
>Originator: Matthias Pfaller
>Release: NetBSD 2.99.14
>Organization:
Matthias Pfaller Software Entwicklung
marco Systemanalyse und Entwicklung GmbH Tel +49 8131 5161-41
Hans-B=F6ckler-Str. 2, D 85221 Dachau Fax +49 8131 5161-66
http://www.marco.de/ Email leo@dachau.marco.de
>Environment:
<The following information is extracted from your kernel. Please>
<append output of "ldd", "ident" where relevant (multiple lines).>
System: NetBSD joghurt 2.99.14 NetBSD 2.99.14 (SIN) #24: Mon Jan 17 10:21:1=
7 CET 2005 leo@joghurt:/usr/src/sys/arch/i386/compile/SIN i386
Architecture: i386
Machine: i386
>Description:
when using a wskbd for X without any emulation active (i.e. for a
second display), USB and PS/2 keyboards return "strange" keycodes.
>How-To-Repeat:
Put a second VGA card into your machine, connect a keyboard to the
mouse port or to USB and run a second X Server.
>Fix:
This patch removes some code from xf86Events.c (necessary for USB-Keyboards=
)=20
and adds a wskbd translation map for PC/XT keyboards.
Index: xf86Events.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvsroot/xsrc/xfree/xc/programs/Xserver/hw/xfree86/common/xf86Eve=
nts.c,v
retrieving revision 1.4
diff -u -u -r1.4 xf86Events.c
--- xf86Events.c 5 Mar 2004 16:33:03 -0000 1.4
+++ xf86Events.c 3 Mar 2005 14:22:21 -0000
@@ -543,6 +543,7 @@
}
} else
#endif /* i386 && SVR4 */
+#if 0
{
switch (scanCode) {
case 0x59: scanCode =3D KEY_0x59; break;
@@ -575,6 +576,7 @@
case 0x76: scanCode =3D KEY_0x76; break;
}
}
+#endif
}
=20
else if (
@@ -1631,7 +1633,7 @@
int value =3D event->value;
unsigned int keycode;
int blocked;
- =20
+
if (type =3D=3D WSCONS_EVENT_KEY_UP || type =3D=3D WSCONS_EVENT_KEY_DOWN=
) {
Bool down =3D (type =3D=3D WSCONS_EVENT_KEY_DOWN ? TRUE : FALSE);
=20
Index: xf86KbdBSD.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvsroot/xsrc/xfree/xc/programs/Xserver/hw/xfree86/common/xf86Kbd=
BSD.c,v
retrieving revision 1.7
diff -u -u -r1.7 xf86KbdBSD.c
--- xf86KbdBSD.c 11 Nov 2004 19:16:33 -0000 1.7
+++ xf86KbdBSD.c 3 Mar 2005 14:22:21 -0000
@@ -871,11 +871,238 @@
/* 228 */ KEY_RCtrl, /* Right Control */
/* 229 */ KEY_ShiftR, /* Right Shift */
/* 230 */ KEY_AltLang, /* Right Alt, AKA AltGr */
- /* 231 */ KEY_LMeta, /* Right Meta XXX */
+ /* 231 */ KEY_RMeta, /* Right Meta */
};
=20
#define WS_USB_MAP_SIZE (sizeof(wsUsbMap)/sizeof(unsigned char))
=20
+static CARD8 wsATXTMap[] =3D {
+ /* 0 */ KEY_NOTUSED,
+ /* 1 */ KEY_Escape, /* Escape */
+ /* 2 */ KEY_1, /* 1 ! */
+ /* 3 */ KEY_2, /* 2 @ */
+ /* 4 */ KEY_3, /* 3 # */
+ /* 5 */ KEY_4, /* 4 $ */
+ /* 6 */ KEY_5, /* 5 % */
+ /* 7 */ KEY_6, /* 6 ^ */
+ /* 8 */ KEY_7, /* 7 & */
+ /* 9 */ KEY_8, /* 8 * */
+ /* 10 */ KEY_9, /* 9 ( */
+ /* 11 */ KEY_0, /* 0 ) */
+ /* 12 */ KEY_Minus, /* - _ */
+ /* 13 */ KEY_Equal, /* =3D + */
+ /* 14 */ KEY_BackSpace, /* Backspace Delete */
+ /* 15 */ KEY_Tab, /* Tab */
+ /* 16 */ KEY_Q,
+ /* 17 */ KEY_W,
+ /* 18 */ KEY_E,
+ /* 19 */ KEY_R,
+ /* 20 */ KEY_T,
+ /* 21 */ KEY_Y,
+ /* 22 */ KEY_U,
+ /* 23 */ KEY_I,
+ /* 24 */ KEY_O,
+ /* 25 */ KEY_P,
+ /* 26 */ KEY_LBrace, /* [ { */
+ /* 27 */ KEY_RBrace, /* ] } */
+ /* 28 */ KEY_Enter, /* Return */
+ /* 29 */ KEY_LCtrl, /* Left Control */
+ /* 30 */ KEY_A,
+ /* 31 */ KEY_S,
+ /* 32 */ KEY_D,
+ /* 33 */ KEY_F,
+ /* 34 */ KEY_G,
+ /* 35 */ KEY_H,
+ /* 36 */ KEY_J,
+ /* 37 */ KEY_K,
+ /* 38 */ KEY_L,
+ /* 39 */ KEY_SemiColon, /* ; : */
+ /* 40 */ KEY_Quote, /* ' " */
+ /* 41 */ KEY_Tilde, /* ` ~ */
+ /* 42 */ KEY_ShiftL, /* Left Shift */
+ /* 43 */ KEY_BSlash, /* \ | */
+ /* 44 */ KEY_Z,
+ /* 45 */ KEY_X,
+ /* 46 */ KEY_C,
+ /* 47 */ KEY_V,
+ /* 48 */ KEY_B,
+ /* 49 */ KEY_N,
+ /* 50 */ KEY_M,
+ /* 51 */ KEY_Comma, /* , < */
+ /* 52 */ KEY_Period, /* . > */
+ /* 53 */ KEY_Slash, /* / ? */
+ /* 54 */ KEY_ShiftR, /* Right Shift */
+ /* 55 */ KEY_KP_Multiply, /* Keypad * */
+ /* 56 */ KEY_Alt, /* Left Alt */
+ /* 57 */ KEY_Space, /* Space */
+ /* 58 */ KEY_CapsLock, /* Caps Lock */
+ /* 59 */ KEY_F1, /* F1 */
+ /* 60 */ KEY_F2, /* F2 */
+ /* 61 */ KEY_F3, /* F3 */
+ /* 62 */ KEY_F4, /* F4 */
+ /* 63 */ KEY_F5, /* F5 */
+ /* 64 */ KEY_F6, /* F6 */
+ /* 65 */ KEY_F7, /* F7 */
+ /* 66 */ KEY_F8, /* F8 */
+ /* 67 */ KEY_F9, /* F9 */
+ /* 68 */ KEY_F10, /* F10 */
+ /* 69 */ KEY_NumLock, /* Num Lock */
+ /* 70 */ KEY_ScrollLock,/* Scroll Lock */
+ /* 71 */ KEY_KP_7, /* Keypad 7 Home */
+ /* 72 */ KEY_KP_8, /* Keypad 8 Up */
+ /* 73 */ KEY_KP_9, /* KEypad 9 Pg Up */
+ /* 74 */ KEY_KP_Minus, /* Keypad - */
+ /* 75 */ KEY_KP_4, /* Keypad 4 Left */
+ /* 76 */ KEY_KP_5, /* Keypad 5 */
+ /* 77 */ KEY_KP_6, /* Keypad 6 */
+ /* 78 */ KEY_KP_Plus, /* Keypad + */
+ /* 79 */ KEY_KP_1, /* Keypad 1 End */
+ /* 80 */ KEY_KP_2, /* Keypad 2 Down */
+ /* 81 */ KEY_KP_3, /* Keypad 3 Pg Down */
+ /* 82 */ KEY_KP_0, /* Keypad 0 Ins */
+ /* 83 */ KEY_KP_Decimal,/* Keypad . Del */
+ /* 84 */ KEY_NOTUSED,
+ /* 85 */ KEY_NOTUSED,
+ /* 86 */ KEY_Less, /* < > on some keyboards */
+ /* 87 */ KEY_F11, /* F11 */
+ /* 88 */ KEY_F12, /* F12 */
+ /* 89 */ KEY_NOTUSED,
+ /* 90 */ KEY_NOTUSED,
+ /* 91 */ KEY_NOTUSED,
+ /* 92 */ KEY_NOTUSED,
+ /* 93 */ KEY_NOTUSED,
+ /* 94 */ KEY_NOTUSED,
+ /* 95 */ KEY_NOTUSED,
+ /* 96 */ KEY_NOTUSED,
+ /* 97 */ KEY_NOTUSED,
+ /* 98 */ KEY_NOTUSED,
+ /* 99 */ KEY_NOTUSED,
+ /* 100 */ KEY_NOTUSED,
+ /* 101 */ KEY_NOTUSED,
+ /* 102 */ KEY_NOTUSED,
+ /* 103 */ KEY_NOTUSED,
+ /* 104 */ KEY_NOTUSED,
+ /* 105 */ KEY_NOTUSED,
+ /* 106 */ KEY_NOTUSED,
+ /* 107 */ KEY_NOTUSED,
+ /* 108 */ KEY_NOTUSED,
+ /* 109 */ KEY_NOTUSED,
+ /* 110 */ KEY_NOTUSED,
+ /* 111 */ KEY_NOTUSED,
+ /* 112 */ KEY_NOTUSED,
+ /* 113 */ KEY_NOTUSED,
+ /* 114 */ KEY_NOTUSED,
+ /* 115 */ KEY_NOTUSED,
+ /* 116 */ KEY_NOTUSED,
+ /* 117 */ KEY_NOTUSED,
+ /* 118 */ KEY_NOTUSED,
+ /* 119 */ KEY_NOTUSED,
+ /* 120 */ KEY_NOTUSED,
+ /* 121 */ KEY_NOTUSED,
+ /* 122 */ KEY_NOTUSED,
+ /* 123 */ KEY_NOTUSED,
+ /* 124 */ KEY_NOTUSED,
+ /* 125 */ KEY_NOTUSED,
+ /* 126 */ KEY_NOTUSED,
+ /* 127 */ KEY_Pause, /* Pause Break */
+ /* 128 */ KEY_NOTUSED,
+ /* 129 */ KEY_NOTUSED,
+ /* 130 */ KEY_NOTUSED,
+ /* 131 */ KEY_NOTUSED,
+ /* 132 */ KEY_NOTUSED,
+ /* 133 */ KEY_NOTUSED,
+ /* 134 */ KEY_NOTUSED,
+ /* 135 */ KEY_NOTUSED,
+ /* 136 */ KEY_NOTUSED,
+ /* 137 */ KEY_NOTUSED,
+ /* 138 */ KEY_NOTUSED,
+ /* 139 */ KEY_NOTUSED,
+ /* 140 */ KEY_NOTUSED,
+ /* 141 */ KEY_NOTUSED,
+ /* 142 */ KEY_NOTUSED,
+ /* 143 */ KEY_NOTUSED,
+ /* 144 */ KEY_NOTUSED,
+ /* 145 */ KEY_NOTUSED,
+ /* 146 */ KEY_NOTUSED,
+ /* 147 */ KEY_NOTUSED,
+ /* 148 */ KEY_NOTUSED,
+ /* 149 */ KEY_NOTUSED,
+ /* 150 */ KEY_NOTUSED,
+ /* 151 */ KEY_NOTUSED,
+ /* 152 */ KEY_NOTUSED,
+ /* 153 */ KEY_NOTUSED,
+ /* 154 */ KEY_NOTUSED,
+ /* 155 */ KEY_NOTUSED,
+ /* 156 */ KEY_KP_Enter, /* Keypad Enter */
+ /* 157 */ KEY_RCtrl, /* Right Control */
+ /* 158 */ KEY_NOTUSED,
+ /* 159 */ KEY_NOTUSED,
+ /* 160 */ KEY_NOTUSED,
+ /* 161 */ KEY_NOTUSED,
+ /* 162 */ KEY_NOTUSED,
+ /* 163 */ KEY_NOTUSED,
+ /* 164 */ KEY_NOTUSED,
+ /* 165 */ KEY_NOTUSED,
+ /* 166 */ KEY_NOTUSED,
+ /* 167 */ KEY_NOTUSED,
+ /* 168 */ KEY_NOTUSED,
+ /* 169 */ KEY_NOTUSED,
+ /* 170 */ KEY_Print, /* PrintScrn SysReq */
+ /* 171 */ KEY_NOTUSED,
+ /* 172 */ KEY_NOTUSED,
+ /* 173 */ KEY_NOTUSED,
+ /* 174 */ KEY_NOTUSED,
+ /* 175 */ KEY_NOTUSED,
+ /* 176 */ KEY_NOTUSED,
+ /* 177 */ KEY_NOTUSED,
+ /* 178 */ KEY_NOTUSED,
+ /* 179 */ KEY_NOTUSED,
+ /* 180 */ KEY_NOTUSED,
+ /* 181 */ KEY_KP_Divide, /* Keypad / */
+ /* 182 */ KEY_NOTUSED,
+ /* 183 */ KEY_Print, /* PrintScrn SysReq */
+ /* 184 */ KEY_AltLang, /* Right Alt, AKA AltGr */
+ /* 185 */ KEY_NOTUSED,
+ /* 186 */ KEY_NOTUSED,
+ /* 187 */ KEY_NOTUSED,
+ /* 188 */ KEY_NOTUSED,
+ /* 189 */ KEY_NOTUSED,
+ /* 190 */ KEY_NOTUSED,
+ /* 191 */ KEY_NOTUSED,
+ /* 192 */ KEY_NOTUSED,
+ /* 193 */ KEY_NOTUSED,
+ /* 194 */ KEY_NOTUSED,
+ /* 195 */ KEY_NOTUSED,
+ /* 196 */ KEY_NOTUSED,
+ /* 197 */ KEY_NOTUSED,
+ /* 198 */ KEY_NOTUSED,
+ /* 199 */ KEY_Home, /* Home */
+ /* 200 */ KEY_Up, /* Up Arrow */
+ /* 201 */ KEY_PgUp, /* Page Up */
+ /* 202 */ KEY_NOTUSED,
+ /* 203 */ KEY_Left, /* Left Arrow */
+ /* 204 */ KEY_NOTUSED,
+ /* 205 */ KEY_Right, /* Right Arrow */
+ /* 206 */ KEY_NOTUSED,
+ /* 207 */ KEY_End, /* End */
+ /* 208 */ KEY_Down, /* Down Arrow */
+ /* 209 */ KEY_PgDown, /* Page Down */
+ /* 210 */ KEY_Insert, /* Insert XXX Help on some Mac Keyboards */
+ /* 211 */ KEY_Delete, /* Delete */
+ /* 212 */ KEY_NOTUSED,
+ /* 213 */ KEY_NOTUSED,
+ /* 214 */ KEY_NOTUSED,
+ /* 215 */ KEY_NOTUSED,
+ /* 216 */ KEY_NOTUSED,
+ /* 217 */ KEY_NOTUSED,
+ /* 218 */ KEY_NOTUSED,
+ /* 219 */ KEY_LMeta, /* Left Meta */
+ /* 220 */ KEY_RMeta, /* Right Meta */
+ /* 221 */ KEY_Menu, /* Menu */
+};
+
+#define WS_ATXT_MAP_SIZE (sizeof(wsUsbMap)/sizeof(unsigned char))
+
/* Map for adb keyboards */
static CARD8 wsAdbMap[] =3D {
/* 0 */ KEY_A,
@@ -1249,8 +1476,10 @@
switch (xf86Info.wsKbdType) {
case WSKBD_TYPE_PC_XT:
case WSKBD_TYPE_PC_AT:
- /* No translation needed */
- return keycode;
+ if (keycode < 0 || keycode >=3D WS_ATXT_MAP_SIZE)=20
+ return KEY_UNKNOWN;
+ else=20
+ return wsATXTMap[keycode];
case WSKBD_TYPE_USB:
if (keycode < 0 || keycode >=3D WS_USB_MAP_SIZE)=20
return KEY_UNKNOWN;
>Unformatted:
xsrc 20050303
<Please check that the above is correct for the bug being reported,>
<and append source date of snapshot, if applicable (one line).>