HTPC = MythTV + Zotac ION ITX

Milan Knížek dne 17. Říjen 2009, v rubrice Hardware, Linux

Popis instalace a zkušeností s MythTV (mythbuntu 9.10) s následující hardwarovou sestavou:

  • MB: Zotac ION ITX-A-E (Intel Atom N330 dual core, nVidia ION, wifi, ext. zdroj) (Kč 4 040);
  • RAM: 2 GB DDR2 DIMM Kingston 800 MHz (Kč 935);
  • HDD: 2 TB HDD Caviar Green WD20EADS SATA (Kč 4 375);
  • ODD: žádná;
  • Skříň: Lian Li PC-Q07 (Kč 1 800);
  • Větrák: Noctua NF-P12-1300 12×12 cm + regulátor otáček Zalman Fan Mate 2 (Kč 550);
  • DVB-T: AVerMedia Volar a AVerMedia Volar X (2x cca Kč 1 000);
  • RC: Meliconi Universal 6 light, resp. AVerMedia RM-KS (cca Kč 800);
  • Klávesnice a myš: něco ze starých zásob s USB RF (cca Kč 800).

Pochopitelně lze na různých součástech výrazně ušetřit (především skříň, větrák, vynechat klávesnici, menší hdd, jeden tuner atd.)

Pro informaci detailní výpis PCI  a USB (včetně DVB-T tunerů a bezdrátové klávesnice s myší) sběrnic:

$ lspci
00:00.0 Host bridge: nVidia Corporation MCP79 Host Bridge (rev b1)
00:00.1 RAM memory: nVidia Corporation MCP79 Memory Controller (rev b1)
00:03.0 ISA bridge: nVidia Corporation MCP79 LPC Bridge (rev b2)
00:03.1 RAM memory: nVidia Corporation MCP79 Memory Controller (rev b1)
00:03.2 SMBus: nVidia Corporation MCP79 SMBus (rev b1)
00:03.3 RAM memory: nVidia Corporation MCP79 Memory Controller (rev b1)
00:03.5 Co-processor: nVidia Corporation MCP79 Co-processor (rev b1)
00:04.0 USB Controller: nVidia Corporation MCP79 OHCI USB 1.1 Controller (rev b1)
00:04.1 USB Controller: nVidia Corporation MCP79 EHCI USB 2.0 Controller (rev b1)
00:06.0 USB Controller: nVidia Corporation MCP79 OHCI USB 1.1 Controller (rev b1)
00:06.1 USB Controller: nVidia Corporation MCP79 EHCI USB 2.0 Controller (rev b1)
00:08.0 Audio device: nVidia Corporation MCP79 High Definition Audio (rev b1)
00:09.0 PCI bridge: nVidia Corporation MCP79 PCI Bridge (rev b1)
00:0a.0 Ethernet controller: nVidia Corporation MCP79 Ethernet (rev b1)
00:0b.0 IDE interface: nVidia Corporation MCP79 SATA Controller (rev b1)
00:0c.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:10.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:15.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:16.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:17.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:18.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
03:00.0 VGA compatible controller: nVidia Corporation ION VGA (rev b1)
04:00.0 Network controller: Atheros Communications Inc. AR928X Wireless Network Adapter (PCI-Express) (rev 01)

$ lsusb
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 0425:0101 Motorola Semiconductors HK, Ltd G-Tech Wireless Mouse & Keyboard
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 07ca:b808 AVerMedia Technologies, Inc.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 07ca:a815 AVerMedia Technologies, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Michal Duda na svém blogu upozornil, že některé hard disky WD GreenPower „uspávaly“ hlavičky každých cca 8 vteřin. To v případě linuxu s častými zápisy na disk (logy, atd.) může vést ke zvýšeným cyklům probouzení/uspání, což disku nepochybně nedělá dobře. Nicméně, mnou použitý disk WDC WD20EADS-00S2B0 tímto nebyl postižen vůbec. Pro kontrolu po dvou měsících používání, příkaz:

$ sudo smartctl -a /dev/sda | grep Load_Cycle_Count
193 Load_Cycle_Count        0x0032   200   200   000    Old_age   Always       -       563

říká, že k uspání/probuzení došlo 563 krát. Limit zaručený výrobcem pro řadu GreenPower by měl být 300 tisíc cyklů.

Přetrvávající problémy

  • nestabilita WiFi (pro běžné prohlížení webu dostačující, ale při zatížení přenosem velkého souboru se neustále odpojuje a připojuje);
  • některé formáty videí nejsou podporovány interním přehrávačem MythTV a tudíž používám mplayer jako výchozí přehrávač (verze z repozitářů včetně podpory VDPAU). Na rozdíl od interního přehrávače je nutné mplayer konfigurovat samostatně pro Full HD videa ve formátu H.264 (MPEG-4 AVC), což v MythTV lze díky obezličce – dle přípony souboru. Z toho plyne že MPEG-4 ASP a MPEG-4 AVC videa ve stejném kontejneru jen tak jednoduše nepřehrajete…

Instalace a konfigurace MythTV

Byť lze nainstalovat MythTV v podstatě do jakékoliv distribuce linuxu, vzhledem k jednoúčelovému využití HTPC dávám přednost hotovému (bohužel jen téměř) řešení – konkrétně jsem zvolil Mythbuntu 9.10 Karmic Koala (z Live CD). Instalace jako u běžného Ubuntu, zakončená pár dotazy MythTV Control Center – zvolil jsem roli backend i frontend a automatický login uživatele.

Dopředu upozorňuji, že nejvíce práce bylo se zprovozněním uspávání do RAM (ACPI S3 čili STR) a nastavením dálkového ovládání, ostatní v podstatě bez problémů.

Instalace USB AVerMedia AVerTV DVB-T Volar (čip DiBcom 7000PC 07ca:b808)

Tuner má plnou podporu – modul dvb_usb_dib0700 vč. firmware dvb-usb-dib0700-1.20.fw. V logu se objeví zmínka o IR přijímači, ale při pokusu o jeho použití dojde k chybě ohledně inicializace. Tuner je prodáván bez dálkového ovládání, takže jsem to dál neřešil.

Instalace USB AVerMedia AVerTV DVB-T Volar X (čip Afatech AF9013 07ca:a815)

Tuner má plnou podporu – modul dvb_usb_af9015, avšak s distribuční verzí firmware dvb-usb-af9015.fw (4.65.0) plnil /var/log/syslog chybami (af9015: command failed:255). Po aktualizaci na aktuální verzi 4.95.0 se jeho chování zlepšilo, ale občas přesto nebyl schopen naladit obraz. (Firmware stačí zkopírovat do adresáře /lib/firmware, vypnout na delší dobu počítač či odpojit usb tuner. Verzi použitého firmware lze ve /var/log/syslog po zasunutí tuneru do USB portu.)

Po cca měsíčním používání včetně instalací aktualizací z repozitáře Ubuntu se spolehlivost tuneru snížila, byť netuším proč – často byl úplně nepoužitelný. Po instalaci aktuálních ovladačů se chová už cca 2 měsíce naprosto spolehlivě:

  • stáhnout archiv bz2 v levém menu na stránce http://linuxtv.org/hg/~anttip/af9015/;
  • rozbalit do domovského adresáře;
  • nainstalovat aktální kernel headers a build-essential z repozitáře;
  • vytvořit v4l/.config soubor pomocí make config (všechny volby potvrdit enterem);
  • editovat v4l/.config soubor a změnit hodnotu CONFIG_DVB_FIREDTV=m na CONFIG_DVB_FIREDTV=n (tj. nebude kompilován tento ovladač – kompilace by jinak selhala);
  • zkompilovat „$ make“ a nainstalovat „$ sudo make install“ a restartovat počítač (nebo odstranit ručně moduly a znovu je přidat);
  • po případné aktualizaci kernelu je nutné znovu nakonfigurovat, zkompilovat a nainstalovat – nejjednodušší je znovu rozbalit stažený archiv a „$ make clean && make && sudo make install“;

Mimochodem, funkčnost tuneru se pozná snadno – po jeho „uzamknutí“ mythbackendem se uvnitř rozsvítí modrá dioda.

Ještě jedna drobnost: v kombinaci s bezdrátovou klávesnicí/myší na USB tuner bohužel způsobí zamrznutí počítače během BIOS POST, pokud dojde ke stisku jakéhokoliv klávesy. Po načtení kernelu je již vše v pořádku. Taktéž došlo k zamrznutí počítače během uspávání, což nakonec vyřešilo odstranění modulu „usbhid“, který je sdílen jak tunerem tak i klávesnicí.

Z důvodu počátečních rozporuplných zkušeností se spolehlivostí jsem raději nastavil tento tuner jako záložní (tj. nejprve přidat DiBcom a poté tento Afatech – viz též část „Přečíslování pořadí tunerů“).

Instalace a konfigurace dálkového ovládání AVerMedia RM-KS

Tuner AVerMedia Volar X je dodáván s dálkovým ovladačem AVerMedia RM-KS, podpora IR přijímače je opět v jádře, pouze ve výchozí instalaci není IR přijímač aktivován. To se napraví nastavením správných voleb pro načtení modulu. Našel jsem zmínky, že i poté občas zlobil (i po uvolnění tlačítka se choval jako kdyby bylo stlačené), tomu by měly zabránit usb quirks.

Obě úpravy lze uložit do konfiguračního souboru (a restart nebo ruční odstranění modulů a jejich opětovné načtení):

$ cat /etc/modprobe.d/mk-dvb.conf
options dvb-usb-af9015 remote=5
options usbhid quirks=0x07ca:0xa815:0x04

Dálkové ovládání má nemnoho tlačítek, rozhodně to nestačí pro ovládání MythTV. To však lze vyřešit – stačí oželet tlačítka číslic (0 – 10) a přiřadit jim jinou funkci. Výsledkem je pochopitelně obtížně zapamatovatelné nastavení – možné řešení je použít univerzální dálkové ovládání – viz dále. Ovládání má jednu velmi nepříjemnou vlastnost – LIRC démon přijímá opakování stále stlačené klávesy jako opakované stisky klávesy. Z toho plyne, že nejde nastavit prodleva před opakováním ani počet ignorovaných opakování…

Mythbuntu podporuje některá dálková ovládání, v případě AVerMedia RM-KS ovšem podpora chybí. Nezbývá, než vše nastavit ručně.

IR přijímač ve výše zmíněném tuneru je podporován démonem LIRC (s tímto démonem poté komunikují aplikace, např. MythTV). Zkontrolujte, zda je nainstalován balíček téhož jména:

$ sudo apt-get install lirc

Nejprve je nutné zjistit, jaké virtuální zařízení bylo přiřazeno IR přijímači v DVB-T tuneru. Např. takto:

$ cat /proc/bus/input/devices
I: Bus=0003 Vendor=07ca Product=a815 Version=0200
N: Name="IR-receiver inside an USB DVB receiver"
P: Phys=usb-0000:00:1d.7-5/ir0
S: Sysfs=/devices/pci0000:00/0000:00:1d.7/usb2/2-5/input/input8
U: Uniq=
H: Handlers=kbd event8
B: EV=3
B: KEY=3c0110 102000 0 0 0 0 8400 90 c0300801 1e0600 0 0 ffc

V tomto případě je zařízení /dev/input/event8. Případně lze použít /dev/input/by-path/pci-0000:00:1d.7-event-ir (symlink k témuž), ale pozor pokud máte více IR přijímačů na USB – budou se překrývat a nebude to fungovat. Alternativně lze použít vlastní udev pravidlo, které zařídí přidělení vždy shodného /dev zařízení – viz poznámka na konci článku.

Poté nastavte informace o hardware pro lirc:

$ cat /etc/lirc/hardware.conf
# /etc/lirc/hardware.conf
#
#Chosen Remote Control
REMOTE="IR AVerMedia RM-KS"
REMOTE_MODULES=""
REMOTE_DRIVER="devinput"
REMOTE_DEVICE="/dev/input/by-path/pci-0000:00:1d.7-event-ir"
REMOTE_SOCKET=""
REMOTE_LIRCD_CONF=""
REMOTE_LIRCD_ARGS=""

