A device that's both a pointer and a keyboard device confuses the server with its strict pointer/keyboard separation, see Bug 49950 amongst others. The only viable solution appears to be to split the devices at the driver level into a keyboard and a pointer component, then send the events accordingly.
Some preliminary patches here: https://github.com/whot/xf86-input-libinput/tree/wip/pointer-keyboard-split Note that this is a first version, it may still be buggy though it seems to work fine here. If you can test this let me know, especially whether it really fixes Bug 49950.
This seems to work for me. The keyboard is exposed as two devices to the xserver and I couldn't find any regressions.
turns out the original one had a regression in the systemd-logind case. I pushed a new version, please test this one too, thanks. https://github.com/whot/xf86-input-libinput/tree/wip/pointer-keyboard-split
The current tree also works fine here.
commit c943739a2bfd4c380db0b21bc35b73deb7496c8a Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Wed Nov 11 10:10:58 2015 +1000 Split mixed pointer/keyboard devices into two separate X devices
had to revert the original patch, updated version is commit 1f43f3921f6ceebd9a0cb92ef998a930d5fc3a3e Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Wed Nov 11 10:10:58 2015 +1000 Split mixed pointer/keyboard devices into two separate X devices
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.