Ubuntu – Many USB Multimedia Keyboard issues in Ubuntu 13.10

keyboardusb

This same keyboard worked fine all the time in Ubuntu 12.04 (though on a different laptop). I now have 13.10 installed on a new laptop and I'm getting a few annoying problems with my external USB keyboard, specifically the multimedia functions.

Problem 1:

The "calculator" or "www/internet" buttons do nothing. If I go to the Shortcuts control panel and try to bind "Launch Calculator" to a new accelerator, pressing the Calculator button does not register at all. It's just not detecting that I pressed it.

Problem 2:

The volume up and volume down keys work a little bit — however once I tap them once or twice, it infinitely keeps pressing the key forever, forcing the volume either to maximum or silent. I have to unplug the USB cable and plug it back in to stop it.

I imagine this has something to do with evdev but I have no idea how to fix it. I have tried troubleshooting using the steps at https://wiki.ubuntu.com/Hotkeys/Troubleshooting but when I run sudo evtest I get nothing when I press the multimedia keys (regular keys give feedback).

Note: my laptop has a built-in keyboard with volume controls, and they work normally as expected.

Output of lsusb:

Bus 002 Device 002: ID 8087:8000 Intel Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 005: ID 8087:07da Intel Corp. 
Bus 003 Device 008: ID 1e54:2030 TypeMatrix 2030 USB Keyboard
Bus 003 Device 006: ID 059f:0828 LaCie, Ltd 
Bus 003 Device 004: ID 1a40:0201 Terminus Technology Inc. FE 2.1 7-port Hub
Bus 003 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 003 Device 002: ID 174f:1474 Syntek 
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Output of lsmod:

Module                  Size  Used by
bbswitch               13943  0 
parport_pc             32701  0 
ppdev                  17671  0 
rfcomm                 69070  12 
bnep                   19564  2 
snd_hda_codec_realtek    55704  1 
snd_hda_codec_hdmi     41117  1 
binfmt_misc            17468  1 
hid_generic            12548  0 
usb_storage            62062  1 
joydev                 17377  0 
uvcvideo               80885  0 
videobuf2_vmalloc      13216  1 uvcvideo
videobuf2_memops       13362  1 videobuf2_vmalloc
hid_logitech_dj        18581  0 
videobuf2_core         40469  1 uvcvideo
videodev              133390  2 uvcvideo,videobuf2_core
usbhid                 53014  0 
btusb                  28267  0 
hid                   105818  5 hid_generic,usbhid,hid_logitech_dj
bluetooth             371880  22 bnep,btusb,rfcomm
x86_pkg_temp_thermal    14162  0 
coretemp               13435  0 
kvm_intel             138538  0 
kvm                   431315  1 kvm_intel
crct10dif_pclmul       14289  0 
crc32_pclmul           13113  0 
ghash_clmulni_intel    13259  0 
aesni_intel            55624  2 
aes_x86_64             17131  1 aesni_intel
lrw                    13257  1 aesni_intel
gf128mul               14951  1 lrw
glue_helper            13990  1 aesni_intel
ablk_helper            13597  1 aesni_intel
cryptd                 20329  3 ghash_clmulni_intel,aesni_intel,ablk_helper
snd_hda_intel          48171  7 
snd_hda_codec         188738  3 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_intel
snd_hwdep              13602  1 snd_hda_codec
snd_pcm               102033  4 snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel
arc4                   12608  2 
snd_page_alloc         18710  2 snd_pcm,snd_hda_intel
snd_seq_midi           13324  0 
snd_seq_midi_event     14899  1 snd_seq_midi
iwldvm                237440  0 
mac80211              596969  1 iwldvm
snd_rawmidi            30095  1 snd_seq_midi
iwlwifi               165398  1 iwldvm
snd_seq                61560  2 snd_seq_midi_event,snd_seq_midi
microcode              23518  0 
snd_seq_device         14497  3 snd_seq,snd_rawmidi,snd_seq_midi
snd_timer              29433  2 snd_pcm,snd_seq
snd                    69141  24 snd_hda_codec_realtek,snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_pcm,snd_seq,snd_rawmidi,snd_hda_codec,snd_hda_intel,snd_seq_device,snd_seq_midi
i915                  655752  6 
psmouse                97626  0 
serio_raw              13413  0 
cfg80211              479757  3 iwlwifi,mac80211,iwldvm
drm_kms_helper         52651  1 i915
mei_me                 18421  0 
drm                   296739  5 i915,drm_kms_helper
lpc_ich                21080  0 
mei                    77692  1 mei_me
soundcore              12680  1 snd
i2c_algo_bit           13413  1 i915
ideapad_laptop         18342  0 
sparse_keymap          13948  1 ideapad_laptop
wmi                    19070  0 
video                  19318  1 i915
mac_hid                13205  0 
lp                     17759  0 
parport                42299  3 lp,ppdev,parport_pc
alx                    32255  0 
mdio                   13807  1 alx
ahci                   25819  3 
libahci                31898  1 ahci

