User Tools

Site Tools


doc:appunti:software:kodi_installation

This is an old revision of the document!


Installazione di Kodi

Kodi è il nuovo nome di XBMC, a partire dalla versione 14. Vedere le vecchie pagine XBMC Media Center e Raspberry PI mediacenter con OpenELEC, perché gran parte degli appunti restano validi.

Su Debian 9 Stretch

Si è preferito installare il pacchetto da deb-multimedia.org piuttosto che quello ufficiale fornito da Debian, sia perché è una versione più recente (17.6 invece di 17.1) sia per gestire al meglio le dipendenze da codec proprietari che in Debian non ci sono, ma sono presenti in Deb-Multimedia.

La pacchettizzazione Debian di Kodi dipende da xserver-xorg, tuttavia non abbiamo installato un login manager (lightdm, gdm, o simili) quindi l'host si avvia con il login su console testuale.

ATTENZIONE :!: In configurazioni più recenti, ad esempio RaspiOS basato su Debian 10.8 Buster che installa Kodi 18.7 Leia, il pacchetto Kodi si può installare in modo del tutto diverso, senza xserver-xorg. Vedere Kodi on a Raspberry Pi NAS.

Con Debian 9 Stretch è stato necessario installare i seguenti pacchetti e le loro dipendenze:

  • kodi
  • kodi-standalone
  • libgl1-mesa-dri

Altri pacchetti consigliati:

  • kodi-peripheral-joystick - Necessario se si vuole utilizzare un gamepad come telecomando.
  • kodi-eventclients-kodi-send - Contiene il tool kodi-send necessario per pilotare Kodi da riga di comando.

La formula per avviare kodi suggerita da kodi.wiki è la seguente:

/usr/bin/xinit /usr/bin/dbus-launch --exit-with-session \
    /usr/bin/kodi-standalone -- :0 -nolisten tcp vt7

Senza il pacchetto libgl1-mesa-dri l'avvio di xinit/kodi falliva, lasciando nel kodi_crashlog-*.log questo errore:

ERROR: Failed to find matching visual

Per consentire all'utente non privilegiato kodi (creato apposta) di avviare Kodi è stato necessario modificare il file /etc/X11/Xwrapper.config, mettendo le righe:

allowed_users=anybody
needs_root_rights=yes

In alcuni post viene consigliato anche di eseguire dpkg-reconfigure x11-common. Senza queste modifiche l'esecuzione di xinit/kodi da parte dell'utente non-root dava il seguente errore del server X:

Fatal server error:
(EE) xf86OpenConsole: Cannot open virtual console 7 (Permission denied)

L'utente kodi appartiene ai gruppi di sistema audio, video e plugdev. Il pacchetto policykit-1 è installato, ma non sono state fatte personalizzazioni. In queste condizioni il menu Power di Kodi consente il reboot e lo spengimento anche all'utente non privilegiato.

L'esecuzione xinit/kodi funziona a questo punto da utente non privilegiato, sia da console locale che da terminale remoto. Per avviare il servizio kodi al bootstrap si è creata una unit systemd:

[Unit]
Description = Kodi Media Center

# if you don't need the MySQL DB backend, this should be sufficient
After = systemd-user-sessions.service network.target sound.target

# if you need the MySQL DB backend, use this block instead of the previous
# After = systemd-user-sessions.service network.target sound.target mysql.service
# Wants = mysql.service

[Service]
User = kodi
Group = kodi
Type = simple
ExecStart = /usr/bin/xinit /usr/bin/dbus-launch --exit-with-session /usr/bin/kodi-standalone -- :0 -nolisten tcp vt7
Restart = always
RestartSec = 15

[Install]
WantedBy = multi-user.target

e quindi si è installato, abilitato e avviato il servizio:

systemctl daemon-reload
systemctl enable kodi.service
systemctl start kodi.service

Su Debian 7 Wheezy

Si installa facilmente su Debian Wheezy, basta aggiungere i repository:

deb  https://people.debian.org/~rbalint/ppa/xbmc-ffmpeg xbmc-ffmpeg-wheezy-backports/
deb  http://http.debian.net/debian wheezy-backports main contrib non-free

Seguire le istruzioni del repository, in sintesi:

apt-get install debian-keyring
apt-get install apt-transport-https
gpg --keyring /usr/share/keyrings/debian-keyring.gpg -a --export 21E764DF | sudo apt-key add -