#Chosen IR Transmitter
TRANSMITTER="None"
TRANSMITTER_MODULES=""
TRANSMITTER_DRIVER=""
TRANSMITTER_DEVICE=""
TRANSMITTER_SOCKET=""
TRANSMITTER_LIRCD_CONF=""
TRANSMITTER_LIRCD_ARGS=""

#Enable lircd
START_LIRCD="true"

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD="false"

#Try to load appropriate kernel modules
LOAD_MODULES="true"

# Default configuration files for your hardware if any
LIRCMD_CONF=""

#Forcing noninteractive reconfiguration
#If lirc is to be reconfigured by an external application
#that doesn't have a debconf frontend available, the noninteractive
#frontend can be invoked and set to parse REMOTE and TRANSMITTER
#It will then populate all other variables without any user input
#If you would like to configure lirc via standard methods, be sure
#to leave this set to "false"
FORCE_NONINTERACTIVE_RECONFIGURATION="false"
START_LIRCMD=""

Dále naučit LIRC, co jednotlivé vysílané ḱódy znamenají (příkaz irrecord je interaktivní, postupujte dle pokynů):

$ sudo irrecord -H devinput -d /dev/input/eventX -n /etc/lirc/lircd.conf

Po skončení restartujte lirc démona a vyzkoušejte funkčnost (příkaz irw se ukončí CTRL+C):

$ sudo service lirc restart
$ irw

Výsledný lircd.conf je:

$ cat /etc/lirc/lircd.conf
# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.8.6(devinput) on Sat Oct 17 11:38:23 2009
#
# contributed by Milan Knizek
#
# brand: AVerMedia
# model no. of remote control: RM-KS
# devices being controlled by this remote: USB DVB-T AVerMedia Volar X (07ca:a815)
#

begin remote

name  lircd_avermedia_rm-ks.conf
 bits           16
 eps            30
 aeps          100

 one             0     0
 zero            0     0
 pre_data_bits   16
 pre_data       0x8001
 gap          455988
 toggle_bit_mask 0x0

 begin codes
 Source                   0x0094
 Power                    0x0074
 FullScreen               0x0174
 Audio                    0x0188
 Rewind                   0x009E
 Forward                  0x009F
 Record                   0x00A7
 PlayPause                0x00CF
 Stop                     0x0080
 Display                  0x0069
 EPG                      0x016D
 VolUp                    0x0073
 VolDown                  0x0072
 ChanUp                   0x0192
 ChanDown                 0x0193
 1                        0x0002
 2                        0x0003
 3                        0x0004
 4                        0x0005
 5                        0x0006
 6                        0x0007
 7                        0x0008
 8                        0x8009
 9                        0x000A
 0                        0x000B
 CHRTN                    0x006A
 Mute                     0x0071
 end codes

end remote

Nastavení ovládání Melicone Universal 6 light pro AVerMedia RM-KS

Univerzální ovladač Melicone Universal 6 light bohužel nemá přímou podporu pro AVerMedia RM-KS a ani se mi nepodařilo najít jiný model v jeho databázi, který by fungoval s IR přijímačem v tuneru. Naštěstí se umí „naučit“ kódy přímo z jiných ovladačů.

Viz manuál: stlačit 5 s tlačítko volby přístroje (např. AUX), naťukat kód uživatelského nastavení 800x, kde x = ( 0, 1, 2, …, 5 ). Poté má ovládání všechna tlačítka neaktivní, je třeba je naučit kódy originálního ovládání RM-KS.

Stlačit současně Learn + zvolené tlačítko (např. Play), namířit RM-KS a podržet stlačené tlačítko Play, dokud tlačítko Learn nezhasne. Obvykle se Learn rozsvítí ještě jednou, takže opět podržet stlačené tlačítko Play na RM-KS. Po úspěšném „naučení“ třikrát zeleně blikne tlačítko volby přístroje (AUX). Celé opakovat pro všechna tlačítka.

Zde je mnou použitý klíč pro tlačítka RM-KS a jejich naučený ekvivalent na Melicone Universal 6 light:

RM-KS         Melicone
-----------   --------------------------
Power       - Power
Source      - F1
FullScreen  - OSD (Teletextové tl. vpravo)
Audio       - F3
Rewind      - Rewind
Forward     - Forward
Record      - Record
PlayPause   - Play, Pause
Stop        - Stop
Display     - Menu
EPG         - Guide
VolUp       - VolUp
VolDown     - VolDown
ChanUp      - ChanUp
ChanDown    - ChanDown
1           - TeletextOn
2           - TeletextOff (používám pro screenshot)
3           - Left
4           - Right
5           - Up
6           - Down
7           - OK
8           - Back
9           - F4
0           - F2
ChRtn       - Exit
Mute        - Mute

Výsledkem pochopitelně je, že na Melicone nefungují tlačítka s čísly 0 až 9, což ovšem pro MythTV není zásadní problém.

Konfigurace MythTV pro dálkové ovládání

Nakonec je třeba naučit MythTV, co má při stisku jednotlivých tlačítek dělat, tj. vytvořit párování mezi tlačítky ovládání a klávesovými zkratkami MythTV:

$ cat $HOME/.lirc/mythtv
#
# lircrc config file for Meliconi UNIVERSAL 6 light learned
# From AVerMedia RM-KS. Number keys are not used.
#
# @url       $URL$
# @date      $Date: 2008-03-09 04:30:22 +0000 (Sun, 09 Mar 2008) $
# @version   $Revision: 16474 $
# @author    $Author: kormoc $
#
# This file is intended to complement the lircd_avermedia_rm-ks.conf
#
#
# Save this file in ~/.mythtv/lircrc
#
# You will also need to make a few changes to the MythTV key bindings and jump
# points as follows.
#
# Jump Points:
#
#   TV Recording Playback:                      Alt+R
#   Program Guide:                              Alt+G
#   Live TV:                                    Alt+T
#   MythVideo -> The MythVideo default view:    Alt+L
#   Screenshot                                  Alt+C
#   Main Menu:                                  Alt+Home
#   Web browser:                ??
#
# Key Bindings:
#
#   TV Playback -> CHANNELDOWN:  Down,PgDown
#   TV Playback -> CHANNELUP:    Up,PgUp
#   TV Playback -> JUMPRWND:     Shift+PgUp
#   TV Playback -> JUMPFFWD:     Shift+PgDown
#