Update July 28, 2013:

Problem still occurs in Ubuntu 14.04, though the WWW, Mail, and Calculator media keys seem to work now. The volume up/down problem persists.

Best Answer

Sounds like an USB problem to me. Here is what you might try : build you own kernel with a modified hid.h value (usb2.0 driver), to allow the USB 2.0 to be more permissive. I used to do that until kernel 3.11 was out for my Perixx gaming mouse.


Building a new kernel with modifier hid.h value :

1) Open a terminal (ctrl-alt-T)

2) Launch the command :

  • sudo apt-get install fakeroot kernel-wedge build-essential makedumpfile kernel-package libncurses5 libncurses5-dev

It installs the requiered packages for the kernel building. You can apt-get remove <packages> afterwards to uninstall them if you wish.

3) Enter the following commands to create a directory for the kernel sources :

  • mkdir ~/source
  • cd ~/source
  • apt-get source linux-image-$(uname -r)

4) Type :

  • cd linux

Press Tab to auto-fill the name, then press Enter.

5) Launch :

  • gedit include/linux/hid.h

Find (Ctrl + F) the line #define HID_MAX_USAGES and change it's value to '64000'.

6) Launch :

cp -vi /boot/config-`uname -r` .config

To copy the configuration file of your current system.

7) (Optionnal) To speed up the building process, you can adjust the concurrency level. Launch :

  • export CONCURRENCY_LEVEL=#

Replace # by the number of your CPU's cores + 1 (Dual-core will be "3", Quad-core "5", …)

8) Launch :

  • make-kpkg clean

To prepare the directory needed by the building process.

9) Launch :

  • fakeroot make-kpkg --initrd --append-to-version=-sk kernel-image kernel-headers

This will start the kernel building process. It can take a while (between 1h and 8h following your hardware). If the process is interrupted for some reason, you should launch the command rm ~/source and start over from step 3. The kernel binaries .deb will be placed in ~/source.


To install the new kernel :

1) Open nautilus (file explorer) and go to /lib/modules.

2) Open a Terminal and launch :

  • cd ~/source

3) Type the following commands and press **Tab to auto-fill the version of kernel, named here (KERNEL_VERSION) :**

  • sudo dpkg -i linux-image-
  • sudo dpkg -i linux-headers-

Both commands (once filled by Tab) must end by .deb

4) Launch :

  • sudo update-initramfs -c -k KERNEL_NAME

You have to replace KERNEL_NAME by the name used by the directory containing the modifier kernel (should end with "-sk" in nautilus).

5) Launch :

  • sudo update-grub

(and also sudo update-burg if you use BURG).

6) Restart the computer.

You now run a custom kernel ! Congrats'


If that doesn't work, the problem is NOT caused by HID (usb2.0 driver) and I have no idea how to help you :)

Related Question