TiVo Slide in Arch Linux

  • arch
  • config

I've got a media computer in my living room hooked up to a TV. It runs XBMC Kodi. It's pretty nice, except it's hard to find a good controller for it. Wireless keyboards work, but are awfully awkward on the couch.

After some searching, I decided my weapon of choice would be a TiVo Slide remote. It's (technically) Bluetooth, so no pesky line of sight issues, has a secondary IR mode for controlling other devices (TV volume and power), has a slide out keyboard, and all of this in something roughly the size of your average TV remote.

Trouble is, this is designed to work with TiVos. It can work on normal computers, but it's a bit of pain. Here I'm going to write down what I learned getting it to work on my Arch Linux media computer.

I'm using an older version of the remote. I'm not sure if these instructions would work with the "TiVo Slide Pro Remote" that you can buy today. The main physical difference is that the Pro puts a circle of buttons in the middle of the slide out keyboard, where as mine puts them on the left side of the slide out keyboard.

A lot of this information has been adapted from this page on the Kodi wiki.

Step 1: Connecting it

Earlier I said that the Slide was technically Bluetooth. That's because although you can put it in pairing mode and try and connect with it, it's going to be a losing battle. The included dongle also is technically Bluetooth, but trying to use it as such has only ended in sadness for me.

Fortunately, the dongle has a fallback mode that makes it act as a plain ordinary HID device. In this mode, it handles the Bluetooth pairing and connection with the remote all on it's own, and it even comes pre-paired out of the box. This is a much nicer way of using the device. Unfortunately, the only way I can find to trigger this fallback mode is to totally disable Bluetooth on the host. (Lucky for me, I have no need of Bluetooth on the box in question).

So, the first order of business is a modprobe blacklist:

/etc/modprobe.d/blacklist-bluetooth-tivoslide.conf

blacklist btusb
blacklist bluetooth

You'll either need to reboot or rmmod these modules if they are loaded. If you plan on rebooting save it for later, it will be easiest if you do it at the end.

After this plugging in the Slide's dongle will make it show up as a plain keyboard. Testing with xev reveals that a bunch of the buttons work, generating the right key codes. Good keys to test are any alphabet key on the slide out section, and the arrow keys. You may notice however that many keys don't work, like Select, or the A B C D buttons. This is because these buttons generate scan codes that are outside the normal range that X11 understands.

Step 2: Remapping weird scancodes

To bring the scancodes the Slide generates down into the range X11 understands, we'll use udev's hwdb. This is the tool that remaps scan code to keys for lots of weird keyboards. It compiles it's info from files in various places, including /etc/udev/hwdb.d/*.hwdb. That's where we are going to put things to configure it:

/etc/udev/hwdb.d/61-tivo-slide.hwdb

# Tivo Slide
keyboard:usb:v150Ap1201*
 KEYBOARD_KEY_000C0041=enter     # select
 KEYBOARD_KEY_000C006C=f2        # A (Yellow)
 KEYBOARD_KEY_000C006B=f3        # B (Blue)
 KEYBOARD_KEY_000C0069=f4        # C (Red)
 KEYBOARD_KEY_000C006A=f5        # D (Green)
 KEYBOARD_KEY_000C006D=f6        # Zoom
 KEYBOARD_KEY_000C0082=f7        # Input
 KEYBOARD_KEY_000C0083=f8        # Enter
 KEYBOARD_KEY_000C008D=f9        # Guide
 KEYBOARD_KEY_000C009C=f10       # Chup
 KEYBOARD_KEY_000C009D=f11       # Chdn
 KEYBOARD_KEY_000C00B1=playpause # Pause
 KEYBOARD_KEY_000C00B2=record    # Record
 KEYBOARD_KEY_000C00F5=stop      # Slow

I'm not sure if the spaces before the KEYBOARD_KEY lines are needed. All the other hwdb files had them, so I kept them. Feel free to change the result keys (the ones after the right) to better match what you want to use the remote for.

After this file is in replace, you can need to regenerate hwdb.bin, which is the file that udev actually. To do that run udevadm hwdb --update. Then to reload these rules, run udevadm trigger. Now the keys listed above should work when tested in xev. Yay!

Step 3: Configuring XBMC Kodi.

This part is a normal keymap configuration for Kodi. Anyone who has mapped keys in Kodi before should be familiar with this. In your .xbmc directory there should be a userdata/keymaps/ directory. Put this file there:

.xbmc/userdata/keymaps/tivo.xml

<!-- Tivo Slide -->
<keymap>
  <global>
    <keyboard>
      <button id="f200">ActivateWindow(home)</button> <!-- Tivo key -->
      <f1>Select</f1> <!-- Select key -->
      <f2></f2> <!-- A / Yellow -->
      <f3></f3> <!-- B / Blue -->
      <f4>ContextMenu</f4> <!-- C / Red -->
      <f5></f5> <!-- D / Green -->
      <f6>AspectRatio</f6> <!-- Zoom key -->
      <f8>Select</f8> <!-- Lower enter key -->
      <f9>FullScreen</f9> <!-- Guide Key -->
      <f10>PageUp</f10> <!-- channel up key -->
      <f11>PageDown</f11> <!-- channel down key -->
      <f12>Info</f12> <!-- Guide key -->
      <prev_track>Back</prev_track> <!-- "instant replay" key -->
      <home></home> <!-- Live TV key -->
      <delete>System.LogOff</delete> <!-- Clear key -->
    </keyboard>
  </global>

  <FullscreenVideo>
    <keyboard>
      <prev_track>SmallStepBack</prev_track> <!-- "instant replay" key -->
      <next_track>StepForward</next_track> <!-- -> key -->
      <return>OSD</return>
      <enter>OSD</enter>
      <f2>ActivateWindow(osdaudiosettings)</f2> <!-- A (Yellow) -->
      <f3>ActivateWindow(videobookmarks)</f3> <!-- B (Blue) -->
      <f4>ActivateWindow(SubtitleSearch)</f4> <!-- C (Red) -->
      <f5>ActivateWindow(osdvideosettings)</f5> <!-- D (Green) -->
    </keyboard>
  </FullscreenVideo>

  <MyVideoLibrary>
    <keyboard>
      <f5>ToggleWatched</f5> <!-- D / Green -->
    </keyboard>
  </MyVideoLibrary>
</keymap>

This is what I use at home, but I'm still tweaking it. Feel free to customize it however you like. You won't break anything.

For more information about keymaps in Kodi, you can see the keymap wiki page.