Quindi installare i seguenti pacchetti:

  • alsa-base e alsa-utils per il supporto audio.
  • x11-common e xinit per poter avviare l'ambiente grafico. Non serve un ambiente desktop completo.
  • kodi e kodi-bin il software media center vero e proprio.
  • upower e acpi-support per gestire lo spengimento/reboot dai menu di Kodi (vedere XBMC, altre impostazioni).

Quando serve una dipendenza necessariamente dai bacports:

apt-get -t wheezy-backports install libtag1c2a

Si crea un utente kodi per mandare in esecuzione il software omonimo, deve appartenere ai vari gruppi Debian quali audio, video, plugdev, ecc.

Script start/stop

Lo script per avviare Kodi automaticamente al bootstrap è stato preso dalla pagina Autostart Kodi for Linux, opportunamente aggiornato per il passaggio di nome XBMC → Kodi.

Aggiornamento delle miniature

Per ogni video è possibile visualizzare una miniatura personalizzata al posto di quella creata automaticamente; basta mettere un file JPG oppure PNG nella stessa directory del file video, chiamandolo con lo stesso nome e l'estensione .tbn.

Queste immagini vengono salvate in una cache e in un database, quindi aggiornarle non è semplice. Un metodo drastico è eliminare il file $HOME/.kodi/userdata/Database/Textures13.db e i file in $HOME/.kodi/userdata/Thumbnails/.

Pare che esista uno script più efficace: Texture Cache Maintenance utility.

Catturare una schermata di Kodi

È possibile catturare la schermata corrente di Kodi eseguendo una riga di comando in una shell dell'host stesso. Si deve installare il pacchetto Debian kodi-eventclients-kodi-send e quindi eseguire:

kodi-send --action="TakeScreenshot"

Alla prima esecuzione, nell'interfaccia Kodi, compare la richiesta di directory destinazione, dove verrà salvato il file PNG. Le richeiste successive utilizzeranno la stessa directory (fino al riavvio successivo).

Library data from local .nfo files

NFO files

  • Video ⇒ File ⇒ Aggiungi Video…
  • Imposta contenuto
    • Questa directory contiene: Film
      • Scegli provider di informazioni: Local information only

FIXME Something is not working as wanted:

  • How to override directory names? The folder.jpg is used as thumbnail, but the name is just the directory name.
  • Yatse problem in file browse mode: directories are hidden by the thumbnail of one of the files contained into.

File view, but with library data

  • Impostazioni
    • Impostazioni Media
      • Filmati
        • Sostituisci nomi file con titoli Librerie

The year 1601 problem

We incurred into a problem with movie date in Yatse, the Android application to control Kodi remotely: every movie was presented as released in year 1601. It turned out that you must use the <premiered> tag into the .nfo file, instead of the <year> one. The tag must be in the ISO format YYYY-MM-DD, otherwise it will be not parsed.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- created on 2017-12-30 15:09:33 - by MediaManager -->
<movie>
    <title>L'era glaciale 3 - L'alba dei dinosauri</title>
    <sorttitle>era glaciale 3</sorttitle>
    <set>Era Glaciale</set>
    <genre>Animazione</genre>
    <premiered>2009-01-01</premiered>
</movie>

Layout tastiera italiana

On-Screen keyboard

Stranamente Kodi 14.0 su Debian Wheezy non include il layout italiano per la tastiera on-screen (cioè quella utilizzabile anche con il telecomando o il mouse). I vari layout sono definiti nel file /usr/share/kodi/system/keyboardlayouts.xml e pare che non sia possibile creare un file personalizzato con layout aggiuntivi (almeno con la versione 14 Helix). Questo è un problema perché se si modifica il file, questo sarà sostituito durante un aggiornamento di Kodi.

Ad ogni modo si deve aggiungere una sezione del tipo:

  <layout name="Italian QWERTY">
    <keyboard>
      <row>1234567890'ì</row>
      <row>qwertyuiopè+</row>
      <row>asdfghjklòàù</row>
      <row>zxcvbnm,.-</row>
    </keyboard>
    <keyboard modifiers="shift">
      <row>1234567890?^</row>
      <row>QWERTYUIOPé*</row>
      <row>ASDFGHJKLç°§</row>
      <row>ZXCVBNM;:_</row>
    </keyboard>
    <keyboard modifiers="symbol,shift+symbol">
      <row>/\|@€#[]&lt;&gt;`~</row>
      <row>!"£$%&amp;()='?</row>
      <row>&lt;&gt;,.-+*_^§ç</row>
    </keyboard>
  </layout>

