Zotac Remote Control for Kodi/XBMC

Aus MvOWiki
Zur Navigation springen Zur Suche springen

This article describes the steps needed to configure a Zotac remote control for Kodi/XBMC under Linux.

In the original configuration of Kodi/XBMC in Ubuntu the remote control works at all but several buttons on the remote control e.g. the colored buttons are not recognized by Kodi/XBMC.

This guide was created and tested on the following system:


Information Sources

Kodi/XBMC Forum

Build and install Lirc from source code

Download and unpack the source code from FernetMentas github repository. If unsure how to do this, please read the Forum thread mentioned above.

 zbox:~$ sudo apt-get install wget unzip dialog checkinstall
 zbox:~$ mkdir src
 zbox:~$ cd src
 zbox:~/src$ wget https://github.com/FernetMenta/lirc/archive/master.zip
 zbox:~/src$ mv lirc-master lirc
 zbox:~/src$ cd lirc

Now start actually the configure and build process.

 zbox:~/src/lirc$ ./autogen.sh
 zbox:~/src/lirc$ ./setup.sh

(requires package dialog, select driver zotac, save & configure)

 zbox:~/src/lirc$ make

Generally it is not the Debian/Ubuntu way to run a make install. Using checkinstall from the package with the same name is a better way. This utility asks for some information and after that generates a Debian/Ubuntu package from the install process. This package may easily become uninstalled using the package manager apt-get purge lirc-zotac.

 zbox:~/src/lirc$ sudo checkinstall make install

Configure Lirc

/etc/lirc/hardware.conf

# Chosen Remote Control
REMOTE="Zotac MCE Remote"
REMOTE_DRIVER="zotac"
REMOTE_LIRCD_CONF="zotac/lircd.conf.zotac" 

REMOTE_MODULES=""
REMOTE_DEVICE="/dev/remote"
REMOTE_SOCKET=""
REMOTE_LIRCD_ARGS=""

#Chosen IR Transmitter
TRANSMITTER="None"
TRANSMITTER_MODULES=""
TRANSMITTER_DRIVER=""
TRANSMITTER_DEVICE=""
TRANSMITTER_SOCKET=""
TRANSMITTER_LIRCD_CONF=""
TRANSMITTER_LIRCD_ARGS=""

#Disable kernel support.
#Typically, lirc will disable in-kernel support for ir devices in order to
#handle them internally.  Set to false to prevent lirc from disabling this
#in-kernel support. 
#DISABLE_KERNEL_SUPPORT="true"

#Enable lircd
#START_LIRCD="true"

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD="false"

#Try to load appropriate kernel modules
#LOAD_MODULES="true"

# Default configuration files for your hardware if any
LIRCMD_CONF=""

#Forcing noninteractive reconfiguration
#If lirc is to be reconfigured by an external application
#that doesn't have a debconf frontend available, the noninteractive
#frontend can be invoked and set to parse REMOTE and TRANSMITTER
#It will then populate all other variables without any user input
#If you would like to configure lirc via standard methods, be sure
#to leave this set to "false"
FORCE_NONINTERACTIVE_RECONFIGURATION="false"
START_LIRCMD=""
START_LIRCD="true"
LOAD_MODULES=""

/etc/lirc/lircd.conf

 #This configuration has been automatically generated via
 #the Ubuntu LIRC package maintainer scripts.
 #
 #It includes the default configuration for the remote and/or
 #transmitter that you have selected during package installation.
 #
 #Feel free to add any custom remotes to the configuration
 #via additional include directives or below the existing
 #Ubuntu include directives from your selected remote and/or
 #transmitter.
 
 #Configuration for the Linux input layer (/dev/input/eventX) remote:
 #include "/usr/share/lirc/remotes/devinput/lircd.conf.devinput"
 # Please make this file available to others
 # by sending it to <lirc@bartelmus.de>
 #
 # this config file was automatically generated
 # using lirc-0.9.1-git(zotac) on Mon Apr  2 14:10:29 2012
 #
 # contributed by
 #
 # brand:                       zotac.conf
 # model no. of remote control:
 # devices being controlled by this remote:
 #
 
 begin remote
 
   name  zotac.conf
   bits           32
   eps            30
   aeps          100
 
   one             0     0
   zero            0     0
   gap          100123
   min_repeat      9
 #  suppress_repeat 9
 #  uncomment to suppress unwanted repeats
 #  toggle_bit_mask 0x7004F
 
       begin codes
           KEY_SLEEP                0x00010082
           KEY_WAKEUP               0x00010083
           KEY_RECORD               0x000C00B2
           KEY_PAUSE                0x000C00B1
           KEY_STOP                 0x000C00B7
           KEY_REWIND               0x000C00B4
           KEY_PLAY                 0x000C00B0
           KEY_FORWARD              0x000C00B3
           KEY_LEFTSHIFT            0x000C00B6
           KEY_RIGHTSHIFT           0x000C00B5
           KEY_BACK                 0x000C0224
           KEY_INFO                 0x000C0209
           KEY_MENU                 0xFFBC000D
           KEY_UP                   0x00070052
           KEY_LEFT                 0x00070050
           KEY_RIGHT                0x0007004F
           KEY_DOWN                 0x00070051
           KEY_OK                   0x00070028
           KEY_VOLUMEUP             0x000C00E9
           KEY_VOLUMEDOWN           0x000C00EA
           KEY_MUTE                 0x000C00E2
           KEY_CHANNELUP            0x000C009C
           KEY_CHANNELDOWN          0x000C009D
           KEY_1                    0x0007001E
           KEY_2                    0x0007001F
           KEY_3                    0x00070020
           KEY_4                    0x00070021
           KEY_5                    0x00070022
           KEY_6                    0x00070023
           KEY_7                    0x00070024
           KEY_8                    0x00070025
           KEY_9                    0x00070026
           KEY_0                    0x00070027
           KEY_NUMERIC_STAR         0x10070025
           KEY_NUMERIC_POUND        0x10070020
           KEY_CLEAR                0x00070029
           KEY_TEXT                 0xFFBC005A
           KEY_TITLE                0x000C008D
           KEY_ENTER                0x00070028
           KEY_RED                  0xFFBC005B
           KEY_GREEN                0xFFBC005C
           KEY_YELLOW               0xFFBC005D
           KEY_BLUE                 0xFFBC005E
       end codes
 end remote

