09 septiembre 2018

Media center con Raspberri Pi y Kodi

Esta entrada describe el proceso de instalación y configuración de una Raspberri Pi como ordenador de propósito general, y también como media center mediante Kodi.

1. Hardware necesario

He optado por comprar las piezas por separado, y realizar el montaje y la configuración a mano. Como alternativa, es posible comprar un pack todo-en-uno, con todo el software ya instalado y configurado. Los enlaces son a los productos de Amazon, pero igual pueden conseguirse en otras tiendas.
  • Raspeberry Pi 3 Modelo B
  • Tarjeta de memoria SD para contener el sistema operativo. Mínimo 8 GB, he optado por una de 32 GB para disponer de espacio para instalar todo el software que quiero probar, y como repositorio inicial de contenido. Importante que sea lo más rápida posible.
  • Fuente de alimentación: la Pi tiene alimentación micro-USB, pero no puede alimentarse de un USB de un ordenador o de un televisor, que proporcionan poca potencia. Es necesario un cargador que proporcione como mínimo 2.5 A. También a destacar que el cargador tenga interruptor, para poder apagar la Pi sin necesidad de desenchufarla.
    He optado por un pack de cargador + caja.
  • Cable HDMI: busqué un cable de alta velocidad, que soportase CEC, para ver si podía controlar la Pi desde el mando del televisor.
  • Teclado inalámbrico: inicialmente no lo compré, pero después de trastear bastante y conectarle un ratón y teclado normal, un inalámbrico con touchpad es imprescindible.
  • Cable de red: si es posible, mejor conectar por cable de red al router que mediante wifi.

2. Configuración de la tarjeta SD

Inicialmente la tarjeta viene vacía, por lo que hay que instalarle el sistema operativo. El sistema operativo más adecuado es Raspbian, un sistema operativo estilo Linux basado en Debian, especializado para el hardware de la Pi.
Los pasos a dar están muy bien explicados en https://www.raspberrypi.org/learning/software-guide/.
De las dos opciones, instalar NOOBS y desde aquí instalar Raspbian, o volcar directamente una imagen de Raspbian a la SD, he cogido la última.
Los pasos han sido:
  • Descargar SD Formatter 4.0, para formatear la tarjeta, e instalarlo.
  • Introducir la tarjeta SD en un lector de tarjetas, y formatearla con SD Formatter. Mucho cuidado al seleccionar la letra de la unidad, porque borra todos los datos que exitan en esa unidad.
  • Descargar la imagen de Raspbian de su página de descargas. He elegido Raspbian Stretch with Desktop, que ocupa más tamaño (sobre 4.9 GB), pero lleva mucho más software instalado por defecto.
  • Descargar e instalar 7zip para descomprimir correctamente el zip de la imagen, que al ser de más de 4 GB en Windows 7 no se descomprime correctamente.
  • Descomprimir el fichero 2018-06-27-raspbian-stretch.zip, para obtener la imagen 2018-06-27-raspbian-stretch.img.
  • Descargar Etcher, utilidad para volcar imágenes a tarjetas SD. No necesita instalación.
  • Volcar la imagen sobre la SD usando Etcher.


3. Primer arranque

Tras conectar todo el cableado, el primer intento aunque se ven activos los leds en la Pi, no muestra imagen en la televisión.
Buscando en los foros he encontrado dos sugerencias en el foro de Raspberry Pi y en elinux sobre forzar a Pi a mostrar la salida por HDMI.
Hay que quitar la tarjeta SD de la Pi, volverla a conectar al ordenador, y editar el fichero config.txt que se encuentra en la raíz de la tarjeta y descomentar la siguiente entrada:
hdmi_safe=1
La entrada hdmi_safe fuerza a la Pi a arrancar un un modo seguro para HDMI, lo más simple posible.
Con este cambio, al volver a arrancar la Pi conectada al televisor, por fin se muestra la imagen de Raspbian arrancando!!!.

Con hdmi_safe se arranca a una resolución de 640x480, pero ya nos permite realizar los primeros cambios:
  • El primer cambio es modificar el password por defecto del usuario "pi", entrando en "Preferencias -> Configuración de Raspberry Pi", en la pestaña "Sistema", hay un botón "Cambiar clave".
  • El segundo cambio es habilitar SSH y VNC, como veremos en el siguiente punto.

4. Conexión remota

Para facilitar la configuración, el primer paso es habilitar el acceso remoto, para poder conectar desde el ordenador y no tener que estar delante del televisor con el teclado y ratón.
Hay dos formas de conexión: por SSH y por VNC. La primera en modo línea de comandos, y la segunda en modo gráfico completo, controlando todo el desktop.
Para habilitar SSH y VNC, entrando en Preferences -> Configuración de Raspberry Pi", en la pestaña Interfaces, habilitar "SSH" y "VNC".

4.1. Cliente VNC

Descargar el cliente de VNC desde RealVNC. He optado por la versión standalone de 64-bits, que no necesita instalación. Al arrancar el cliente VNC te pide inicialmente la IP de la Pi (se puede obtener ejecutando ifconfig en una terminal en la Pi). A continuación solicita usuario (el usuario pi), y el password (que cambiamos en un paso anterior).