## This is the learning match between RM-KS and Uni6
# Power       - Power
# Source      - F1
# FullScreen  - OSD (Teletextové vpravo)
# Audio       - F3
# Rewind      - Rewind
# Forward     - Forward
# Record      - Record
# PlayPause   - Play, Pause
# Stop        - Stop (ESC)
# Display     - Menu
# EPG         - Guide
# VolUp       - VolUp
# VolDown     - VolDown
# ChanUp      - ChanUp
# ChanDown    - ChanDown
# 1           - TeletextOn
# 2           - TeletextOff (use for a screenshot)
# 3           - Left
# 4           - Right
# 5           - Up
# 6           - Down
# 7           - OK
# 8           - Back
# 9           - F4
# 0           - F2
# ChRtn       - Exit
# Mute        - Mute

begin
 prog   = irexec
 button = Power
 repeat = 3
 config = kill `pidof mythfrontend.real`
 end

#
# Teletext
#
begin
 prog   = mythtv
 button = 1
 repeat = 3
 config = T
end

begin
 prog   = mythtv
 button = 2
 repeat = 3
 config = Alt+C
end

# Use as OSD info
begin
 prog   = mythtv
 button = FullScreen
 repeat = 3
 config = I
end

# Teletext end

begin
 prog   = mythtv
 button = Rewind
 repeat = 3
 config = <
end

begin
 prog   = mythtv
 button = Mute
 repeat = 3
 config = F9
end

begin
 prog   = mythtv
 button = Forward
 repeat = 3
 config = >
end

begin
 prog   = mythtv
 button = Record
 repeat = 3
 config = R
end

begin
 prog   = mythtv
 button = Stop
 repeat = 3
 config = ESC
end

begin
 prog   = mythtv
 button = PlayPause
 repeat = 3
 config = P
end

begin
 prog   = mythtv
 button = Display
 repeat = 3
 config = M
end

begin
 prog   = mythtv
 button = 8
 repeat = 3
 config = ESC
end

begin
 prog   = mythtv
 button = EPG
 repeat = 3
 config = Alt+G
end

begin
 prog   = mythtv
 button = ChRtn
 repeat = 3
 config = Alt+Home
end

begin
 prog   = mythtv
 button = VolUp
 repeat = 3
 config = F11
end

begin
 prog   = mythtv
 button = VolDown
 repeat = 3
 config = F10
end

# Menu Navigation
begin
 prog   = mythtv
 button = 7
 repeat = 3
 config = Space
end

begin
 prog   = mythtv
 button = 3
 repeat = 3
 config = Left
end

begin
 prog   = mythtv
 button = 4
 repeat = 3
 config = Right
end

begin
 prog   = mythtv
 button = 5
 repeat = 3
 config = Up
end

begin
 prog   = mythtv
 button = 6
 repeat = 3
 config = Down
end
# Menu Navigation end

begin
 prog   = mythtv
 button = ChanUp
 repeat = 3
 config = PgUp
end

begin
 prog   = mythtv
 button = ChanDown
 repeat = 3
 config = PgDown
end

#
# Function keys
#

# Live TV
begin
 prog   = mythtv
 button = Source
 repeat = 3
 config = Alt+T
end

# Recordings
begin
 prog   = mythtv
 button = 0
 repeat = 3
 config = Alt+R
end

# Media Library - MythVideo
begin
 prog   = mythtv
 button = Audio
 repeat = 3
 config = Alt+L
end

# Web browser
begin
 prog   = mythtv
 button = 9
 repeat = 3
 config =
end

V praxi jsem postupoval v obráceném pořadí: nejprve jsem upravil nějaký existující .lirc/mythtv (vybral akce, které budu používat) a poté použil daná klíčová slova při učení Melicone ovládání.

U tlačítka Power je použit program irexec – ten musí být spuštěn při startu, jinak se příkaz ukončující mythfrontend neprovede. Nejjednodušší je přidat do nastavení Xfce (Relace a Spouštění / Automatický start aplikace).

Konfigurace backendu

Konfigurace backendu spočívá v následujících krocích:

  • Přidání DVB-T tunerů („vstupy“). Doporučuji ke zvážení, zda ponechat kartu uzamčenou pro MythTV nebo ji uvolňovat i pro jiné aplikace. První možnost se zdá být lepší, tunery jsou stabilnější.
  • Definice „zdroje“, čímž se rozumí původ přehledu televizních programů. Používám pouze EPG (tj. na 8 dní dopředu), jinak snad existují i nějaké placené internetové služby.
  • Spojení vstupů se zdrojem. Nejzmatenější část: v případě použití více tunerů připojených ke stejné anténě (výhoda Prahy – na obyčejnou prutovou anténu přijímám všechny multiplexy) nastavte k jednomu zdroji oba dva tunery.
  • Automatické vyhledání transportů (multiplexů) a načtení TV či rozhlasových kanálů. Nejotravnější část: v Praze je několik multiplexů, některé televizní a rozhlasové stanice jsou nalezeny vícekrát. MythTV upozorní na konflikt a je nutno ručně (!) očíslovat stanice se stejným názvem a poté projít seznam stanic a ty nadbytečné smazat.

Upozorňuji na matoucí pojmy: byť v audio/video technice se „zdrojem“ (source) rozumí zdroj signálu (A/V, VCR, …), tak v MythTV to s tímto vůbec nesouvisí – vždy se jedná o zdroj informací o televizním programu pro jednotlivé stanice (vč. vysílacích frekvencí) a spárování tohoto televizního programu s tunerem, na kterém tyto stanice lze naladit, se provádí v samostatném kroku.

Z pohledu duplicity DVB-T tunerů připojených ke stejnému anténnímu kabelu – v mythbackendu lze nastavit, kolik „proudů“ dat lze nahrávat z jednoho fyzického tuneru (výchozí počet je 2, doporučuji zvýšit na maximum, tj. 5). Tzn., že se dvěma fyzickými DVB-T tunery je k dispozici 10 virtuálních tunerů:

  • při nahrávání volí MythTV automaticky ten s nejnižším pořadovým číslem;
  • při sledování živé televize MythTV automaticky volí tuner s nejvyšším pořadovým číslem.