Configure UDEV

There are two goals of this UDEV rule. First create a link pointing to the correct /dev/usb/hiddev? device. Second it sends a message to the Upstart script that the device is available now.

Create a UDEV rule in file /etc/udev/rules.d/10-ir.rules. It differs from the content of the original article. If using the SUBSYSTEM=="usb" the created link from this rule /dev/remote points to something like /dev/bus/usb/003/002. It seems that lircd cannot handle that device but needs a device like /dev/usb/hiddev?.

The output of

 zbox:~$ udevadm info --attribute-walk --name=/dev/usb/hiddev1

showed that a rule containing SUBSYSTEM=="usbmisc" will produce the correct link. It is strongly recommended to not hardcode the /dev/usb/hiddev<num> device in the other config files. On my system the device gets nearly on every reboot a different number.

 # /etc/udev/rules.d/10-ir.rules
 # vim:set ft=udevrules:
 #
 # remote control 0471:2168
 SUBSYSTEM=="usbmisc", ATTRS{idVendor}=="0471", ATTRS{idProduct}=="2168", SYMLINK+="remote", ACTION=="add", RUN+="/sbin/initctl --quiet emit --no-wait ir-ready"

Configure System Startup

Configure Upstart

 # content of /etc/init/lirc.conf
 # vim:set ft=upstart ts=2 sw=2 et:
 
 description "lirc"
 emits "lirc-ready"
 expect fork
 start on (remote-filesystems
           and local-filesystems
           and started rsyslog
           and ir-ready)
 stop on runlevel [!2345]
 
 pre-start script
   while [ ! -e /dev/remote ]
   do
     sleep 1
   done
   mkdir /var/run/lirc
 end script
 
 exec /usr/local/sbin/lircd -H zotac -d /dev/remote --output=/var/run/lirc/lircd
 
 post-start script
   ln -s /var/run/lirc/lircd /dev/lircd
 end script
 
 post-stop script
   rm /dev/lircd
   rm -rf /var/run/lirc
 end script

Configure SYSV init

After Upstart isn't default init system anymore, the following simple script in /etc/init.d/lirc will do the job:

  #! /bin/sh
  
  ### BEGIN INIT INFO
  # Provides:          lirc
  # Required-Start:    $local_fs $remote_fs
  # Required-Stop:
  # X-Start-Before:    rmnologin
  # Default-Start:     2 3 4 5
  # Default-Stop:
  # Short-Description: Provide support for Zotac remote control
  # Description: Provide support for Zotac remote control
  ### END INIT INFO
  
  . /lib/lsb/init-functions
  
  N=/etc/init.d/lirc
  
  set -e
  
  case "$1" in
    start)
      mkdir /var/run/lirc
      /usr/local/sbin/lircd -H zotac -d /dev/remote --output=/var/run/lirc/lircd
      ln -s /var/run/lirc/lircd /dev/lircd
      ;;
    stop)
      killall lircd
      rm /dev/lircd
      rm -rf /var/run/lirc
      ;;
    *)
      echo "Usage: $N {start|stop}" >&2
      exit 1
      ;;
  esac

  exit 0

Configure Xorg

Create a file /usr/share/X11/xorg.conf.d/09-zotac.conf with following content. It is not recommended to edit the file /usr/share/X11/xorg.conf.d/10-evdev.conf what recommend other guides, because this file is overwritten during every Xorg update.