4.2. Cliente SSH

Un cliente simple de SSH para Windows es Putty, que se puede descargar como ejecutable sin necesidad de instalación.

5. Afinar salida gráfica

Para mejorar la imagen mostrada en la TV, hay que ajustar alguno de los parámetros de configuración.
La información sobre todos los parámetros disponibles para afinar la salida gráfica está en aquí.
Al conectar por SSH a la Pi, se puede ejecutar el comando tvservice, que nos muestra los modos disponibles para el televisor actual, para el grupo 1 - CEA (especificaciones para televisión) y el grupo 2 - DMT (especificaciones para monitores).
Viendo la salida mostrada por tvservice, he añadido al fichero config.txt (este fichero una vez arrancada la Pi se encuentra en el directorio /boot, pueden hacerse cambios conectado por SSH y reiniciando después, sin necesidad de estar extrayendo la tarjeta SD de nuevo):
#hdmi_safe=1
hdmi_ignore_edid=0xa5000080
hdmi_force_hotplug=1
hdmi_group=1
hdmi_mode=19
hdmi_drive=2
config_hdmi_boost=4

6. Instalar Kodi

Siguiendo instrucciones detalladas en Raspberry Pi Media Center: How to Install Kodi on Raspbian.

6.1. Configuración inicial

Lo primero ha sido ajustar la configuración para asegurar un mejor rendimiento para Kodi.
A través de "Preferencias -> Configuración de Raspberry Pi" no se pueden hacer todos los cambios de configuración, hay que utilizar sudo raspi-config. He ampliado la memoria de la GPU a 256 MB, habilitado los codecs de vídeo, y cambiado el driver de vídeo a non-GL, que acaban añadiendo estas dos entradas a /boot/config.txt:
gpu_mem=256
start_x=1

6.2. Instalar paquetes

En primer lugar, actualizamos el sistema con:
sudo apt update
sudo apt upgrade
Y seguidamente instalamos Kodi con:
sudo apt-get install kodi
sudo apt-get install kodi-pvr-iptvsimple
El paquete kodi-pvr-iptvsimple contiene el cliente IPTVSimple, un add-on para poder utilizar Kodi para ver canales de televisión. Aunque no se tenga pensado utilizar esta funcionalidad, si no se instala, al intentar añadir nuevos repositorios saltará un mensaje del estilo:
The PVR manager has been enabled without any enabled PVR add-on.
Enable al least one add-on in order to use the PVR functionality.
En Raspbian los add-ons para PVR no se pueden instalar desde dentro de Kodi, sino que se tiene que instalar el paquete con apt-get. IPTVSimple es uno de ellos, se puede listar todos los disponibles con
sudo apt-get search kodi

6.3. Arrancar Kodi automáticamente

Se puede arrancar Kodi automáticamente editando el fichero ~/.config/lxsession/LXDE-pi/autostart, añadiendo al final la línea:
@kodi
Yo he prefrido no hacerlo, y que arranque como un ordenador de propósito más general.

6.4. Kodi y VNC

Por defecto, Kodi no puede visualizarse por VNC, según este foro Kodi usa un interfaz gráfico Open GL – ES que no es visible en VNC.
Se puede instalar un servidor VNC compatible con Kodi llamado dispmanx_vnc. Las instrucciones son sencillas:
  • Instalar las dependencias:
    sudo apt-get install g++ libvncserver-dev libconfig++-dev
    sudo apt-get install libgles2-mesa-dev
  • Descargar el código de dispmanx_vnc, y descomprimir en un directorio, por ejemplo, ~/software/dispmanx_vnc-master/.
  • Compilar con make:
    cd ~/software/dispmanx_vnc-master/
    make
  • Arrancar el servidor VNC en otro puerto que no sea el estándar, para que no colisione con el VNC por defecto que está instalado:
    ./dispmanx_vncserver --port=6543
    Sin embargo, falla con el siguiente error:
    2018-09-02 23:21:41.533 [libvnc] Listening for VNC connections on TCP port 6543 2018-09-02 23:21:41.533 [libvnc] rfbListenOnTCP6Port: error in bind IPv6 socket: Address already in use 2018-09-02 23:21:41.533 [dmxvnc] open /dev/uinput returned -1 2018-09-02 23:21:41.533 [dmxvnc] First write returned -1 2018-09-02 23:21:41.533 [dmxvnc] ioctl UI_DEV_CREATE returned -1 2018-09-02 23:21:41.535 [dmxvnc] Exception: Error creating uinput device: -1
Este error está pendiente de estudiar más a fondo... :-)

7. Punto de partida...

Con esto, la Pi ya está disponible para navegar por Internet, para enseñar a programar a los peques de la casa utilizando Scratch 2 (que viene instalado por defecto), y ver películas, series, documentales, etc. etc.
Quedan muchas otras cosas por probar:
  • El control remoto desde la aplicación para Android Kore.
  • Instalar emuladores MAME de juegos.
  • Instalar cientos de add-ons, más o menos legales.
  • ....

No hay comentarios: