Ho iniziato la mia esperienza con Kodi nel 2009, quando ancora si chiamava Xbmc.
Solo dal 23 Dicembre 2014 ha ufficialmente adottato il nome attuale.
Il wiki ufficiale, ai tempi della mia prima installazione, non era certamente completo come adesso, in modo particolare per Linux.
Vista la scarsa documentazione, nel tempo, ho cercato di riunire in un solo documento tutte le informazioni utili per installare questo mediacenter su una delle distribuzioni Linux più diffuse, Ubuntu.
L’hardware di riferimento era, ed è, ovviamente quello a mia disposizione, ma questa guida può essere utilizzata, con piccoli cambiamenti, anche per configurazioni diverse.
Con l’arrivo di una nuova versione stabile a fine 2014, ho iniziato un aggiornamento ed una profonda revisione di questo documento, che continuava a basarsi su Ubuntu, ma facendo uso di nuove tecnologie (systemd tra tutte).
La dotazione hardware del mio mediacenter era 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).
Ed infine, ad Agosto 2015 ho deciso di potenziare ulteriormente il media center in modo da poter riprodurre video codificati in x265/HEVC, usufruire dei più noti servizi di Streaming e di usarlo come console da gioco per il retro-gaming e con una partizione dedicata a Windows 10.
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 (circa 64Mb), per mantenere il sistema quanto più leggero e veloce possibile, scaricando e installando solo i pacchetti strettamente necessari.
ATTENZIONE! Da non confondersi con l’opzione “minimal” introdotta con Ubuntu 18.04 (circa 1.8Gb) per la normale installazione desktop.
- Ho installato Ubuntu minimal 18.04 LTS (64 bit) utilizzando l’opzione “esperto”.
- In fase di installazione del sistema, oltre a root, ho creato un utente normale: kodi.
- Ho installato i pacchetti per localizzare sia inglese che in italiano.
- 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.
- Non ho installato alcun software extra (per es. ubuntu server, etc..)
- 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, plugdev.
usermod kodi -a -G audio,video,cdrom,plugdev
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 Intel. Tratterò le schede NVidia in un paragrafo dedicato più avanti. 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 (oltre ad eseguire altre operazioni utili) è necessario creare /home/kodi/.config/openbox/autostart.sh:
#!/bin/sh compton --config ~/.config/compton.conf -CGb setxkbmap -model pc105 -layout it /usr/bin/kodi -fs -n&
Il window manager Openbox non richiede molte risorse, ma purtroppo non dispone un proprio compositor.
Da quando ho iniziato ad usare il browser Chrome per i servizi di streaming, ho notato un forte “tearing” nella visualizzazione dei filmati. Ho dovuto quindi installare il compositor stand-alone Compton:
apt install compton
E ho preparato un file di configurazione, adatto a schede NVidia, in /home/kodi/.config/compton.conf:
backend = "glx"; paint-on-overlay = true; glx-no-stencil = true; glx-no-rebind-pixmap = true; vsync = "opengl-swc";
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:
Oramai non è più necessario scaricare l’ultima versione dei driver proprietari dal sito ufficiale NVidia e compilarli.
Il repository di Ubuntu 18.04 LTS è piuttosto aggiornato e soprattutto garantisce una migliore integrazione nel sistema tramite DKMS.
Ad esempio, se si volessero installare i driver della serie 430:
apt install nvidia-dkms-430 apt install nvidia-utils-430 apt install libnvidia-decode-430 apt install libnvidia-gl-430 apt install xserver-xorg-video-nvidia-430
Ricordarsi di installare le librerie Ubuntu libvdpau per usufruire dell’accelerazione VDPAU fornita dai driver NVidia (anche se dovrebbero far parte delle dipendenze del pacchetto Kodi).
Ricordarsi di impedire il caricamento dei driver NVidia Opensource modificando /etc/modprobe.d/blacklist.conf:
blacklist nouveau
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:
Grub è il boot manager di default di Ubuntu.
Nonostante ciò, per qualche tempo ho preferito usare un boot manager più leggero e facilmente configurabile.
Purtroppo, quando sono passato a Windows 10 ho riscontrato alcuni problemi e mi sono dovuto imbarcare in una configurazione di Grub un po’ più avanzata di quella default.
Il file da modificare è /etc/default/grub:
GRUB_DEFAULT=saved GRUB_SAVEDEFAULT=true GRUB_TIMEOUT=0.0 GRUB_TIMEOUT_STYLE=hidden GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet nvidia-drm.modeset=1 loglevel=1 vga=current vt.cur_default=1 console=tty12" GRUB_CMDLINE_LINUX="" # Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel that obtains # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" # Uncomment to disable graphical terminal (grub-pc only) #GRUB_TERMINAL=console # The resolution used on graphical terminal# note that you can use only modes which your graphic card supports via VBE # you can see them in real GRUB with the command `vbeinfo' #GRUB_GFXMODE=1920x1080x16 #GRUB_BACKGROUND="/boot/grub/splash.jpg" #GRUB_GFXPAYLOAD_LINUX=keep # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux #GRUB_DISABLE_LINUX_UUID=true # Uncomment to disable generation of recovery mode menu entries #GRUB_DISABLE_RECOVERY="true" # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1"
Successivamente alla modifica del file precedente, eseguire i seguenti comandi:
update-grub update-initramfs -u
Usare Extlinux come boot manager (alternativa):
Un’alternativa a Grub, semplice e leggera, è Extlinux (Syslinux).
Il supporto ancora incompleto alla partizioni EFI/UEFI è una limitazione, specie per sistemi dual-boot con Windows 7 o 10.
Nella directory /boot si deve creare una directory extlinux e vanno rimossi tutti i pacchetti collegati a Grub (grub2, grub2-common etc..).
Per evitare che nei futuri aggiornamenti, Grub o Lilo non siano più installati, va 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 lcdproc' to modify this file. ## 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 ReportLevel = 0 ReportToSyslog = yes ServerScreen = blank ToggleRotateKey = Enter WaitTime = 4 [imonlcd] Device = /dev/lcd-imon OnExit = 2 Protocol = 1 [menu] DownKey = Down EnterKey = Enter MenuKey = Escape UpKey = Up
Questa è la regola udev che crea un symlink fisso al device /dev/lcdX (dove X può variare di volta in volta) e notifica la sua disponibilità a Systemd.
Va scritta nel file /lib/udev/rules.d/60-lcdproc.rules:
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> <general> <line>»KODI« $INFO[System.Time]</line> <line>$INFO[System.Date(ddd dd mmm yyyy)]</line> </general>
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>
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
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.”