• 19июля

    Для управления программами tvtime и mplayer с пульта необходимо выполнить следующие настройки.

    Прописать кнопки для пульта в конфигурационный файл /etc/lircd.conf.

    Для этого имеется специальная утилита irrecord. Удяляем файл /etc/lircd.conf. Запускаем команду irrecord –f /etc/lircd.conf. Сначала нужно удерживать нажатой любую кнопку на пульте, чтобы он определился, затем вводим название кнопки и быстро нажимаем ее на пульте, иначе после 10 секунд произойдет автоматический выход из программы! После того, как все кнопки записаны, просто жмем Enter и ничего не делаем 10 секунд.

    В результате содержимое файла /etc/lircd.conf примет вид похожий на вот это:

    # Please make this file available to others
    # by sending it to
    #
    # this config file was automatically generated
    # using lirc-0.8.3-CVS(devinput) on Thu Nov 22 19:20:59 2007
    #
    # contributed by
    #
    # brand:                       /etc/lircd.conf
    # model no. of remote control:
    # devices being controlled by this remote:
    #
    begin remote
    
      name  /etc/lircd.conf
      bits           16
      eps            30
      aeps          100
      one             0     0
      zero            0     0
      pre_data_bits   16
      pre_data       0x8001
      gap          132988
      toggle_bit_mask 0x1019D
    
      begin codes
              N1                       0x0002
              N2                       0x0003
              N3                       0x0004
              N4                       0x0005
              N5                       0x0006
              N6                       0x0007
              N7                       0x0008
              N8                       0x0009
              N9                       0x000A
              N0                       0x000B
              VOLPLUS                  0x0073
              VOLMINUS                 0x0072
              CHANPLUS                 0x0192
              CHANMINUS                0x0193
              LEFT                     0x0069
              RIGHT                    0x006A
              UP                       0x0067
              DOWN                     0x006C
              OK                       0x0160
              TVAV                     0x0179
              AUDIO                    0x0188
              SLEEP                    0x008E
              MUTE                     0x0071
              MENU                     0x008B
              INFO                     0x0166
              PLUS100                  0x019D
              RECALL                   0x0081
              FUNC                     0x0181
              POWER                    0x80010074
          end codes
    
    end remote

    С помощью этого конфигурационного файла система будет опознавать кнопки вашего пульта и на них можно будет “навесить” выполнение любых команд. Приведенный пример соответствует пульту дистанционного управления тв-тюнера Beholder 505 FM.

    После того, как все кнопки записаны, перезапускаем демона:

    #killall lircd
    #lircd

    Или по другому:

    service lircd restart

    Назначить функции кнопкам пульта.

    Назначить кнопкам пульта выполнение определенных функций можно по крайней мере двумя проверенными способами. В КДЕ удобно использовать специальный апплет IRKick - сервер инфракрасных пультов управления. Второй способ универсален и не ориентирован ни на какой из оконных менеджеров - Gnome, KDE и тд. Этот способ заключается в использовании для управления утилиты irexec и её файл настроек ~.lircrc. Именно этот способ мы и рассмотрим.

    Поскольку мы хотим управлять с пульта сразу двумя программами tvtime и mplayer (точнее каждой по отдельности, в зависимости от того, какая из них запущена), то кнопкам пульта мы будем назначать не команды этих программ, а запуск дополнительного скрипта, который уже будет управлять запущенной программой.

    Приведем пример файла назначения функций кнопкам пульта:

    begin
            prog = irexec
            button = TVAV
            repeat = 0
            config = /home/misc/LIRC/rc TVAV1
            config = /home/misc/LIRC/rc TVAV0
    end
    
    begin
            prog   = irexec
            button = RIGHT
            repeat = 2
            config = /home/misc/LIRC/rc RIGHT
    end
    begin
            prog   = irexec
            button = LEFT
            repeat = 2
            config = /home/misc/LIRC/rc LEFT
    end
    begin
            prog   = irexec
            button = UP
            repeat = 0
            config = /home/misc/LIRC/rc UP
    end
    begin
            prog   = irexec
            button = DOWN
            repeat = 0
            config = /home/misc/LIRC/rc DOWN
    end
    begin
            prog   = irexec
            button = VOLPLUS
            repeat = 2
            config = /home/misc/LIRC/rc VOLPLUS
    end
    begin
            prog   = irexec
            button = VOLMINUS
            repeat = 2
            config = /home/misc/LIRC/rc VOLMINUS
    end
    begin
            prog   = irexec
            button = POWER
            repeat = 0
            config = /home/misc/LIRC/rc POWER
    end
    begin
            prog   = irexec
            button = SLEEP
            repeat = 0
            config = /home/misc/LIRC/rc SLEEP
    end
    begin
            prog   = irexec
            button = INFO
            repeat = 0
            config = /home/misc/LIRC/rc INFO
    end
    begin
            prog   = irexec
            button = CHANPLUS
            repeat = 0
            config = /home/misc/LIRC/rc CHANPLUS
    end
    begin
            prog   = irexec
            button = CHANMINUS
            repeat = 0
            config = /home/misc/LIRC/rc CHANMINUS
    end
    begin
            prog   = irexec
            button = MUTE
            repeat = 0
            config = /home/misc/LIRC/rc MUTE
    end
    begin
            prog   = irexec
            button = OK
            repeat = 0
            config = /home/misc/LIRC/rc OK
    end
    begin
            prog   = irexec
            button = N0
            repeat = 0
            config = /home/misc/LIRC/rc N0
    end
    begin
            prog   = irexec
            button = N1
            repeat = 0
            config = /home/misc/LIRC/rc N1
    end
    begin
            prog   = irexec
            button = N2
            repeat = 0
            config = /home/misc/LIRC/rc N2
    end
    begin
            prog   = irexec
            button = N3
            repeat = 0
            config = /home/misc/LIRC/rc N3
    end
    begin
            prog   = irexec
            button = N4
            repeat = 0
            config = /home/misc/LIRC/rc N4
    end
    begin
            prog   = irexec
            button = N5
            repeat = 0
            config = /home/misc/LIRC/rc N5
    end
    begin
            prog   = irexec
            button = N6
            repeat = 0
            config = /home/misc/LIRC/rc N6
    end
    begin
            prog   = irexec
            button = N7
            repeat = 0
            config = /home/misc/LIRC/rc N7
    end
    begin
            prog   = irexec
            button = N8
            repeat = 0
            config = /home/misc/LIRC/rc N8
    end
    begin
            prog   = irexec
            button = N9
            repeat = 0
            config = /home/misc/LIRC/rc N9
    end
    begin
            prog   = irexec
            button = AUDIO
            repeat = 0
            config = /home/misc/LIRC/rc AUDIO
    end

    Как видите, по нажатию кнопок пульта вызывается скрипт, который мы расположили в файле /home/misc/LIRC/rc. В зависимости от нажатой кнопки и от того , какая программа (tvtime или mplayer) запущена в настоящий момент, скрипт выполнит ту или иную команду. Скрипт этот выглядит так:

    #!/bin/sh
    #
    
    tvtime_command() {
    case "$1" in
      TVAV0)
         tvtime-command TOGGLE_FULLSCREEN
         ;;
      TVAV1)
         tvtime-command TOGGLE_FULLSCREEN
         ;;
      N1)
         tvtime-command CHANNEL_1
         ;;
      N2)
         tvtime-command CHANNEL_2
         ;;
      N3)
         tvtime-command CHANNEL_3
         ;;
      N4)
         tvtime-command CHANNEL_4
         ;;
      N5)
         tvtime-command CHANNEL_5
         ;;
      N6)
         tvtime-command CHANNEL_6
         ;;
      N7)
         tvtime-command CHANNEL_7
         ;;
      N8)
         tvtime-command CHANNEL_8
         ;;
      N9)
         tvtime-command CHANNEL_9
         ;;
      N0)
         tvtime-command CHANNEL_0
         ;;
      VOLPLUS)
         tvtime-command RIGHT
         ;;
      VOLMINUS)
         tvtime-command LEFT
         ;;
      CHANPLUS)
         tvtime-command CHANNEL_UP
         ;;
      CHANMINUS)
         tvtime-command CHANNEL_DOWN
         ;;
      LEFT)
         tvtime-command LEFT
         ;;
      RIGHT)
         tvtime-command RIGHT
         ;;
      UP)
         tvtime-command CHANNEL_UP
         ;;
      DOWN)
         tvtime-command CHANNEL_DOWN
         ;;
      OK)
         /bin/true
         ;;
      AUDIO)
         /bin/true
         ;;
      SLEEP)
         /bin/true
         ;;
      MUTE)
         tvtime-command TOGGLE_MUTE
         ;;
      MENU)
         /bin/true
         ;;
      INFO)
         tvtime-command DISPLAY_INFO
         ;;
      PLUS100)
         /bin/true
         ;;
      RECALL)
         /bin/true
         ;;
      FUNC)
         /bin/true
         ;;
      POWER)
         tvtime-command QUIT
         ;;
        *)
         /bin/true
         ;;
    esac
    return
    }
    mplayer_command() {
    case "$1" in
      TVAV0)
         echo "vo_fullscreen 0" > /tmp/mplayer
         ;;
      TVAV1)
         echo "vo_fullscreen 1" > /tmp/mplayer
         ;;
      N1)
         /bin/true
         ;;
      N2)
         /bin/true
         ;;
      N3)
         /bin/true
         ;;
      N4)
         /bin/true
         ;;
      N5)
         /bin/true
         ;;
      N6)
         /bin/true
         ;;
      N7)
         /bin/true
         ;;
      N8)
         /bin/true
         ;;
      N9)
         /bin/true
         ;;
      N0)
         /bin/true
         ;;
      VOLPLUS)
         echo "volume +5" > /tmp/mplayer
         ;;
      VOLMINUS)
         echo "volume -5" > /tmp/mplayer
         ;;
      CHANPLUS)
         echo "audio_delay 0.100" > /tmp/mplayer
         ;;
      CHANMINUS)
         echo "audio_delay -0.100" > /tmp/mplayer
         ;;
      LEFT)
         echo "seek -10" > /tmp/mplayer
         ;;
      RIGHT)
         echo "seek 10" > /tmp/mplayer
         ;;
      UP)
         echo "seek 60" > /tmp/mplayer
         ;;
      DOWN)
         echo "seek -60" > /tmp/mplayer
         ;;
      OK)
         echo "frame_step" > /tmp/mplayer
         ;;
      AUDIO)
         echo "switch_audio" > /tmp/mplayer
         ;;
      SLEEP)
         echo "pause" > /tmp/mplayer
         ;;
      MUTE)
         /bin/true
         ;;
      MENU)
         /bin/true
         ;;
      INFO)
         echo "osd" > /tmp/mplayer
         ;;
      PLUS100)
         /bin/true
         ;;
      RECALL)
         /bin/true
         ;;
      FUNC)
         /bin/true
         ;;
      POWER)
         echo "quit" > /tmp/mplayer
         ;;
        *)
         /bin/true
         ;;
    esac
    return
    }
    
    mplayer_pid=$(pidof mplayer)
    tvtime_pid=$(pidof tvtime)
    ircmd="$1"
    
    if [ -z "$mplayer_pid" -a -z "$tvtime_pid" -a "$ircmd"="POWER" ]; then
      tvtime &
      exit
    fi
    
    if [ ! -z "$mplayer_pid" ]; then
      mplayer_command $ircmd
      exit
    fi
    
    if [ ! -z "$tvtime_pid" ]; then
      tvtime_command $ircmd
      exit
    fi

    В соответсвии с этим скриптом кнопкам пульта назначены следующие функции:

    Кнопка пульта tvtime mplayer
    1 ввод цифры “1″ номера канала нет
    2 ввод цифры “2″ номера канала нет
    3 ввод цифры “3″ номера канала нет
    4 ввод цифры “4″ номера канала нет
    5 ввод цифры “5″ номера канала нет
    6 ввод цифры “6″ номера канала нет
    7 ввод цифры “7″ номера канала нет
    8 ввод цифры “8″ номера канала нет
    9 ввод цифры “9″ номера канала нет
    0 ввод цифры “0″ номера канала нет
    OK закончить набор номера канала нет
    Vol+ увеличить громкость увеличить громкость
    Vol- уменьшить громкость уменьшить громкость
    Channel+ следующий канал увеличить задержку аудио на 100мс
    Channel- предыдущий канал уменьшить задержку аудио на 100мс
    Left увеличить громкость вперед на 10 секунд
    Right уменьшить громкость назад на 10 секунд
    Up следующий канал вперед на 60 секунд
    Down предыдущий канал назад на 60 секунд
    TV/AV переключение окно-полный экран переключение окно-полный экран
    Audio нет переключение звуковых дорожек
    Sleep нет пауза
    Mute включить/выключить звук включить/выключить звук
    Menu нет нет
    Info информация о канале и передаче информация о текущей позиции в файле
    +100 нет нет
    Recall нет нет
    Func нет нет
    Power включить ТВ, если ничего не запущено, выключить ТВ, если запущен tvtime выйти из mplayer

    Дополнительные замечания.

    1. Для того, чтобы иметь возможность управлять поведением mplayer из другой программы необходимо определить FIFO-файл, через который в mplayer будут поступать команды. Для этого следует поместить в конфигурационный файл mplayer’a ~/.mplayer/config инструкцию слудующего вида: input = fille=~/mplayer.cmd. Кроме того необходимо предварительно создать указанный fifo-файл. Это делается командой mkfifo ~/mplayer.cmd.
    2. Демон обработки нажатий кнопок пульта irexec -d должен запускаться в окружении пользователя, который использует пульт. Это проще всего сделать, поместив скрипт, запускающий эту команду в автозагрузку. Например в KDE это делается помещением скрипта в каталог ~/.kde/Autostart. В этом случае демон irexec будет запущен непосредственно после того, как пользователь вошел в систему.
    3. В приведенной конфигурации кнопка Power осуществляет выход из запущенной программы (tvtime или mplayer). В случае же, когда ни одна из этих программ не запущена, нажатие кнопки Power приводит к запуску телевизионной программы tvtime.
    4. Пример конфигурационных файлов lirc

    Posted by admin @ 14:35

    Tags:

Comments are closed.