Kodi ed Ubuntu

Nel 2009 quando ho iniziato la mia esperienza con Xbmc, il wiki ufficiale non era certamente completo come adesso, in modo particolare per Linux.
Vista la scarsa documentazione, ho cercato di riunire in un solo documento tutte le informazioni utili per approntare un mediacenter basato su Xbmc ed in particolare sulla distribuzione Linux, Ubuntu.

L’hardware di riferimento è ovviamente quello a mia disposizione, ma spero che questa guida possa essere utile anche per configurazioni diverse.

Dal 23 Dicembre 2014, Xbmc ha cambiato nome ed è diventato ufficialmente Kodi.

Con l’occasione, ho iniziato un aggiornamento ed una profonda revisione di questo documento, che continua a basarsi su Ubuntu, ma è stato aggiornato alle nuove tecnologie (systemd tra tutte).

La dotazione hardware del mio media center è stata per quasi 5 anni la seguente:

Case: Antec Fusion Remote Black (dotato di lcd SoundGraph Imon)
Motherboard: DFI LanParty JR GF9400-T2RS con scheda video integrata Nvidia GeForce 9400
CPU: Intel E5300 (64bit)
RAM:
2 GB DDR2
Hard-Disk: Samsung Spinpont F4 2 TB

Successivamente sono passato a un disco SSD da 64gb solo per Kodi ed Ubuntu. I contenuti (foto, video, etc..) li ho trasferiti su un NAS Synology (condivisi tramite Samba).
Ad Agosto 2015 ho deciso di potenziare ulteriormente il media center in modo da poter riprodurre video codificati in x265/HEVC e di usarlo anche come console da gioco.

Questa è la nuova configurazione:

Case:  (inalterato)
Motherboard: Asus H81M-Plus
Scheda video: EVGA GTX1060 Gaming
CPU: Intel I3-4350 (64bit)
RAM:
8 GB DDR3
Hard-Disk: Samsung SSD 850 EVO da 250GB

Personalizzare Ubuntu per eseguire automaticamente Kodi:

Ho scelto Ubuntu Minimal, per mantenere il sistema quanto più leggero e veloce possibile, installando solo i pacchetti strettamente necessari.

  1. Ho installato Ubuntu minimal 16.04 LTS (64 bit) utilizzando l’opzione “esperto”.
  2. In fase di installazione del sistema, oltre a root, ho creato un utente normale: kodi.
  3. Ho installato i pacchetti per localizzare sia inglese che in italiano.
  4. Il disco è stato partizionato solo con due partizioni: boot e / (filesystem ext4 con opzioni noatime, discard). Non ho creato la partizione di swap, avendo 8gb di ram a disposizione e non facendo uso di sospensione o ibernazione.
  5. Non ho installato alcun software extra (per es. ubuntu server, etc..)
  6. Ho scelto di usare un kernel generico, ma selezionando l’opzione che richiede di caricare solo i moduli necessari al sistema (vedi /etc/initramfs-tools/initramfs.conf) .

Successivamente, al primo login, ho aggiunto l’utente kodi ai gruppi di sistema: audio, video, cdrom.

Ho installato openssh-server, per accedere anche da remoto al sistema. Inoltre ho installato Openbox, un window manager leggero (per usare senza troppe complicazioni, oltre a Kodi,  anche applicazioni grafiche come Chrome o  Retroarch).

Per consentire il logon automatico, installare anche il pacchetto xserver-xorg-legacy (in passato era X11-common):

apt install openssh-server openbox xserver-xorg-legacy xinit dbus-x11 x11-xserver-utils

Dovrete aggiungere il pacchetto necessario alla vostra scheda video, come ad esempio, xserver-xorg-video-intel per le schede video integrate (e non) nelle CPU Intel.

Ricordarsi di modificare /etc/X11/Xwrapper.config  aggiungendo:

allowed_users=anybody
needs_root_rights=yes

Riconfigurare il pacchetto xerver-xorg-legacy per mantenere le impostazioni appena indicate anche per successivi update:

dpkg-reconfigure xserver-xorg-legacy

Per lanciare Openbox automaticamente al boot,  aggiungere il seguente script /etc/systemd/system/kodi.service:

[Unit]
Description = Kodi Media Center
After = systemd-user-sessions.service network.target sound.target

[Service]
User = kodi
Group = kodi
Type = simple
ExecStart = /usr/bin/xinit /usr/bin/dbus-launch --exit-with-session /usr/bin/openbox-session -- :0 -nolisten tcp vt7
Restart = on-abort
RestartSec = 5

[Install]
WantedBy = multi-user.target