Quindi dall'interfaccia Kodi si seleziona quali layout tenere a disposizione (se sono più di uno sarà possibile cambiare da uno all'altro durante l'input da tastiera virtuale):

  • Sistema, Impostazioni, Aspetto
    • Livello impostazioni ⇒ Standard (o superiore)
    • Internazionale ⇒ Layout della tastiera

Tastiera hardware

Kodi 14.0 su Debian Wheezy ha un bug per cui la tastiera localizzata non funziona: quando si digita un input con la tastiera fisica nell'interfaccia di Kodi, è attivo sempre il layout US. Questo nonostante che il sistema sia configurato correttamente (la console ad esempio produce le lettere accentate come deve essere):

  • dpkg-reconfigure locales
  • dpkg-reconfigure keyboard-configuration

Neanche creando un file /etc/X11/xorg.conf.d/00-keyboard.conf con l'opportuna sezione InputClass e l'opzione XkbLayout si ottiene la localizzazione (eppure la direttiva viene caricata, come si può verificare da /var/log/Xorg.0.log).

Ancor più stranamente: se da una terminale virtuale (Alt+F1) si modifica l'impostazione della tastiera, allora Kodi inizia a funzionare correttamente, senza neanche riavviarlo:

export DISPLAY=:0
setxkbmap it

Il tutto è molto strano, poichè le impostazioni mostrate con setxkbmap -print -verbose 10 non cambiano prima e dopo aver dato il comando. Tutto sommato pare che il workaround migliore sia quello di impostare un autoexec per Kodi in /home/kodi/.kodi/userdata/autoexec.py:

import os
os.system("setxkbmap it")

Personalizzazione Skin

La skin predefinita di Kodi 17 Krypton si chiama Estuary ed è abbastanza soddisfacente, salvo per la dimensione delle miniature dei video nella modalità Muro (Wall): le immagini sono quadrate e troppo piccole. Nella nostra collezione abbiamo invece preparato tutte le miniature (file .tbn) nel formato 4:3.

È sifficiente modificare alcuni file XML e riavviare Kodi per provare un layout più soddisfacente. La directory che contiene la skin è /usr/share/kodi/addons/skin.estuary/xml/, i file sono:

  • View_500_Wall.xml
  • View_54_InfoWall.xml
  • Includes_Home.xml

Impostazioni Consigliate per Kodi 17

Il nostro utilizzo di Kodi è orientato alle seguenti caratteristiche:

  • Si privilegia la consultazione in modalità file, piuttosto che sfogliare i metadati della library. Questo perché in generale la library organizza i contenuti in modalità piatta (ricerca per genere, anno, tag, ecc.), ma non consente una organizzazione strettamente gerarchica, come invece è naturale nella modalità file.
  • I metadati sono forniti localmente con file .nfo e miniature .tbn, non si prevede di fare lo scraping da siti esterni. Questo perché la qualità e la completezza dei fan-siti è abbastanza modesta per i contenuti in italiano.
  • Non interessa la suddivisione dei video in Movies, TV Shows e Music Videos. Soprattutto la categoria TV Shows impone vincoli e gerarchie molto articolate e stringenti, si preferisce classificare tutto come movie e sfruttare l'organizzazione gerarchica per directory.

Ecco i consigli per una corretta visualizzazione dei contenuti video:

  • Assegnare al file un nome che permetta il corretto ordinamento alfabetico (eventualmente quindi usare un prefisso per l'ordinamento delle serie TV, omettere l'articolo, ecc.). Tale nome può essere usato direttamente anche come <sorttitle> nel file .nfo. Se si preferisce è possibile usare l'underscore al posto degli spazi e solo lettere minuscole, secondo la prassi Unix.
  • Creare il file .nfo per assegnare il <title> al video, con eventuali spazi, ecc. Aggiungere anche l'immagine miniatura in formato JPEG, ma con estensione .tbn.
  • Aggiungere la directory come sorgente video e aggiornare la libreria con il suo contenuto (dal menu contestuale della directory scegliere Scan to library). Se non si esegue questo passaggio non sarà possibile scegliere una delle modalità di visualizzazione di Kodi.
  • Nella visualizzazione Video si consiglia la modalità Wall con l'ordinamento per nome file. Come etichetta sarà mostrato non il nome del file, ma il titolo contenuto nel file .nfo (vede sotto le impostazioni Media settings).

