XBMC + lirc

Проследим цепочку прохождения команды пульта в xbmc:

  1. Имя нажатой кнопки и имя пульта из lirc передаётся в XBMC. Он в свою очередь ищет этот пульт по имени в файле Lircmap.xml. Этот файл сопоставляет имена нажатых кнопок пульта названиям кнопок возможных в XBMC.
  2. Если соответствие установлено, то далее берётся Название кнопки XBMC и в файле remote.xml ищется соответствующая этой кнопке команда на выполнение.

Вот и вся цепочка, всё довольно просто. Теперь рассмотрим подробнее эти файлы.

Lircmap.xml

Файл находится в ~/.xbmc/userdata/Lircmap.xml и определяет соответствие кнопок пульта кнопкам XBMC.

Формат файла:

<lircmap>
       <remote device="Имя пульта">
               <кнопка XBMC>кнопка пульта</кнопка XBMC>
               ...
       </remote>
</lircmap>

Кнопки пульта и имя пульта должны соответствовать файлу /etc/lirc/lircd.conf.

Кнопка XBMC не может быть названа как угодно. В XBMC есть пространство имён кнопок. Все названия кнопок XBMC берутся только из этого перечня. Посмотреть таблицу возможных имён можно тут.

Вот пример моего файла Lircmap.xml.

Lircmap.xml
<lircmap>
  <remote device="AVerMedia">
    <left>4</left>
    <right>6</right>
    <up>2</up>
    <down>8</down>
    <select>5</select>
    <enter>0</enter>
    <pageplus>3</pageplus>
    <pageminus>7</pageminus>
    <back>1</back>
    <menu>7</menu>
    <clear>KEY_DELETE</clear>
    <start>KEY_MEDIA</start>
    <back>KEY_EXIT</back>
    <record>RECORD</record>
    <play>PLAY</play>
    <pause>PAUSE</pause>
    <stop>STOP</stop>
    <volumeplus>VOLUME_UP</volumeplus>
    <volumeminus>VOLUME_DOWN</volumeminus>
    <channelplus>PAGE_UP</channelplus>
    <channelminus>PAGE_DOWN</channelminus>
    <mute>MUTE</mute>
    <power>POWER</power>
    <myvideo>VIDEO</myvideo>
    <mymusic>AUDIO</mymusic>
    <mytv>TVFM</mytv>
    <teletext>TELETEXT</teletext>
    <red>RED</red>
    <green>GREEN</green>
    <yellow>YELLOW</yellow>
    <blue>BLUE</blue>
    <display>DISPLAY</display>
    <info>AUTOSCAN</info>
  </remote>
</lircmap>

remote.xml

Этот файл находится в /usr/share/xbmc/system/keymaps/remote.xml. Он используется по умолчанию для всех пользователей системы.

Второй пользовательский файл ~/.xbmc/userdata/keymaps/remote.xml. Его содержимое дополняет содержимое системного файла, а если кнопки дублируются, то берётся команда из пользовательского файла. Этого файла может и не быть, если вас устраивают системные настройки по умолчанию. Файлы определяют соответствие кнопок XBMC командам на выполнение.

Формат файла:

<keymap>
  <global>
    <remote>
      <кнопка XBMC>команда</кнопка XBMC>
       ...    ....      ...
    </remote>
  </global>
  <Другие_секции>
    <remote>
      <кнопка XBMC>команда</кнопка XBMC>
      ....    .....    .....     
    </remote>
  </Другие_секции>
  ...   ....   ....
</keymap>

Список возможных команд есть тут. Кроме секции <Global>, определяющей соответствие кнопок для всех возможных меню и экранов XBMC, могут быть и дополнительные секции <Другие_секции> меняющие назначение кнопок при проигрывании например полноэкранного видео или при активации OSD меню. Более подробно можно посмотреть в системном файле remote.xml или keyboard.xml.

Фрагмент моего пользовательского файла remote.xml:

<keymap>
  <global>
    <remote>
      <play>Play</play>
      <pause>Pause</pause>
      <stop>Stop</stop>
      <forward>FastForward</forward>
      <reverse>Rewind</reverse>
      <left>4</left>
      <right>6</right>
      <up>2</up>
      <down>8</down>
      <select>5</select>
      <enter>0</enter>
      <pageplus>3</pageplus>
      <pageminus>7</pageminus>
      <back>1</back>
      <menu>7</menu>
      <title>ContextMenu</title>
      <info>Info</info>
      <skipplus>SkipNext</skipplus>
      <skipminus>SkipPrevious</skipminus>
      <display>DISPLAY</display>
      <start>PreviousMenu</start>
      <record>RECORD</record>
      <volumeplus>VOLUME_UP</volumeplus>
      <volumeminus>VOLUME_DOWN</volumeminus>
      <mute>MUTE</mute>
      <power>XBMC.ShutDown()</power>
      <myvideo>XBMC.ActivateWindow(MyVideos)</myvideo>
      <mymusic>XBMC.ActivateWindow(MyMusic)</mymusic>
      <mypictures>XBMC.ActivateWindow(MyPictures)</mypictures>
      <mytv>XBMC.ActivateWindow(MyPVR)</mytv>
      <guide>XBMC.ActivateWindowAndFocus(MyPVR, 31,0, 10,0)</guide>
      <livetv>XBMC.ActivateWindowAndFocus(MyPVR, 32,0, 11,0)</livetv>
      <liveradio>XBMC.ActivateWindowAndFocus(MyPVR, 33,0, 12,0)</liveradio>
      <recordedtv>XBMC.ActivateWindowAndFocus(MyPVR, 34,0, 13,0)</recordedtv>
      <epgsearch>XBMC.ActivateWindowAndFocus(MyPVR, 35,0, 14,0)</epgsearch>
      <red>XBMC.ActivateWindow(MyPVR)</red>
      <green>XBMC.ActivateWindow(MyVideos)</green>
      <yellow>XBMC.ActivateWindow(MyMusic)</yellow>
      <blue>XBMC.ActivateWindow(MyPictures)</blue>
      ...
    </remote>
  </global>
  ...
</keymap>

После внесения изменений в эти файлы необходим перезапуск XBMC.

Обсуждение

Ваш комментарий:
   _  __   __  ___  _      __  _      __  __  __   ___ 
  | |/_/  /  |/  / | | /| / / | | /| / / / / / /  / _ \
 _>  <   / /|_/ /  | |/ |/ /  | |/ |/ / / /_/ /  / , _/
/_/|_|  /_/  /_/   |__/|__/   |__/|__/  \____/  /_/|_|