Eu encontrei este artigo do lifehacker no LIRC . Isso sugere que você instale o pacote lirc-x. Se você fizer isso e, em seguida, modificar seu arquivo .lircrc como estou prestes a mostrar e, em seguida, executar o programa irxevent (em uma janela de terminal ou como parte da inicialização - observe que você pode usar irxevent -d para bifurcar e executá-lo em segundo plano), você pode então navegar pelo iniciador Unity. Mas há uma desvantagem - quando o irxevent está em execução e você entra em um programa que sabe como operar com o LIRC (como o XBMC), o que acontece é que suas chaves remotas são recebidas pelos dois programas e ambas tentam agir nelas. , com resultados semi-previsíveis. Eu ainda não descobri uma maneira de contornar isso.
Aqui está o que eu adicionei ao meu arquivo .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
Esta é apenas uma demonstração que define apenas seis botões no controle remoto (as teclas de seta, OK e Play, os dois últimos enviando o equivalente à tecla Return / Enter no teclado. Basta fazer a navegação básica Agora, se houvesse apenas uma maneira de matar o irxevent quando um programa compatível com LIRC estivesse em execução e reiniciá-lo quando você saísse de todos esses programas, sem colocar muita carga nos recursos do sistema, isso funcionaria muito bem!
NOTA: Existe uma página de documentação no irxevent aqui . Ao observar que finalmente consegui deduzir que, se você substituir CurrentWindow por unity-2d-shell, ele só funcionará no Launcher. Mas o problema é que ele traz o Launcher para o primeiro plano (às vezes), mesmo se você estiver dentro de outro programa. Supõe-se que haja uma maneira de usar uma opção "Foco", de modo que os pressionamentos de tecla só funcionarão se o programa de destino tiver foco. Mas além da questão óbvia de "como você dá foco ao Launcher em primeiro lugar depois de sair de outro programa?", O outro problema é que usar o Focus da maneira mostrada na documentação, por exemplo ...
begin
prog = irxevent
button = KEY_UP
repeat = 0
config = Key Up Focus unity-2d-shell
end
... parece matar completamente o funcionamento do irxevent - ele não responde ao botão pressionado. Remova a palavra "Focus" e ela funcionará bem novamente, mas interfere em outro software.
A única maneira que eu vejo que pode fazer este trabalho é ter uma maneira de matar o irxevent quando qualquer software em uma "lista de exclusões" estiver rodando, e reiniciá-lo se nenhum desses programas estiver rodando. Mas eu não sei como fazer isso, e espero que haja uma solução mais elegante.