Come metadati da includere nei file .nfo ci è sufficiente assegnare:

  • title
  • sorttitle titolo da usare per l'ordinamento
  • genre
  • premiered data dell'uscita nel formato YYYY-MM-DD
  • showtitle, per le serie TV, il nome della serie
  • tag, per una eventuale ricerca veloce tramite library (es. il nome della serie TV).
  • season, per le serie TV, il numero della stagione
  • episode, per le serie TV, il numero dell'episodio, nella stagione

Kodi ha innumerevoli parametri che possono essere personalizzati, ecco alcuni consigli su cosa impostare dal menu Settings (icona a forma di ingranaggio):

  • System settings ⇒ Addons ⇒ Updates ⇒ Never check for updates
  • Media settings ⇒ General ⇒ Show file extensions (No)
  • Media settings ⇒ Videos ⇒ Extract thumbnails from video files (Yes)
  • Media settings ⇒ Videos ⇒ Replace file names with library titles (Yes)
  • Media settings ⇒ Music⇒ Default provider for album information ⇒ Local information only
  • Media settings ⇒ Music⇒ Default provider for artist information ⇒ Local information only

Apertura automatica di una directory all'avvio

Pare che Kodi 17 supporti il file $HOME/.kodi/userdata/autoexec.py. Vedere gli appunti presi per l'autostart con OpenELEC: pare che siano ancora validi (compreso l'import xbmc e i metodi). Anche il wiki di Kodi ha una pagina a riguardo.

Kodi 17 Cheat Sheet

Vedere Keyboard controls.

Key Function Note
Space Pause
X Stop playback
Enter Player controls (OSD)
- (minus) Volume down
+ (plus) Volume up
C Contextual menu Utile ad esempio per mettere in coda una intera directory.
ESC Previous menu Utile anche per chiudere il menu OSD.
S Shutdown menu Per spengere o riavviare l'host.
T Subtitles Attiva o disattiva i sottotitoli.
A Audio delay Aggiusta la sincronizzazione audio-video.
TAB Fullscreen playback
\ (backslash) Fullscreen mode Fullscreen/windowed mode.

Kodi Thumbnails

Come information provider per i video consiglio di utilizzare il Local information only, cioè per ogni file video fornisco il relativo file .nfo con i metadati e un file .tbn con la miniatura (file JPEG o PNG), tuttavia con la versione Kodi 19 Matrix l'utilizzo dei file .tbn non è più supportato correttamente.

In alternativa Kodi fornisce degli “scraper”, cioè degli script che cercano di estrarre informazioni e immagini da pagine web: TMDB (The Movie Database) è il sito più gettonato. L'associazione fra il titolo di un film (in generale in italiano) e la relativa pagina web su TMDB è spesso imperfetta e anche la scelta di miniature, poster e altre immagini lascia spesso a desiderare.

L'utilizzo del file .tbn è deprecato, il sistema attualmente previsto per fornire gli artwork relativi ad un file (ad esempio ad un movie) è quello di creare dei file con nome del tipo <movie>-<artwork_type>.jpg. Nelle impostazioni predefinite esistono diversi tipi di artwork, ad esempio per i file di tipo movie si possono avere (vedi Movie artwork):

poster Immagine in formato portrait (suggerito 2:3) con immagine e titolo oppure logo.
landscape Immagine in formato landscape (suggerito 16:9) con immagine e testo.
fanart Immagine in formato landscape (suggerito 16:9), solo immagine senza scritte.
thumb Immagine senza indicazioni particolari, eventualmente estratta automaticamente dal file video.

Sarà la skin scelta a determinare dove e come viene utilizzato l'artwork. Ad esempio la skin predefinita Estuary utilizza la thumb solo come ultima possibilità, se non esistono le altre. Come impostazione predefinita, se non esistono artwork per un film, viene estratto automaticamente un fotogramma dal file stesso e considerato come artwork di tipo thumb. L'abilità di estrarre un fotogramma da un video per crearne la miniatura è disattivabile da SettingsMediaVideosArtworkExtract thumbnails from video files.