Deve essere abilitato con:

systemctl enable kodi.service

Successivamente, per far sì che Openbox avvii automaticamente Kodi (insieme ad altre cose utili) è necessario creare /home/kodi/.config/openbox/autostart.sh:

#!/bin/sh

xrandr --dpi 200
setxkbmap -model pc105 -layout it
xsetroot -solid black
/usr/bin/kodi&

Installare e configurare Kodi:

Il modo più semplice e immediato per installare kodi è usare il pacchetto pre-compilato dal loro repository:

apt install python-software-properties pkg-config 
apt install software-properties-common 
add-apt-repository ppa:team-xbmc/ppa
apt update 
apt install kodi

Per consentire all’utente kodi la gestione delle operazioni di shutdown e reboot e montare dischi esterni, dovrete installare i pacchetti policykit-1, udisk2. Dovete creare quindi un file /etc/polkit-1/localauthority/50-local.d/custom-actions.pkla contenente le seguenti istruzioni:

[Actions for kodi user]
Identity=unix-user:kodi
Action=org.freedesktop.udisks2.*;org.freedesktop.login1.*
ResultAny=yes
ResultInactive=no
ResultActive=yes

Driver NVidia:

Consiglio di scaricare l’ultima versione dei driver proprietari NVidia a 64bit dal sito ufficiale. In alternativa, potete usare la versione fornita da Ubuntu, che è stabile, ma piuttosto vecchia.
Ricordarsi di installare le librerie Ubuntu libvdpau per usufruire dell’accelerazione VDPAU fornita dai driver NVidia (di recente, dovrebbero essere entrate a far parte delle dipendenze del pacchetto Kodi).

Ricordarsi di impedire il caricamento dei driver NVidia Opensource modificando /etc/modprobe.d/blacklist.conf:

blacklist nouveau 

Se eseguite l’installer dei driver NVIDIA da riga di comando, probabilmente vi mancheranno delle librerie, che vi saranno richieste (Xorg non dovrebbe essere presente, se non avete installato pacchetti aggiuntivi alla vostra Ubuntu Minimal).

Per mostrare nel “System Info” di Kodi la temperatura della GPU Nvidia si utilizzano le impostazioni avanzate.
Lo script /home/kodi/.kodi/userdata/advancedsettings.xml va modificato in questo modo:

<advancedsettings>
   <splash>false</splash>
   <cputempcommand>echo "$(sensors | egrep CPUTIN | sed -ne 's/CPUTIN: \+[-+]\([0-9]\+\).*/\1/p') C"</cputempcommand>
   <gputempcommand>echo "$(nvidia-smi -q -d TEMPERATURE | grep 'GPU Current Temp' | grep -Eo '[0-9]{1,3} [C|F]')"</gputempcommand>
</advancedsettings> 

Usare Grub come boot manager:

Usare Extlinux come boot manager:

Ho sempre trovato Grub eccessivamente contorto. Extlinux (Syslinux) invece è semplice, veloce e leggero.
Solo il supporto ancora incompleto alla partizioni EFI/UEFI potrebbe essere una limitazione, specie per sistemi dual-boot con Windows 7 o 10.
Nella directory /boot ho creato una directory extlinux e ho rimosso tutti i pacchetti collegati a Grub (grub2, grub2-common etc..). Per evitare che nei futuri aggiornamenti, Grub o Lilo non siano più installati, ho copiato in /etc/apt/preferences.d/ il file grub-disabled-pin-1000:

Package: grub*
Pin: version *
Pin-Priority: -1000
Package: grub*:i386
Pin: version *
Pin-Priority: -1000
Package: lilo*
Pin: version *
Pin-Priority: -1000
Package: lilo*:i386 
Pin: version * 
Pin-Priority: -1000

Modificando il file /etc/kernel-img.conf nel modo seguente, otteniamo il risultato di avere sempre aggiornati i symlinks al kernel e all’initrd più recenti nella stessa dir di /boot:

# Kernel image management overrides
# See kernel-img.conf(5) for details
do_symlinks = yes
do_bootloader = no
do_initrd = yes
link_in_boot = yes

Nelle distribuzioni recenti di Ubuntu non vengono più creati questi link, unicamente per forzare la loro creazione la prima volta (ammetto che è un sistema molto poco raffinato) possiamo agire come segue:

apt install --reinstall linux-image-X.X.X

In questo modo, nel file di configurazione di Extlinux /boot/extlinux/extlinux.conf  potremo fare riferimento al kernel e all’initrd più recenti:

UI vesamenu.c32

