On Sun, Sep 16, 2012 at 01:41:02PM -0700, Darren Hart wrote:
> I'm looking to modify the keysyms of a remote that presents as a usbhid 
> device.
> I also have an HP wireless keyboard and mouse combination device that I do not
> wish to modify. I'm trying to accomplish this with a combination of setxkbmap
> and xkbcomp, using the "-i device_id" to xkbcomp to modify the keymap of only
> the remote. The problem: both devices get remapped.
> 
> The following describes my system and the exact steps I've taken to try and
> remap the remote.
> 
> $ xinput --list 
> ⎡ Virtual core pointer                        id=2    [master pointer  (3)]
> ⎜   ↳ Virtual core XTEST pointer                      id=4    [slave  pointer 
>  (2)]
> ⎜   ↳ HOLTEK                                          id=10   [slave  pointer 
>  (2)]
> ⎜   ↳ HP HP Wireless Mini Keyboard                    id=11   [slave  pointer 
>  (2)]
> ⎜   ↳ HP HP Wireless Mini Keyboard                    id=12   [slave  pointer 
>  (2)]
> ⎣ Virtual core keyboard                       id=3    [master keyboard (2)]
>     ↳ Virtual core XTEST keyboard                     id=5    [slave  
> keyboard (3)]
>     ↳ Power Button                                    id=6    [slave  
> keyboard (3)]
>     ↳ Video Bus                                       id=7    [slave  
> keyboard (3)]
>     ↳ Power Button                                    id=8    [slave  
> keyboard (3)]
>     ↳ HOLTEK                                          id=9    [slave  
> keyboard (3)]
> 
> In the list above, the HOLTEK is the remote (it sends both keyboard and mouse
> events). Yes it's horrible, but it's what I have and I'd like to make it 
> work. The
> two entries for the HP Wireless Mini Keyboard correspond to the single USB
> receiver for the keyboard and mouse.
> 

[...]

> The remote sends ctrl+p and ctrl+shift+p for pause and play. MythTV doesn't
> distinguish between the two, so I want to change the shifted P to another key,
> such as XF86AudioPlay. I'd also like to change the Backspace to Esc on the 
> remote.
> I can make this work with the following script which I lifted from the MythTV
> wiki, and then modified:
> 
> #!/bin/sh
> set -x
> 
> remote_id=$(xinput list | sed -n 's/.*HOLTEK.*id=\([0-9]*\).*keyboard.*/\1/p')
> [ "$remote_id" ] || exit
> 
> mkdir -p /tmp/xkb/symbols
> cat >/tmp/xkb/symbols/custom <<\EOF
> xkb_symbols "remote" {
>       key <AD10> {        [ p,    XF86AudioPlay ]       };
>       key <BKSP> { [ Escape, Escape ] };
> };
> EOF
> 
> setxkbmap -device $remote_id -print | sed 
> 's/\(xkb_symbols.*\)"/\1+custom(remote)"/' | xkbcomp -I/tmp/xkb -i $remote_id 
> -synch - $DISPLAY 2>/dev/null
> 
> 
> Once run, the HP keyboard p and backspace keys continue to work. But once I 
> run xev
> and press the play button, both the remote and the HP keyboard have been 
> remapped.
> shift+p sends XF86AudioPlay and Backspace sends Esc on both devices. I 
> checked that
> my version of xkbcomp contains the per-device patch by downloading the 
> sources and
> checking the contents of xkbcomp.c:
 
[...]

> I also confirmed that if I send a bad device_id, the script displays X11 out 
> of range
> errors, with the value to the operation being the hex value of the bogus 
> device_id.
> No error is reported when I pass "9" (the device_id for the HOLTEK keyboard 
> xinput
> assigns to the remote). If I use the HP Wireless xinput device IDs, the 
> remapping does
> not take place.
> 
> I can reset the devices to their original state using:
> 
> $ setxkbmap -print | xkbcomp - $DISPLAY 2>/dev/null
> 
> If I try to use "-i 11" or "-i 12" to reset just the HP Wireless keyboard, 
> the change doesn't take effect.
> 
> I am running on a 32 bit installation of Ubuntu 12.04 (Mythbuntu 
> specifically). I've
> tried this in the XFCE desktop as well as with a .xinitrc with only an xterm 
> running
> with the same results.
> 
> Am I on the right track? Or is there another method I should be considering?
> 
> Can anyone point to why xkbcomp appears to be sending the device_id, yet both
> the remote and the keyboard are being remapped?

not sure, this should work and testing it on my box here it does work
(tested on two keyboards). the 12.04 ubuntu X stack has a lot of input
patches that differ from upstream, so I suggest you try with an upstream X
server first.

Cheers,
   Peter
_______________________________________________
xorg@lists.x.org: X.Org support
Archives: http://lists.freedesktop.org/archives/xorg
Info: http://lists.x.org/mailman/listinfo/xorg
Your subscription address: arch...@mail-archive.com

Reply via email to