Tzn., že uživatel má dostatečnou volnost z hlediska přepínání kanálů (i z různých multiplexů), a pokud není současně nahráváno více pořadů z různých multiplexů, nedochází ke konfliktu mezi tunery. Pochopitelně, pokud bych chtěl nahrávat ze dvou multiplexů a současně sledovat živou TV z třetího, tak budu potřebovat další fyzický DVB-T tuner. Ale taková situace snad nehrozí ani o vánocích, kdy se televizní stanice alespoň trochu snaží…

Konfigurace frontendu

V MythTV Control Center jsem zvolil pluginy: mythweb, mythbrowse, mythmusic, mythvideo, mythweather, mythnews. Ve frontendu lze nastavit různé detaily, ale v zásadě výchozí nastavení vyhovuje.

Pokud využíváte interní přehrávač MythTV, nastavte v profilech přehrávání VDPAU (tj. bude použita hw podpora nVidia ION). Pokud používáte externí přehrávače (mplayer, vlc), parametry se nastavují buď na příkazové řádce (v nastavení frontendu) nebo samostatných konfiguračních souborech příslušného přehrávače (např. $HOME/.mplayer/config). Velmi otravné je rozdílné ovládání různých přehrávačů, vyplatí se používat jeden na všechna videa.

V případě použití mplayeru pro přehrávání Full HD videí je nutné nastavit video výstup na vdpau (-vo vdpau) a pokud jsou videa ve formátu H.264 (MPEG- 4 AVC), pak i nastavení kodeku (-vc ffh264vdpau) – pak bude dekódování videa ponecháno na grafické kartě. Při tomto nastavení kodeku H.264 pak bohužel nelze přehrávat videa kódovaná v jiném formátu. Řešením je mít H.264 videa pouze v jednom typu kontejneru (v mém případě MP4) a této souborové příponě nastavit přehrávač ručně. Další volba pro mplayer je počet zvukových kanálů (používám pouze stereo, tj. volba -channels 2).

Automatické vypínání a zapínání pro nahrávání

MythTV se se skládá ze dvou částí: backend a frontend, přičemž obě části mohou být na samostaných počítačích (rychlý backend ve sklepě, tichý frontend v obývacím pokoji). Má instalace je jednodušší, HTPC obsahuje jak backend tak i frontend. To bohužel trochu komplikuje automatické vypínání v případě nečinnosti – backend se totiž nevypne, je-li spuštěn frontend.

Naštěstí existuje program MythWelcome, jehož podstatou není nic jiného než uvítací obrazovka s přehledem aktuálního stavu (nahrávání/neaktivní, datum, atd.) a možností spuštění frontendu. Nastavení je trochu matoucí, je nutné vhodně konfigurovat jak backend tak i MythWelcome.

Mythbuntu je nastaveno na automatické spouštění frontendu, toto lze změnit v nastavení Xfce (Relace a Spouštění / Automatický start aplikace) – tedy deaktivovat MythTV Frontend a přidat „mythwelcome“.

Tolik úvod, teď ke konfiguraci: v nastavení backendu / obecné je stránka s nastaveními pro automatické vypínání a zapínání backendu. Nastavení počítá s funkčním ACPI RTC alarmem (viz google a níže):

Formát času pro probuzení: yyyy-MM-ddThh:mm:ss
Příkaz pro nastavení času probuzení: sudo -H /usr/bin/mythshutdown --setwakeup $time
Přikaz pro vypnutí serveru: sudo -H /usr/bin/mythshutdown --shutdown
Kontrolní příkaz před vypnutím: /usr/local/bin/mk-preshutdown
  • mythshutdown –setwakeup $time je pouze pomocný program, sám nic nedělá, pouze komunikuje s MythWelcome a spustí příkaz, který je v MythWelcome nastaven jako příkaz pro nastavení času probuzení.
  • mythshutdown –shutdown obdobně spustí příkaz, který je v MythWelcome nastaven jako příkaz k vypnutí.

Oba dva příkazy jsou spouštěny pod privilegovaným uživatelem, nutno tedy nastavit /etc/sudoers, aby nebylo dotazováno heslo. (Viz níže.)

Dále nastavení MythWelcome (obrazovka s nastavením se objeví po stlačení klávesy F11):

Příkaz pro nastavení času probuzení: echo MW: setting APCI wakeup time to BIOS at $time sec after epoch >> /var/log/mythtv/mythbackend.log && echo 0 > /sys/class/rtc/rtc0/wakealarm && echo $time > /sys/class/rtc/rtc0/wakealarm && cat /proc/driver/rtc
Formát času pro probuzení: time_t
Příkaz pro restart - probuzení-nvram: (prázdné)
Příkaz pro restart: (prázdné)
Příkaz k vypnutí: echo MW: Shutting down... >> /var/log/mythtv/mythbackend.log && /usr/sbin/pm-suspend
Příkaz pro spuštění Xterm: xfce4-terminal &
Příkaz pro spuštění Frontendu: /usb/bin/mythfrontend

MythWelcome byl původně naprogramován pro „nvram“ probouzení, které u nových BIOSů a kernelů již není třeba. Nicméně lze použít i s ACPI wakeup. Všimněte si, že není vyplněno nvram-restart ani příkaz pro reboot – ty byly třeba jen pro zastaralý nvram. Žádný z příkazů nepotřebuje sudo, neb nastavení RTC alarmu i vypnutí počítače již je spuštěno s právy privilegovaného uživatele dle nastavení v mythbackend setup – a to i v případě, kdy je příkaz k vypnutí zadán ručně přímo v MythWelcome (M pro Menu / Vypnout nyní).

Celý proces vypíná lze shrnout:

  • backend v případě nečinnosti nejprve spustí /usr/local/bin/mk-preshutdown (podle návratového kódu buď pokračuje ve vypínání nebo jej odloží),
  • backend poté spustí sudo /usr/bin/mythshutdown –setwakeup $time (viz výše),
  • následuje sudo /usr/bin/mythshutdown –shutdown (viz výše).

Pozor na to, že HTPC se vypne i v případě, že MythWelcome není spuštěno. Toto chování mi nevyhovuje, používám proto vlastí skript na kontrolu před vypnutím (kontroluje i pár dalších věcí):