DEFAULT k
PROMPT 0
MENU BACKGROUND splash.jpg
MENU HIDDEN
TIMEOUT 30

MENU RESOLUTION 1920 1080
MENU WIDTH 44
MENU HSHIFT 100
MENU ROWS 2
MENU VSHIFT -11
MENU TIMEOUTROW -1
MENU TABMSGROW -3
MENU CMDLINEROW -1

MENU COLOR border       30;44   #00000000 #00000000 none
MENU COLOR sel          7;37;40 #e0ffffff #20ffffff all
MENU COLOR unsel        37;44   #50ffffff #00000000 std
MENU COLOR help         37;40   #c0ffffff #00000000 std
MENU COLOR timeout_msg  37;40   #80ffffff #00000000 std
MENU COLOR timeout      1;37;40 #c0ffffff #00000000 std
MENU COLOR msg07        37;40   #90ffffff #00000000 std
MENU COLOR tabmsg       31;40   #30ffffff #00000000 std

LABEL k
MENU LABEL Kodi
LINUX ../vmlinuz
APPEND initrd=../initrd.img root=/dev/sda2 quiet vga=current

LABEL 10
MENU LABEL Windows 10
KERNEL chain.c32
APPEND hd0 3

L’esempio precedente mostra come configurare extlinux per mostrare al boot uno ‘splash screen’ in formato png o jpeg (non sono supportate quelle ‘progressive’).
In questo modo è possibile realizzare un sistema dual boot con Windows e Kodi (Ubuntu), in modo del tutto pulito, senza mostrare alcuna scritta o log del kernel.

Se /dev/sda è il vostro disco di boot, è sufficiente eseguire i seguenti comandi per installare Extlinux:

apt install extlinux syslinux
extlinux --install /boot/extlinux
dd if=/usr/lib/EXTLINUX/mbr.bin of=/dev/sda bs=440 count=1 

Fate attenzione! perchè l’ultimo comando riscrive l’MBR (ovviamente senza toccare la tabella delle partizioni) e di fatto rimuove Grub o il boot record di Windows, se presenti.

Ricompilazione e scelta moduli da caricare:

Per avere un sistema più leggero (e semplice da gestire) potrebbe essere utile impedire il caricamento di alcuni moduli del kernel, anche in presenza dell’hardware che gestiscono. Per esempio, per non caricare i moduli parport ed lp è necessario aggiungere a /etc/modprobe.d/blacklist.conf:

blacklist lp
blacklist parport
blacklist parport_pc
blacklist ppdev 

Inoltre, va commentato o rimosso il modulo lp dal file /etc/modules e quindi eseguito:

update-initramfs -u

Anche ricompilare il kernel non è un passo strettamente necessario, ma aiuta a velocizzare al massimo i tempi di boot. Per brevità suppongo che siate in grado di scegliere cosa togliere o cosa aggiungere al kernel in base alla vostra configurazione hardware. Di seguito le istruzioni minimali per compilare un kernel “ubuntu-way” e generare il relativo pacchetto .deb (al posto di X.X.X inserire la versione corrente del kernel in questione).

apt install build-essential fakeroot kernel-package 
apt install linux-source 
apt install libncurses5-dev 
cd /usr/src 
tar -xjf linux-source-X.X.X.tar.bz2 
ln -s linux-source-X.X.X linux 
cd linux 
make menuconfig CONCURRENCY_LEVEL=3 fakeroot make-kpkg --append-to-version -xbmc kernel_image --initrd

Potrebbe essere utile, nel caso di passaggio ad una nuova “major release” del kernel, eseguire il comando make oldconfig per allineare, per quanto possibile, il vecchio file .config alla nuova versione del kernel. Dopo questo si può passare al vecchio make menuconfig per configurare nei dettagli il proprio kernel.

Naturalmente è possibile ricompilare anche Kodi. Dovete scaricare i sorgenti di kodi (consiglio d’installare ccache per velocizzare le compilazioni) .

Leggere docs/README.ubuntu e README.linux per individuare le dipendenze e stabilire i pacchetti da installare prima di poter compilare:

./bootstrap
./configure --disable-debug
make -j2; make install

Display LCD Imon:

Per gestire il display LCD Imon 16×2 presente sul mio case, ho dovuto installare il pacchetto Ubuntu lcdproc.
Anche Kodi richiede l’installazione di uno specifico addon, chiamato XBMC LCDproc.
Ho dovuto configurare lcdproc con il nuovo cme (ma il vecchio file di configurazione non andava bene?) impostando il driver per imonlcd:

cme edit lcdproc -force -ui curses

Così facendo si ottiene il file di configurazione /etc/LCDd.conf:

## This file was written by cme command.
## You can run 'cme edit' to modify this file.
## Run 'cme list' to get the list of applications available on your system
## You may also modify the content of this file with your favorite editor.

[server]
Backlight=on
Driver=imonlcd
DriverPath=/usr/lib/x86_64-linux-gnu/lcdproc/
Heartbeat=off
NextScreenKey=Right
PrevScreenKey=Left
ReportToSyslog=yes
ServerScreen=blank
ToggleRotateKey=Enter
WaitTime=4

[imonlcd]
Device=/dev/lcdimon
OnExit=2
Protocol=1

[menu]
DownKey=Down
EnterKey=Enter
MenuKey=Escape
UpKey=Up

Questa è la regola udev /lib/udev/rules.d/60-lcdproc.rules che crea un symlink fisso al device /dev/lcdX (dove X può variare di volta in volta) e notifica a systemd la sua disponibilità:

KERNEL=="lcd[0-9]*", ATTRS{idVendor}=="15c2", SYMLINK+="lcdimon", TAG+="systemd"

In questo modo possiamo fare in modo che /lib/systemd/system/LCDd.service possa essere eseguito al momento giusto ed essere disponibile per Kodi, questa è la mia versione modificata:

[Unit]
Description=LCD display daemon
Documentation=man:LCDd(8) http://www.lcdproc.org/
Wants=dev-lcdimon.device
After=dev-lcdimon.device

[Service]
User=root
ExecStart=/usr/sbin/LCDd -s 1 -f -c /etc/LCDd.conf

[Install]
WantedBy=multi-user.target

Per impostare al meglio il display LCD (in modo da far rientrare nelle 2 righe da 16 caratteri le informazioni più utili) ecco un estratto del mio /home/kodi/.kodi/userdata/LCD.xml:

<video>
  <line>$INFO[Player.Time(h:mm:ss)]/$INFO[Player.Duration(h:mm:ss)]</line>
  <line>$INFO[VideoPlayer.Title]</line>
</video>
<tvshow>
  <line>$INFO[Player.Time]/$INFO[Player.Duration]</line>
  <line>$INFO[VideoPlayer.Title]</line>
</tvshow>

Telecomando universale Logitech Harmony:

Non ho installato Lirc, visto che è ampiamente obsoleto e che i driver per Imon_pad (il dispositivo IR per i telecomandi sul case), sono già presenti nel kernel e funzionano bene.
Ho installato il pacchetto ir-keytable che genera nella cartella /lib/udev/rc_keymaps una serie di tabelle che consentono di rimappare i tasti dei telecomandi.
Nel mio caso ho modificato /lib/udev/rc_keymaps/imon_pad così:

# table imon_pad, type: OTHER
0x2a8195b7 KEY_REWIND
0x298315b7 KEY_REWIND
0x2b8115b7 KEY_FASTFORWARD
0x2b8315b7 KEY_FASTFORWARD
0x2b9115b7 KEY_PREVIOUS
0x298195b7 KEY_NEXT
0x2a8115b7 KEY_PLAY
0x2a8315b7 KEY_PLAY
0x2a9115b7 KEY_PAUSE
#0x2b9715b7 KEY_STOP
0x2b9715b7 KEY_W
0x298115b7 KEY_RECORD
0x01008000 KEY_UP
0x01007f00 KEY_DOWN
0x01000080 KEY_LEFT
0x0100007f KEY_RIGHT
0x2aa515b7 KEY_UP
0x289515b7 KEY_DOWN
0x29a515b7 KEY_LEFT
0x2ba515b7 KEY_RIGHT
0x0200002c KEY_SPACE
0x2a9315b7 KEY_SPACE
0x02000028 KEY_ENTER
0x28a195b7 KEY_ENTER
0x288195b7 KEY_EXIT
0x02000029 KEY_ESC
0x2bb715b7 KEY_ESC
0x0200002a KEY_BACKSPACE
0x28a115b7 KEY_BACKSPACE
0x2b9595b7 KEY_MUTE
0x28a395b7 KEY_VOLUMEUP
0x28a595b7 KEY_VOLUMEDOWN
#0x289395b7 KEY_CHANNELUP
0x289395b7 KEY_F1
#0x288795b7 KEY_CHANNELDOWN
0x288795b7 KEY_F2
0x0200001e KEY_NUMERIC_1
0x0200001f KEY_NUMERIC_2
0x02000020 KEY_NUMERIC_3
0x02000021 KEY_NUMERIC_4
0x02000022 KEY_NUMERIC_5
0x02000023 KEY_NUMERIC_6
0x02000024 KEY_NUMERIC_7
0x02000025 KEY_NUMERIC_8
0x02000026 KEY_NUMERIC_9
0x02000027 KEY_NUMERIC_0
0x28b595b7 KEY_NUMERIC_1
0x2bb195b7 KEY_NUMERIC_2
0x28b195b7 KEY_NUMERIC_3
0x2a8595b7 KEY_NUMERIC_4
0x299595b7 KEY_NUMERIC_5
0x2aa595b7 KEY_NUMERIC_6
0x2b9395b7 KEY_NUMERIC_7
0x2a8515b7 KEY_NUMERIC_8
0x2aa115b7 KEY_NUMERIC_9
0x2ba595b7 KEY_NUMERIC_0
#0x02200025 KEY_NUMERIC_STAR
0x02200025 KEY_L
#0x28b515b7 KEY_NUMERIC_STAR
0x28b515b7 KEY_L
#0x02200020 KEY_NUMERIC_POUND
0x02200020 KEY_A
#0x29a115b7 KEY_NUMERIC_POUND
0x29a115b7 KEY_A
#0x2b8515b7 KEY_VIDEO
0x2b8515b7 KEY_F3
#0x299195b7 KEY_AUDIO
0x299195b7 KEY_F4
0x2ba115b7 KEY_IMAGES
0x28a515b7 KEY_TV
#0x29a395b7 KEY_DVD
0x29a395b7 KEY_D
#0x29a295b7 KEY_DVD
0x29a295b7 KEY_D
#0x2ba385b7 KEY_MENU
0x2ba385b7 KEY_Y
#0x2ba395b7 KEY_MENU
0x2ba395b7 KEY_Y
0x288515b7 KEY_BOOKMARKS
0x2ab715b7 KEY_CAMERA
0x298595b7 KEY_SUBTITLE
0x2b8595b7 KEY_LANGUAGE
#0x29a595b7 KEY_ZOOM
0x29a595b7 KEY_U
0x2aa395b7 KEY_SCREEN
0x299115b7 KEY_KEYBOARD
0x299135b7 KEY_KEYBOARD
0x01010000 BTN_LEFT
0x01020000 BTN_RIGHT
0x01010080 BTN_LEFT
0x01020080 BTN_RIGHT
0x688301b7 BTN_LEFT
0x688481b7 BTN_RIGHT
0x2a9395b7 KEY_CYCLEWINDOWS
0x2b8395b7 KEY_TIME
0x289115b7 KEY_POWER
0x29b195b7 KEY_EJECTCD
0x299395b7 KEY_EJECTCLOSECD
0x02800000 KEY_CONTEXT_MENU
0x2b8195b7 KEY_CONTEXT_MENU
0x02000065 KEY_COMPOSE
0x28b715b7 KEY_COMPOSE
0x2ab195b7 KEY_MEDIA
0x29b715b7 KEY_DASHBOARD

Inoltre ho impostato in /home/kodi/.kodi/userdata/keymaps/custom.xml la mia personalizzazione della tastiera:

<keymap>
   <global>
     <keyboard>
        <power>Shutdown()</power>
        <y>ActivateWindow(home)</y>
        <d>RunScript(script.audio.profiles,0)</d>
     </keyboard>
   </global>
   <FullscreenVideo>
     <keyboard>
        <u>ActivateWindow(subtitlesearch)</u>
        <a>AudioNextLanguage</a>
        <w>PlayerControl(Stop)</w>
     </keyboard>
   </FullscreenVideo>
   <SlideShow>
     <keyboard>
       <f1>ZoomIn</f1>
       <f2>ZoomOut</f2>
       <f3>CodecInfo</f3>
     </keyboard>
   </SlideShow>
</keymap>

 

Condividi:

2 Replies to “Kodi ed Ubuntu”

  1. Filippo C.

    Ciao sono Filippo C. e ho seguito la tua guida per installare kodi su una macchina con ubuntu server e open-box per creare un mio personalizzato media-center… riscontrando un problema di rallentamento quando si avviava in automatico e “googleando” in giro ho trovato una guida simile/identica alla tua che però suggeriva alcuni accorgimenti da adottare ed in particolare questo comando mi ha risolto il problema..

    Da terminale: sudo usermod -a -G audio,video kodi

    Reply
    • webadmin

      Il comando che hai trovato è esattamente ciò che ho scritto io (a parte i diritti d’accesso al lettore cd), ma solo a parole:

      “Successivamente, al primo login, ho aggiunto l’utente kodi ai gruppi di sistema: audio, video, cdrom.”

      Reply

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *