Могу ли я настроить 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. Я надеюсь, что кто-то может развить это немного дальше.