This configuration section tells Xorg not to configure the remote control device as a keyboard.

 # content of /usr/share/X11/xorg.conf.d/09-zotac.conf
 # vim:set ft=xf86conf ts=2 sw=2 et:
 Section "InputClass"
   Identifier "PHILIPS OVU710023"
   MatchProduct "PHILIPS OVU710023"
   MatchIsKeyboard "true"
   Option "Ignore" "true"
 EndSection

The exact name of the device differs.

The following command could help to discover the correct name:

 zbox:~$ dmesg | grep hid-generic
 [    2.590261] hid-generic 0003:0471:2168.0001: input,hiddev0,hidraw0: USB HID v1.11 Keyboard [PHILIPS OVU710023] on usb-0000:00:14.0-1/input0

Configure Kodi/XBMC

configure and test

While testing keymaps it is often helpful to activate the changed keymap without restarting Kodi/XBMC. There is a XBMC event ReloadKeymaps to handle that. Either you could assign that command to a key on the remote or on the keyboard

 <remote>
   ...
   <mykey>ReloadKeymaps</mykey>
   ...
 </remote>

or you can send it from the command line:

 xbmc-send --action=reloadkeymaps

Eventually you have to install the xbmcsend utlity before (here the Ubuntu way):

 sudo apt-get install xbmc-eventclients-xbmc-send

~/.kodi/userdata/Lircmap.xml

  <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
  <!-- Map lirc buttons to Kodi buttons >
  <!-- vim:set ft=xml ts=2 sw=2 et: -->
  
  <lircmap>
    <remote device="zotac.conf">
      <power>KEY_SLEEP</power>
      <wake>KEY_WAKEUP</wake>
      <record>KEY_RECORD</record>
      <pause>KEY_PAUSE</pause>
      <stop>KEY_STOP</stop>
      <reverse>KEY_REWIND</reverse>
      <play>KEY_PLAY</play>
      <forward>KEY_FORWARD</forward>
      <skipminus>KEY_LEFTSHIFT</skipminus>
      <skipplus>KEY_RIGHTSHIFT</skipplus>
      <back>KEY_BACK</back>
      <info>KEY_INFO</info>
      <menu>KEY_MENU</menu>
      <up>KEY_UP</up>
      <left>KEY_LEFT</left>
      <right>KEY_RIGHT</right>
      <down>KEY_DOWN</down>
      <select>KEY_OK</select>
      <volumeplus>KEY_VOLUMEUP</volumeplus>
      <volumeminus>KEY_VOLUMEDOWN</volumeminus>
      <mute>KEY_MUTE</mute>
      <up>KEY_CHANNELUP</up>
      <down>KEY_CHANNELDOWN</down>
      <zero>KEY_0</zero>
      <one>KEY_1</one>
      <two>KEY_2</two>
      <three>KEY_3</three>
      <four>KEY_4</four>
      <five>KEY_5</five>
      <six>KEY_6</six>
      <seven>KEY_7</seven>
      <eight>KEY_8</eight>
      <nine>KEY_9</nine>
      <red>KEY_RED</red>
      <green>KEY_GREEN</green>
      <yellow>KEY_YELLOW</yellow>
      <blue>KEY_BLUE</blue>
      <star>KEY_NUMERIC_STAR</star>
      <hash>KEY_NUMERIC_POUND</hash>
      <subtitle>KEY_TEXT</subtitle>
      <guide>KEY_TITLE</guide>
      <clear>KEY_CLEAR</clear>
    </remote>
  </lircmap>

Test, Debug and Troubleshooting

There are different Levels to check if all is going well. To check if Lirc is going well you could use the irw utility. After starting that with root rights it should show a message for every key press on remote control.

 zbox:~$ sudo irw
 0000000000070051 00 KEY_DOWN zotac.conf
 0000000000070052 00 KEY_UP zotac.conf

Problems with the USB device you could detect in the log file at /var/log/lircd. Correct handling looks as follows:

 ...
 zbox lircd: lircd(zotac) ready, using /var/run/lirc/lircd
 zbox lircd: zotac initializing '/dev/remote'
 zbox lircd: accepted new client on /var/run/lirc/lircd
 zbox lircd: removed client
 ...

To check if Xorg and Kodi/XBMC are configured correctly you have to enable debugging inside Kodi/XBMC system settings or using command line

 zbox:~$ xbmc-send --action=ToggleDebug

After that you should see the following messages in the XBMC log file after every keypress on remote control:

 zbox:~$ tail -f .kodi/temp/kodi.log
 ...
 12:58:44 T:139757977200576   DEBUG: LIRC: Update - NEW at 2594:0000000000070051 00 KEY_DOWN zotac.conf (KEY_DOWN)
 ...
 12:58:52 T:139757977200576   DEBUG: LIRC: Update - NEW at 3409710:0000000000070052 00 KEY_UP zotac.conf (KEY_UP)
 ...

The most important thing is that 'zotac.conf' in these lines. Otherwise the remote control device is handled by another driver (e.g. inputlirc) and you will not be able to use all remote buttons.