Могу ли я настроить LIRC, чтобы я мог перемещаться по Unity Launcher, используя мой MCE Remote Control, и как мне это сделать?

На моем Ubuntu 12.04 HTPC у меня установлен и работает внешний интерфейс MythTV, XBMC и Steam Linux, и я хотел бы иметь возможность управлять машиной с помощью ИК-пульта дистанционного управления, без необходимости подключать клавиатуру или использовать другое устройство ввода каждый раз, когда я загрузиться, просто чтобы иметь возможность запускать мои приложения.

Я настроил lirc для своего MCE Remote Control, используя панель управления Mythbuntu, и успешно протестировал его с помощью irw. Он хорошо работает в указанных приложениях, но я должен иметь возможность использовать его для запуска этих приложений.

Я искал решение и нашел очень мало, что помогает. Даже предложения на домашней странице LIRC ( http://www.lirc.org/software.html) устарели, плохо обслуживаются и / или не устанавливаются.

Я думаю, что этот тип общих методов ввода должен быть в состоянии использоваться "из коробки" с новым интерфейсом Unity, поэтому меня удивляет, что Launcher не совместим.

В любом случае, у кого-нибудь есть идеи, как заставить это работать, или есть какое-то другое решение моей проблемы?

Спасибо,

Богатые.

2 ответа

Я нашел эту статью в LIRC. Он предлагает установить пакет lirc-x. Если вы сделаете это, а затем измените ваш файл.lircrc, как я собираюсь показать, а затем запустите программу irxevent (из окна терминала или как часть запуска - обратите внимание, что вы можете использовать irxevent -d для разветвления и запуска его в на заднем плане), вы можете перемещаться по панели запуска Unity. Но есть и обратная сторона - когда запущен irxevent, а затем вы заходите в программу, которая знает, как работать с LIRC (например, XBMC), происходит то, что ваши удаленные ключи принимаются обеими программами, и обе пытаются воздействовать на них с полупрогнозируемыми результатами. Я еще не нашел способ обойти это.

Вот что я добавил в мой файл.lircrc:

begin
 prog = irxevent
 button = KEY_UP
 repeat = 0
 config = Key Up CurrentWindow
end

begin
 prog = irxevent
 button = KEY_DOWN
 repeat = 0
 config = Key Down CurrentWindow
    end

begin
 prog = irxevent
 button = KEY_LEFT
 repeat = 0
 config = Key Left CurrentWindow
end

begin
 prog = irxevent
 button = KEY_RIGHT
 repeat = 0
 config = Key Right CurrentWindow
end

begin
 prog = irxevent
 button = KEY_PLAY
 config = Key Return CurrentWindow
 repeat = 0
end

begin
 prog = irxevent
 button = KEY_OK
 config = Key Return CurrentWindow
 repeat = 0
end

Это просто демонстрация, которая определяет только шесть кнопок на пульте дистанционного управления (клавиши со стрелками, OK и Play, две последние отправляют эквивалент клавиши Return/Enter на клавиатуре. Достаточно выполнить базовую навигацию по панели запуска. Теперь, если был только какой-то способ убить irxevent, когда запущена программа, совместимая с LIRC, и перезапустить его, когда вы выйдете из всех таких программ, без чрезмерной нагрузки на системные ресурсы, это будет прекрасно работать!

ПРИМЕЧАНИЕ: здесь есть страница документации по irxevent. Глядя на это, я наконец-то смог сделать вывод, что если вы замените CurrentWindow на unity-2d-shell, то он будет работать только на Launcher. Но проблема в том, что он выводит Launcher на передний план (иногда), даже если вы находитесь внутри другой программы. Предполагается, что существует способ использовать параметр "Фокус", поэтому нажатия клавиш будут работать только в том случае, если целевая программа имеет фокус. Но помимо очевидной проблемы "как вы в первую очередь фокусируетесь на Launcher после выхода из другой программы?", Другая проблема заключается в том, что вы используете Focus, как показано в документации, например...

begin
 prog = irxevent
 button = KEY_UP
 repeat = 0
 config = Key Up Focus unity-2d-shell
end

... кажется, полностью уничтожает операцию irxevent - она ​​вообще не реагирует на нажатия кнопок. Удалите слово "Фокус", и оно снова будет работать нормально, но мешает работе другого программного обеспечения.

Единственный способ, с помощью которого я могу убедиться, что это может сделать эту работу, - это иметь возможность убить irxevent, когда работает любое программное обеспечение из "списка исключений", и перезапустить его, если ни одно из этих программ не запущено. Но я не знаю, как это сделать, и я надеюсь, что есть более элегантное решение.

Я нашел эту статью и довольно долго работал над проблемой, и, наконец, все заработало. Вы можете увидеть, что я делал в первых двух сообщениях в этой теме на форумах Ubuntu. Я надеюсь, что кто-то может развить это немного дальше.

Другие вопросы по тегам