L'artwork di tipo thumb non è espressamente elencata fra gli artwork specifici per i film, ma viene documentata nell'elenco dei tipi di artwork, quindi è supportata, sebbene non sia quella preferita per mostrare i film.

Fino alla versione 18 Leia di Kodi era sufficiente salvare i file .nfo e .tbn nella stessa directory del file video, quindi dal menu contestuale scegliere Scan to library: i metadati venivano aggiornati rileggendo il file .nfo e l'anteprima (thumb) era impostata dal file .tbn.

Con Kodi 19 Matrix la funzione Scan to library (che agisce sul singolo video) cosi come la Update library (che agisce su tutti i file video) rilegge solo l'eventuale file .nfo, ma ignora la miniatura .tbn. Fino alla versione 18 di Kodi esisteva anche l'add-on Artwork Beef, in grado di aggiungere gli artwork (non solo miniature, ma anche poster, fanart, ecc) sia da siti internet che da file locali.

Forzare l'uso dei .tbn con Kodi 19 Matrix

È ancora possibile utilizzare i file .tbn con Kodi 19, facendoli acquisire come artwork di tipo thumb, tuttavia si tratta di una funzione deprecata e non supportata.

Refresh

Dop aver eseguito uno Scan to library sul singolo file oppure un Update library generale, il video avrà la miniatura generica (icona della cinepresa bianca su sfondo nero).

  • Aprire il menu contestuale sul video, scegliere Information
  • Dalla schermata delle informazioni eseguire Refresh
  • Chiudere la schermata con Esc.

Kodi HTTP API

Si deve abilitare la API HTTP: dal menu SettingsServicesControl si attiva Allow remote control via HTTP. Eventualmente il servizio va protetto con una login e una password, poiché sarà aperto sulla rete locale.

L'interazione con la API può essere implementata con uno script Python e la libreria requests, oppure con strumenti da riga di comando tipo wget o curl. L'URL base per le richieste è qualcosa del tipo http://kodi:@localhost:8080/jsonrpc.

Per aggiornare la miniatura dal file .tbn locale sarà sufficiente chiamare la funzione VideoLibrary.RefreshMovie passando il movieid del video. Ecco un esempio della stringa JSON da inviare al servizio:

{
    "id": 100,
    "jsonrpc": "2.0",
    "method": "VideoLibrary.RefreshMovie",
    "params": {
        "movieid": 1652,
        "ignorenfo": False
    }
}

Per avere un elenco dei file video presenti in libreria, con il relativo movieid e la relativa thumbnail è possibile chiamare la funzione VideoLibrary.GetMovies, componendo una stringa JSON del tipo:

{
    "id": 100,
    "jsonrpc": "2.0",
    "method": "VideoLibrary.GetMovies",
    "params": {
        "properties": [ "title", "thumbnail", "file" ]
    }
}

Dal risultato potremmo estrarre l'array request_text['result']['movies'], in particolare l'attributo thumbnail potrà essere:

Stringa vuota Nessuna miniatura è stata associata al video.
image://video@<video_path.mkv> Un fotogramma estratto dal video e salvato nella cache.
image://<thumbnail_path.tbn> Una miniatura da un file locale e salvata nella cache.

Nell'attributo thumbnail di tipo image:// il percorso del video o della miniatura è assoluto e codificato come URL, cioè ad esempio il carattere slash (/) è escaped come %2f.

Thumbnail da file locale con Kodi 19 Matrix

Per chi come me ha una collezione storica di file .tbn, la soluzione più efficace per utilizzarli con Kodi 19 Matrix è quella di rinominare tutti i file in <movie>-thumb.jpg ed eseguire una nuova Update library.

Si tenga presente che la skin Estuary utilizza di preferenza l'artwork poster per mostrare il film nella modalità Wall. In tal caso l'immagine in orientamento portrait occupa tutto il rettangolo assegnato al film. Se l'artwork poster non esiste allora la skin presenta nello stesso rettangolo l'artwork thumb in orientamento landscape corredato da una etichetta sottostante con il titolo del film recuperato dai metadati oppure con il nome del file.

doc/appunti/software/kodi_installation.1643873290.txt.gz · Last modified: 2022/02/03 08:28 by niccolo