Ajustando o Controle Remoto (In-Kernel LIRC)

3

Eu recentemente reconstruí minha caixa MythTV usando o Mythbuntu 12.04, para aproveitar o hardware mais novo (Ivy Bridge).

Na minha versão anterior, usei lirc para gerenciar o controle remoto, ou seja, o mapeamento de códigos-chave - > keypresses - > chaves de aplicativos; foi uma jornada e tanto para aprender tudo, e acabei ficando bastante confortável com a forma como tudo funcionava.

O que eu tenho:

  • Eu tenho um controle remoto Chinavasion e dongle USB barato, que eu encontrei vários artigos sobre; estes em grande parte giram em torno trabalhando com o XBMC (interessante, mas eu não penso diretamente aplicável) e também em torno de obter um controle remoto Harmony (é um Chinavasion CVSB-983 - muito útil, pois eu precisava disso para ter meu Harmony 900 funcionando).
  • Mythbuntu 12,04 64 bits
  • MythTV 0,25 (provavelmente irrelevante)

Como é agora
Quando eu conecto isso, ele 'funciona'. O que é ótimo, exceto que o Ubuntu o usa nativamente e evita alguns do botão pressiona de passar para o Myth. Por exemplo, eu posso enviar um botão do controle remoto que equivale a Ctrl-Alt-A (que eu suponho que o Ubuntu não esteja interessado), e então capturar isso no Mythfrontend, mas o controle remoto é capturado pelo Ubuntu (que exibe um grande círculo com uma linha, já que não há media player carregado). Eu entendo que isso é porque o lirc é mesclado no kernel agora, e eu gosto disso.

O que eu fiz até agora:

Encontrou o dispositivo usando lsusb :

$ lsusb  
Bus 001 Device 004: ID 073a:2230 Chaplet Systems, Inc. infrared dongle for remote

Encontrou o número do dispositivo do evento:

$ cat /proc/bus/input/devices  
I: Bus=0003 Vendor=073a Product=2230 Version=0110
N: Name="HID 073a:2230"
P: Phys=usb-0000:00:1a.0-1.2/input0
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/input/input5
U: Uniq=
H: Handlers=sysrq kbd mouse1 event5 js0 
B: PROP=0
B: EV=10001f
B: KEY=4c37fff072ff32d bf54445600000000 ffffffffff 30c100b17c007 ffa67bfad951dfff febeffdfffefffff fffffffffffffffe
B: REL=343
B: ABS=100030000
B: MSC=10

Testei a entrada com evtest (pressionei Reproduzir ):

$ sudo evtest /dev/input/event5  
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x73a product 0x2230 version 0x110
Input device name: "HID 073a:2230"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 1 (KEY_ESC)
    Event code 2 (KEY_1)
    Event code 3 (KEY_2)
    Event code 4 (KEY_3)
    Event code 5 (KEY_4)
    Event code 6 (KEY_5)
    Event code 7 (KEY_6)
<------------snipped lots of 'Event code' lines------------>
Testing ... (interrupt to exit)
Event: time 1336435683.230656, -------------- SYN_REPORT ------------
Event: time 1336435683.246648, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00cd
Event: time 1336435683.246652, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1336435683.246655, -------------- SYN_REPORT ------------

Testado showkey , novamente para a tecla Reproduzir :

$ sudo showkey -s
kb mode was RAW
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]

press any key (program terminates 10s after last keypress)...
0xe0 0x22 0xe0 0xa2 

O que eu quero:

  • Eu gostaria de uma maneira de digitalizar os botões de entrada pressionados, se o método acima não estiver correto.
  • Eu gostaria de remapear cada pressionamento de botão para algo que o Ubuntu / Unity irá ignorar, ou melhor ainda, passar a tecla diretamente para Myth (eu suspeito que isso depois só é possível com o lirc, mas posso estar errado).
  • Eu realmente gostaria de fazer isso com os drivers in-kernel, ou seja, sem carregar explicitamente o lirc; se é assim que o mundo está indo, prefiro encontrar uma maneira de mapear o comportamento atual para o que eu quero, em vez de forçar o arranjo "antigo" de carregar o lirc fora do kernel. Aprender algo novo também vale a pena!

Meu palpite:
Eu estou supondo que isso vai exigir o uso de setkeycodes , mas teve problemas para encontrar informações suficientes para configurar isso.

Qualquer ajuda muito apreciada!

    
por Geoff 08.05.2012 / 02:34

2 respostas

1

Acabei de percorrer um caminho semelhante para descobrir o novo lirc do kernel, para mim o momento em que percebi que um controle remoto é agora apenas outro teclado.

Como uma alternativa para showkey / evtest, você pode executar sudo ir-keytable -t para detectar pressionamentos de botões remotos. Embora eu não pense que oferece muita informação nova.

Para ajustar o mapeamento de scancodes remotos para chaves, você precisa criar seu próprio arquivo de configuração baseado em / lib / udev / rc_keymaps /.

Usando a saída evtest, você pode usar os campos KEY_X e value para ajudar a identificar qual arquivo rc_keymaps está sendo usado. Copie esse arquivo correspondente e edite para remapear as teclas como desejar. Você pode carregar sua configuração modificada com sudo ir-keytable -c -w newfile . Agora você pode testar sua nova configuração com o evtest.

Se você não conseguir flexibilidade suficiente para modificar os mapas de teclado, ainda poderá usar o daemon lirc do userspace. Você pode configurar o lircd para puxar do driver dentro do kernel e então configurar o lircd como normal.

Esses dois links, link e O link , tem muitas informações sobre como configurar e depurar as configurações.

    
por Marc 21.09.2012 / 07:29
2

O botão Play do Remote é consumido pelo media-keys plugin para o gnome-settings-daemon. Para desativá-lo e permitir que o MythTV receba o evento, faça:

$ gsettings set org.gnome.settings-daemon.plugins.media-keys active false

Além disso, você desejará desabilitar / desinstalar o xfce4-volumed para impedir que ele retenha o XF86AudioLowerVolume , XF86AudioRaiseVolume e XF86AudioMute .

Você pode mapear algumas chaves do gerenciador de janelas também (por exemplo, no meu caso, Ctrl + Alt + D é usado para iniciar o Live TV, enquanto o xfwm4 usa isso para a ação show_desktop). Isso pode ser feito em "Configurações > Gerenciador de Janelas", guia "Teclado".

Além disso, você pode ativar o controle "Mouse" para enviar eventos de teclado usando o script mythtv-mouse2kbd.py que eu descrevi em minha postagem no blog .

    
por Roman 21.10.2012 / 11:43