$ cat /usr/local/bin/mk-preshutdown
#!/bin/sh
PRE="mk-preshutdown"
FRONTEND="myth01"

# Will allow shutdown only if there is:
#   no user (apart from $FRONTEND) is logged;
#   no www connection (mythweb or local browser);
#   no ssh connection;
#   no mounted samba shares;
#   and mythwelcome running. 

echo "$PRE: Now is `date --rfc-3339=seconds`"

# Check if MythTV would shutdown
if mythshutdown --status
# If 0 (true), then we need to do few more checks
then
 if last | head | grep "logged in" | grep -q -v "$FRONTEND"; then
  echo "$PRE: exit 1, some user logged in, resetting idle."
  exit 1
 elif netstat -a | grep "tcp" | grep "www" | grep -q "ESTABLISHED" ; then
  echo "$PRE: exit 1, some active connections to web server. Resetting idle."
  exit 1
 elif netstat -a | grep "tcp" | grep "ssh" | grep -q "ESTABLISHED" ; then
  echo "$PRE: exit 1, active SSH connection exists. Resetting idle."
  exit 1
# Well, available shares being checked by someone may not be a reason to prevent shutdown
#   elif netstat -a | grep "tcp" | grep "netbios-ssn" | grep -q "ESTABLISHED" ; then
#      echo "$PRE: exit 1, some active connections samba server. Resetting idle."
#      exit 1
 elif netstat -a | grep "tcp" | grep "microsoft-ds" | grep -q "ESTABLISHED" ; then
  echo "$PRE: exit 1, some mounted samba shares. Resetting idle."
  exit 1
# Not really needed.
#   elif ! ( sudo smbstatus -L | grep -q "No locked files" ); then
#      echo "$PRE: exit 1, some locked files of samba shares. Resetting idle."
#      exit 1
 elif ps -C "mythwelcome"; then
  echo "$PRE: exit 0, mythwelcome is running and no user logged in. MythTV can be suspended."
  exit 0
 else
  echo "$PRE: exit 1, Unknown reason, resetting idle."
  exit 1
 fi
else
 echo "$PRE: exit 1, mythshutdown --status returned $?, resetting idle."
 exit 1
fi
exit 1

Ještě nastavení /etc/sudoers (editace pomocí „sudo visudo“), aby nebylo nutné pro specifické situace zadávat heslo:

$ sudo cat /etc/sudoers
... zkráceno ...
%mythtv ALL= (ALL) NOPASSWD: /etc/init.d/mythtv-backend, /usr/bin/service mythtv-backend restart, /usr/sbin/pm-suspend, /sbin/shutdown, /usr/bin/mythshutdown, /usr/bin/service NetworkManager

Při testování doporučuji zkrátit čekací dobu před vypnutím na minimum („idle“ čas v mythtv-setup) a nastavit příkaz pro vypnutí v MythWelcome na něco neškodného („echo Vypínám >> /var/log/mythtv/mythbackend.log“) a samozřejmě sledovat mythbackend.log.

V případě nečinnosti MythWelcome zobrazuje čas do vypnutí. Je-li však doba před dalším nahráváním kratší než 15 minut, může MythWelcome zobrazovat nesprávnou informaci. Tj., nastavíme-li dobu nečinnosti pro vypnutí na 5 minut a nahrávání (respektive probuzení před nahráváním) by mělo začít za 12 minut, HTPC se nevypne. Nicméně MythWelcome bude opakovaně odpočítávat od 5 minut do nuly. Výchozí 15 minutová prodleva před dalším nahráváním je nastavena v mythshutdown a nelze změnit…

Uspání do RAM (Suspend to RAM)

Pro ACPI S3 (Suspend to RAM) Ubuntu standardně používá skripty z pmi-utils a částečně i acpi-support. Uspávání funguje bezproblémově, ovšem pouze ve výchozí konfiguraci. Přidám-li DVB-T tuner s čipem Afatech (viz výše), HTPC neusne… Zřejmě dochází ke konfliktu s USB klávesnicí (resp. bezdrátovou klávesnicí a myší). Po mnoha hodinách bezcílného tápání jsem našel funkční konfiguraci.

Odstranění modulu pro Human Interface Devices (USB klávesnice + myš, z části zřejmě též USB DVB-T tunery, neb v logu se hlásí i jako HID) a modulů pro DVB-T tunery:

$ cat /etc/pm/config.d/50_MythTV
SUSPEND_MODULES="dvb_usb_dib0700 dvb_usb_af9015 af9013 usbhid"

Skript spouštěný při uspávání i probouzení (musí být spustitelný) – do skriptu jsem přidal kontrolu, aby USB2 hub zůstal po usnutí zapnutý – stačí pak stlačit libovolnou klávesu na klávesnici (připojená k USB2, což jsou zadní porty na základní desce) a počítač se probudí:

$ cat /etc/pm/sleep.d/01_MythTV
#!/bin/sh
PRE=01-MythTV

if [ "$1" = "suspend" ]; then
# Computer freezes when LIRC not stopped (probably due to Afatech DVB-T).
 /usr/sbin/service lirc stop
 kill -15 `pidof mythbackend` # use of /usr/sbin/service breaks suspend from MythWelcome idle
# Keeps USB2 hub powered on
 grep 'USB2.*disabled' < /proc/acpi/wakeup > /dev/null || echo USB2 > /proc/acpi/wakeup
# Keeps USB0 hub powered off
 grep 'USB0.*enabled' < /proc/acpi/wakeup > /dev/null || echo USB0 > /proc/acpi/wakeup
# Just log the status of ACPI WAKE
 echo "$PRE: cat /proc/acpi/wakeup:"
 cat /proc/acpi/wakeup
# Just log the RTC Alarm
 echo "$PRE: cat /proc/driver/rtc:"
 cat /proc/driver/rtc
 echo "$PRE: Now is `date --rfc-3339=seconds`. Suspending..." | tee -a $LOG
fi

if [ "$1" = "resume" ]; then
 echo "$PRE: Now is `date --rfc-3339=seconds`. Resuming..." | tee -a $LOG
 /usr/sbin/service lirc start
 /usr/sbin/service mythtv-backend restart # To initialise the tuners
fi

Počítač se uspí příkazem „sudo pm-suspend“. Tento příkaz zřejmě používají i jiné programy (gnome-power-manager), nicméně komunikují skrze ACPI/D-Bus – příliš se v tom neorientuji.

V každém případě, je rozdíl, pokud se spustí pm-suspend z příkazové řádky nebo např. z MythWelcome / Menu / Ukončit nyní. V druhém případě se při probuzení objeví okno zamknuté obrazovky a je požadováno ověření jména a hesla. Nepodařilo se mi zjistit, který program/démon nastavuje proměnnou LOCK_SCREEN, nicméně zakomentování všech řádek v následujícím skriptu to vyřešilo hrubou silou:

$ cat /usr/share/acpi-support/screenblank
#if [ `pidof xscreensaver` ]; then
#       su $user -c "(xscreensaver-command -throttle)"
#               if [ x$LOCK_SCREEN = xtrue ]; then
#               su $user -c "(xscreensaver-command -lock)"
#       fi
#elif [ `pidof dcopserver` ]; then
#       dcop kdesktop KScreensaverIface lock
#fi
#
#xset dpms force off
#if [ x$RADEON_LIGHT = xtrue ]; then
#    [ -x /usr/sbin/radeontool ] && radeontool light off
#fi

Nastavení jedinečného /dev zařízení pro IR přijímač

Vzhledem k tomu, že mám dva fyzické tunery, docházelo občas k přidělením různých vstupních zařízení IR přijímači (/dev/input/eventX), následkem čehož nefungoval LIRC démon. Řešením je nastavit vlastní pravidlo pro udev:

Nejprve je nutné zjistit pár informací o IR přijímači (nyní je připojen jako /dev/input/event6, postup jak toto zjistit viz výše v sekci dálkového ovládání):

$ udevadm info -a -p `udevadm info -q path -n /dev/input/event6`
... zkráceno ...
looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-5/input/input6':
KERNELS=="input6"
SUBSYSTEMS=="input"
DRIVERS==""
ATTRS{name}=="IR-receiver inside an USB DVB receiver"
ATTRS{modalias}=="input:b0003v07CApA815e0200-e0,1,k71,72,73,74,80,8B,94,95,9E,9F,A4,A7,CA,CF,16D,174,184,188,192,193,194,195,ramlsfw"

Z výstupu nás zajímají takové informace, které jednoznačně definují IR přijímač:

$ cat /etc/udev/rules.d/10-mk-dvb.rules
... zkráceno ...
# Set a unique device for IR receiver in USB DVB-T
SUBSYSTEMS=="input", ATTRS{name}=="IR-receiver inside an USB DVB receiver", ATTRS{modalias}=="input:b0003v07CApA815e0200-e0,1,k71,72,73,74,80,8B,94,95,9E,9F,A4,A7,CA,CF,16D,174,184,188,192,193,194,195,ramlsfw", SYMLINK="input/ir", RUN+="service lirc restart"

Stačí restartovat počítač (nebo zastavit mythtv-backend, restartovat udev a znovu vložit USB tuner) a objeví se nový symbolický odkaz /dev/input/ir. Tento odkaz lze použít v /etc/lirc/hardware.conf.

Nastavení jedinečného adresáře pro připojení USB disků (flash, hdd)

Plugin Galerie obrázků umí importovat obrázky z CD-ROM či USB zařízení, avšak je třeba nastavit pevně cestu. (V době udev a spol. se pro USB Mass Storage vytvářejí přípojné body dle jména souborového systému.) Vzhledem k jednostrannému použití (pouze čtení obsahu flash disku) preferuji připojení read-only, abych zabránil poškození souborového systému při odpojení.

$ cat /etc/udev/rules.d/10-mk-dvb.rules
... zkráceno ...
# Mount any USB drive to a single mount point (for mythgallery, etc.)
SUBSYSTEMS=="usb", KERNEL=="sd?1", SYMLINK+="usbdisk", RUN="/bin/mount -t auto -o ro,noatime /dev/usbdisk /media/usbdisk"

Wake On Lan

Pro zprovoznění WOL přes interní síťovou kartu je třeba:

  • zapnout WOL v BIOSu (podmenu APM);
  • nastavit v /etc/default/halt proměnnou „NETDOWN=no“ (skript /etc/init.d/halt pak použije parametr -i pro příkaz /sbin/halt, což ponechá síťovou kartu zapnutou);
  • nastavit v /etc/rc.local příkaz „ethtool -s eth4 wol g“ (při každém startu a vypnutí nastaví příznak g pro WOL síťové karty eth4)

Probuzení z jiného počítače ve stejné podsíti zařídí příkaz „wakeonlan hw_addr“, kde hw_addr je MAC adresa zobrazená na HTPC po příkazu „ifconfig eth4 | grep HWaddr“. HTPC může být buď uspané (ACPI S3) nebo vypnuté (soft off – ACPI S5).

Monitorování hardware

Pro čipset nvidia ion (nforce2) zatím neexistuje podpora pro sledování otáček ventilátoru a ve výchozí instalaci Ubuntu 9.10 ani sledování teploty CPU – tj. lm_sensors nenajdou žádné senzory.

Pro sledování teploty grafického jádra stačí nainstalovat balíček „nvidia-settings“, spouští se v menu Systém / Správa / NVIDIA X Server settings. Teplotu GPU lze zobrazit i na příkazové řádce (maximální povolená je cca 95° C):

$ nvidia-settings -q GPUCoreTemp
Attribute 'GPUCoreTemp' (myth01:0.0): 60.

Chcete-li i pře/podtaktovávat, je třeba doplnit do /etc/X11/xorg.conf řádek s aktivací Coolbits:

Section "Device"
 Identifier      "Default Device"
 Driver  "nvidia"
 Option  "NoLogo"        "True"
 Option  "Coolbits"      "1"
EndSection

S teplotou procesoru je to komplikovanější, aktuální jádro 2.6.31 neobsahuje podporu pro Intel Atom. Je ovšem celkem snadné aktualizovat modul a zkompilovat jej samostatně.

Nejprve stáhněte zdrojový kód jádra a nainstalujte utility pro kompilaci a lm-sensors, poté rozbalte zdrojový kód do domovského adresáře, stáhněte patch pro modul coretemp.c, aplikujte jej a zkompilujte:

$ sudo apt-get install linux-source build-essential lm-sensors
$ mkdir -p $HOME/src
$ tar xvjf /usr/src/linux-source-2.6.31.tar.bz2 -C $HOME/src
$ wget --directory-prefix=$HOME/src http://mabene.icomedias.com/coretemp.patch
$ cd $HOME/src/linux-source-2.6.31
$ patch -p1 < ../coretemp.patch
$ make -j 2 -C /lib/modules/`uname -r`/build M=$HOME/src/linux-source-2.6.31/drivers/hwmon/ modules

Zkompilovány budou pouze všechny moduly v příslušném adresářy hwmon, nikoliv celé jádro. Nyní vyzkoušejte načíst modul a spustit sensors (netřeba spouštět „sensors-detect“):

$ insmod $HOME/linux-source-2.6.31/drivers/hwmon/coretemp.ko
$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0:      +41.0°C  (crit = +95.0°C)                  

coretemp-isa-0001
Adapter: ISA adapter
Core 1:      +43.0°C  (crit = +95.0°C)                  

coretemp-isa-0002
Adapter: ISA adapter
Core 2:      +41.0°C  (crit = +95.0°C)                  

coretemp-isa-0003
Adapter: ISA adapter
Core 3:      +43.0°C  (crit = +95.0°C)

Pro automatické načtení modulu po restartu jej zkopírujte do výchozího adresáře a aktualizujte /etc/modules:

$ sudo cp $HOME/src/linux-source-2.6.31/drivers/hwmon/coretemp.ko /lib/modules/`uname -r`/kernel/drivers/hwmon/coretemp.ko
$ sudo su -c "echo coretemp >> /etc/modules"

Pochopitelně, že po aktualizaci kernelu z repozitářů je nutné modul nahrát do nového adresáře znovu, v případě problému se zavedením jej i překompilovat (při změně verze).

P.S. Je rozumné v BIOSu nastavit CPU a GPU throttling při dosažení kritické teploty (tj. 95° C).

Přečíslování pořadí tunerů

Během nastavování tunerů došlo k přečíslování pořadí (12, 13 a 20, 21), zřejmě důsledkem opětovného individuálního odebírání a přidávání v backendu a též změnou USB portů.

Řešením je „Smazat všechny zachytávací karty“ (právě tuto a nikoliv jinou volbu) v backendu / Nastavení karet. Pak je postupně znovu přidat – pořadí v MythTV nezáleží na čísle v /dev adresářích, ale na pořadí přidávání do backendu.

Vězte, že na pořadí záleží: MythTV nahrává vždy z tuneru s nejnižším pořadovým číslem a živá TV je sledována na tuneru s nejvyšším možným číslem. Tím se předchází konfliktům při využití tunerů.

:,

3 Komentáře k tomuto příspěvku

  • Vookimedlo

    Zdravim,

    narazil jste behem delsiho pouzivani na nejaky zasadni problem s uvedenym resenim Vaseho HTPC?

    Premyslim o necem podobnem.

    Dekuji.

  • Milan Knížek

    @Vookimedlo: Problémy technického rázu viz horní část článku (především nestabilní tuner, ale moc mne ne to netrápí, neb ten druhý funguje bez problémů). Zatím nemám možnost přehrávat Full HD obsah. Přehrávání flash videí z internetu je problém – procesor to neutáhne (doufám, že Adobe už brzy přijde s hw podporou přehrávání).

    Z pohledu uživatelského – zatím jsem nekoupil klasickou televizi a používám cca 22″ LCD na konferenčním stolku u stěny (malý byt) + klávesnici s myší na stole. Na „živé“ vysílání televize se prakticky nedíváme vůbec, spíše nahráváme a pouštíme ze záznamu. Druhé použití je pro přístup na internet, a to denně.

    Původně jsem předpokládal, že budeme používat hlavně dálkové ovládání, ale kupodivu tomu tak není – nepoužíváme ho vůbec.

    Nejsem si jist, co se změní, až pořídím LCD televizi (asi 32″), nejspíše budu muset pořídit nějakou bezdrátovou klávesnici s „trackballem“, aby se počítač (firefox) dal pohodlně ovládat z pohovky či křesla.

  • Miloš Matůš

    Nestabilita a přečíslovaní tunerů může souviset PnP USB konfigurací, doporučuji se podívat na:
    http://mythtv.org/wiki/Device_Filenames_and_udev

    Dole je nějaký nový postup, který vypadá jednoduše (viz. Alternatives to udev for naming for DVB cards (The adapter_nr module option)

    Já jsem provozoval to původní řešení a teď bojuji s update na MythTV 0.22. Tam ve finále chystám tento postup aplikovat, protože se mi prohazoval DVB-T a DVB-S tunery v /dev/dvb.

    Miloš

2 Trackbacks / Pingbacks k tomuto příspěvku

  • Upgrade z Ubuntu 9.04 na 9.10 (z Jaunty Jackalope na Karmic Koala) | mrXaverius

    [...] Údajně se to mělo vyřešit novou verzí ovladačů. Ty mi bohužel nejdou zkompilovat/problém neřeší. Edit: Když do konfiguráku /etc/modprobe.d/options.conf vložíte řádek options dvb_usb disable_rc_polling=1 přestane to psát danou chybu, ale také přestane fungovat dálkové ovládání. Je tu ovšem ještě postup číslo 2: Co je potřeba: firmware verze alespoň 4.95.0, Drivery z linuxtv.org, které zkompilujete a nainstalujete následovně: make make install Pokud by nešly zkompilovat a hlásilo to nějaké chyby u firedtv, stačí upravit v souboru ./v4l/.conf řádek CONFIG_DVB_FIREDTV=m na CONFIG_DVB_FIREDTV=n Konfigurace tv karty a ovládání je hezky popsaná v blogu Milana Knížka. [...]

  • Vookimedlo Blog » Stavba HTPC

    [...] mě zaujal příspěvek na blogu Milana Knížka, jenž mě velmi ovlivnil v mém [...]

Přidejte komentář

Archiv