Bug 46491 - Modifier keys don't function correctly using Zowie Celeritas keyboard
Summary: Modifier keys don't function correctly using Zowie Celeritas keyboard
Status: NEW
Alias: None
Product: Drivers
Classification: Unclassified
Component: Input Devices (show other bugs)
Hardware: All Linux
: P1 normal
Assignee: drivers_input-devices
URL:
Keywords:
: 51371 (view as bug list)
Depends on:
Blocks:
 
Reported: 2012-08-28 08:08 UTC by Joe Littlejohn
Modified: 2014-10-14 01:09 UTC (History)
3 users (show)

See Also:
Kernel Version: 3.5.0-7-generic
Subsystem:
Regression: No
Bisected commit-id:


Attachments
Output captured from udevadm monitor -e --udev when plugging in the keyboard (6.40 KB, text/plain)
2012-08-28 08:08 UTC, Joe Littlejohn
Details

Description Joe Littlejohn 2012-08-28 08:08:51 UTC
Created attachment 78631 [details]
Output captured from udevadm monitor -e --udev when plugging in the keyboard

The modifier keys ALT, SHIFT, CTRL (both left and right) don't function correctly when held down. When held they appear to register a single tap, and when another key is pressed in conjunction with the modifier key, a further tap of the modifier key appears to be registered.

Output from lsusb:

Bus 008 Device 002: ID 2345:0101  

Output from /lib/udev/keymap -i input/event10:

Press ESC to finish, or Control-C if this device is not your primary keyboard
driver did not send SYN event in between key events; previous event:
scan code: 0x700E1   key code: leftshift
driver did not send SYN event in between key events; previous event:
scan code: 0x700E0   key code: leftctrl
driver did not send SYN event in between key events; previous event:
scan code: 0x700E2   key code: leftalt
driver did not send SYN event in between key events; previous event:
scan code: 0x700E4   key code: rightctrl
driver did not send SYN event in between key events; previous event:
scan code: 0x700E5   key code: rightshift
driver did not send SYN event in between key events; previous event:
scan code: 0x700E6   key code: rightalt
driver did not send SYN event in between key events; previous event:
scan code: 0x700E2   key code: leftalt
driver did not send SYN event in between key events; previous event:
scan code: 0x7001E   key code: 1
driver did not send SYN event in between key events; previous event:
scan code: 0x700E2   key code: leftalt
driver did not send SYN event in between key events; previous event:

(The last few key presses there were: hold leftalt, tap 1, release leftalt)

Note: This only affects USB. Modifier keys function correctly when using the device with a USB -> PS/2 adapter.
Comment 1 Alan 2013-11-19 18:23:10 UTC
*** Bug 51371 has been marked as a duplicate of this bug. ***
Comment 2 Prier 2014-09-08 13:53:36 UTC
Actually it is possible to fix this with some small hacks. 

I am typing on a Zowie Celeritas on Ubuntu 14.04 (Through USB):

The keyboard will work with the older usbkbd driver. First modify 

/etc/modprobe.d/blacklist.conf

so that usbkbd is commented, like this:

# these drivers are very simple, the HID drivers are usually preferred
#blacklist usbmouse
#blacklist usbkbd
#blacklist usbhid

Notice that the usbhid module is also loaded, this means that the usbhid will overwrite the usbkbd as usbhid is the default. However it is possible to add a so called quirk parameter to the usbhid module telling it to ignore the zowie celeritas keyboard. This is done as follows:

First run:
sudo gedit /etc/default/grub

Then find GRUB_CMDLINE_LINUX_DEFAULT and add usbhid.quirks=0x2345:0x0101:0x4
The 0x2345:0x0101 is the product and vendor id of the zowie celeritas and the 0x4 parameter is telling it to ignore. The entry in /etc/default/grub should look like the following:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbhid.quirks=0x2345:0x0101:0x4"

sudo reboot, and ...

AdAD2k3ZZ>zzZ&*(@(#)(@#*@(*$)_@#($@_!}|" <----- It works :)
Comment 3 Prier 2014-09-08 13:58:45 UTC
(In reply to Prier from comment #2)
> Actually it is possible to fix this with some small hacks. 
> 
> I am typing on a Zowie Celeritas on Ubuntu 14.04 (Through USB):
> 
> The keyboard will work with the older usbkbd driver. First modify 
> 
> /etc/modprobe.d/blacklist.conf
> 
> so that usbkbd is commented, like this:
> 
> # these drivers are very simple, the HID drivers are usually preferred
> #blacklist usbmouse
> #blacklist usbkbd
> #blacklist usbhid
> 
> Notice that the usbhid module is also loaded, this means that the usbhid
> will overwrite the usbkbd as usbhid is the default. However it is possible
> to add a so called quirk parameter to the usbhid module telling it to ignore
> the zowie celeritas keyboard. This is done as follows:
> 
> First run:
> sudo gedit /etc/default/grub
> 
> Then find GRUB_CMDLINE_LINUX_DEFAULT and add usbhid.quirks=0x2345:0x0101:0x4
> The 0x2345:0x0101 is the product and vendor id of the zowie celeritas and
> the 0x4 parameter is telling it to ignore. The entry in /etc/default/grub
> should look like the following:
> 
> GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbhid.quirks=0x2345:0x0101:0x4"
> 
> sudo reboot, and ...
> 
> AdAD2k3ZZ>zzZ&*(@(#)(@#*@(*$)_@#($@_!}|" <----- It works :)

Oh and remember to run sudo update-grub, after editing /etc/default/grub :)
Comment 4 Joe Littlejohn 2014-09-08 15:41:20 UTC
Thank you Prier, this worked like a charm!

I don't know what this means for this bug report. Does this indicate that it's a distro config problem rather than a kernel module problem?
Comment 5 Dmitry Torokhov 2014-10-14 01:09:37 UTC
No, it is a driver problem, the keyboard should be handled by usbhid. I'd post on linux-input mailing list. I think i saw a similar problem reported recently there.

Note You need to log in before you can comment on or make changes to this bug.