HTPC = MythTV + Zotac ION ITX

autor - Říj.17, 2009 - Hardware, Linux

Popis instalace a zkušeností s MythTV (původně Mythbuntu 9.10, nyní aktualizováno na 10.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 (cca Kč 1 000);
  • RC: Meliconi Universal 6 light, resp. AVerMedia RM-KS (cca Kč 800) – v současnosti nepoužíváno;
  • Klávesnice a myš: něco ze starých zásob s USB RF (cca Kč 800).

Hardware byl pořízen cca v prosinci 2009. 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.). Článek postupně aktualizuji, neb mi slouží i jako návod pro případ nové instalace.

[nggallery id=59]

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 SATA controller: nVidia Corporation MCP79 AHCI 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 003: ID 0425:0101 Motorola Semiconductors HK, Ltd G-Tech Wireless Mouse & Keyboard
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
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 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 sedmi 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       -       1319

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

Potenciální problémy

  • Některé formáty videí nejsou podporovány interním přehrávačem MythTV, což lze vyřešit použitím např. mplayeru jako výchozího přehrávače (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… Naštěstí se kvalita interního přehrávače značně zlepšila, takže od Ubuntu 10.10 používám výhradně jen tento.
  • Interní přehrávač nepodporuje titulky vložené do kontejneru MP4 (počítám, že to bude stejné i s jinými kontejnery), takže nezbývá, než je extrahovat do samostatného souboru.

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 10.10 (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), nastavením dálkového ovládání (které nakonec vůbec nepoužívám), automatického vypínání při nečinnosti a podobného dolaďování dle mých představ, ostatní v podstatě bez problémů. Níže jsou uvedeny jednotlivé postupy – ne všechny jsou nutné, záleží na vašich potřebách.

Též upozorňuji, že většina programů je z výchozích repozitářů distribuce Mythbuntu, takže lze bez problémů aktualizovat systé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)

Oproti předchozím verzím Ubuntu má již tuner plnou podporu – jak aktuální firmware, tak i ovladače jsou k dispozici hned po instalaci. Nicméně přesto je tuner celkově nestabilní (i ve verzi Ubuntu 10.10). Vzhledem k tomu, že televizi prakticky nesleduji a nestává se, že bych potřeboval nahrávat současně ze dvou multiplexů, tuner jsem úplně odpojil.

— Původní text

Pro informaci ponechávám původní text s popisem, kterak použít novější firmware a ovladače v4l (platilo pro Ubuntu 10.04:

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 celkem 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“;

— Konec původního textu —

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 (to je pochopitelně problém BIOSu). 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í.

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

Upozornění: celá část týkající se LIRC byla psána pro Mythbuntu 9.10. Protože IR ovladač nepoužívám, není aktualizováno.

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í

Upozornění: celá část týkající se konfigurace MythTV byla psána pro Mythbuntu 9.10. Protože IR ovladač nepoužívám, není aktualizováno.

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 obrazu“, čímž se rozumí původ přehledu televizních programů. Používám pouze EIT/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. V mém případě je „zdrojem“ televizní program vysílaný spolu s DVB-T signálem – tedy EIT a tento zdroj je shodný pro oba fyzické tunery.

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, maximum 5; používám 4). Tzn., že se dvěma fyzickými DVB-T tunery je k dispozici až 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). Typ profilu (slim, standard, high) záleží na výkonnosti grafické karty (ION = GeForce 9400) a typu obsahu (SD, HD) – zvolil jsem standardní. 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.

MythTV backend lze nastavit, aby se v případě nečinnosti sám vypnul – viz „Obecné“ nastavení v konfiguraci „mythtv-setup“. Uživatelsky lze nastavit příkaz pro nastavení času „probuzení“, příkaz pro kontrolu těsně před vypnutím a příkaz k vypnutí.

MythTV frontend však takové možnosti nemá – vývojáři projektu zřejmě očekávali, že uživatel v případě nepoužívání počítač ručně vypne (třeba tlačítkem dálkového ovládání nastaveným přímo na příkaz operačního systému – tedy mimo rámec frontendu). Neučiní-li tak a nechá běžet i frontend, pak MythTV backend vidí aktivní frontend a nespustí příkaz k vypnutí.

Podstatou programu MythWelcome 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. Prostředníkem pro komunikaci je program „mythshutdown“.

Mythbuntu je nastaveno na automatické spouštění frontendu po zapnutí počítače; 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 && initctl emit mythtv-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í).

Drobná potíž byla s tím, že aby správně proběhl suspend, tak musím zastavit mythtv-backend. Jakmile se však ukončil tento proces, došlo k násilnému ukončení i všech „podřízených“ procesů, včetně suspendu samotného. V diskusi na Ubuntuforums nakonec nejlépe poradil uživatel perceptron: je třeba napsat nový init skript /etc/init/mythtv-suspend.conf a ten spustit mimo rodičovský proces mythtv-backendu:

$ cat /etc/init/mythtv-suspend.conf
# MythTV Suspend command
description "MythTV Suspend"
author "Fabian Wenzel <notshownhere>"
start on mythtv-suspend
exec pm-suspend
# Define "initctl emit mythtv-suspend" as shutdown command
# in mythWelcome, replacing the call to pm-suspend.

Celý proces vypíná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).
  • ten spustí příkaz „initctl emit mythtv-suspend“. Tento příkaz provede spuštění dodatečného skriptu /etc/init/mythtv-suspend.conf, který konečně spustí pm-suspend…

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"
HOSTNAME=`cat /etc/hostname`

# 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 "$HOSTNAME: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 US15 hub zůstal po usnutí zapnutý – stačí pak stlačit libovolnou klávesu na klávesnici (připojená k US15, což jsou zadní porty na základní desce) a počítač se probudí. (Moduly DVB tunerů nejdou odstranit dříve, než je mythtv backend uvolní, proto ta smyčka čekající na skončení procesu):

$ cat /etc/pm/sleep.d/01_MythTV
#!/bin/sh
PRE=01-MythTV
echo "$PRE: running as `whoami`."

if [ "$1" = "suspend" ]; then
 stop mythtv-backend
 count=0
 while true; do
   if [ `pidof mythbackend` ] ; then
    count=$((count+1))
    sleep 1
   else
    break
   fi
 done
 echo "$PRE: mythbackend stopped. Count = ${count}"
 # Keep USB controller alive.
 # The actual device depends on which connector is used.
 # There are also other ways how to handle this:
 # http://bernaerts.dyndns.org/linux/220-ubuntu-resume-usb-hid
 # Test if enabled is set. Else set it.
 #grep 'USB0.*enabled' < /proc/acpi/wakeup > /dev/null || echo USB0 > /proc/acpi/wakeup
 #grep 'USB2.*enabled' < /proc/acpi/wakeup > /dev/null || echo USB2 > /proc/acpi/wakeup
 #grep 'US12.*enabled' < /proc/acpi/wakeup > /dev/null || echo US12 > /proc/acpi/wakeup
 grep 'US15.*enabled' < /proc/acpi/wakeup > /dev/null || echo US15 > /proc/acpi/wakeup
 grep 'NMAC.*enabled' < /proc/acpi/wakeup > /dev/null || echo NMAC > /proc/acpi/wakeup
 # Keep eth4 alive
 ethtool -s eth4 wol g
 echo "$PRE: ACPI wakeup status, cat /proc/acpi/wakeup:"
 cat /proc/acpi/wakeup
 echo "$PRE: RTC Alarm status, cat /proc/driver/rtc:"
 cat /proc/driver/rtc
 kill -15 `pidof mythwelcome` 2>/dev/null
 echo "$PRE: Now is `date --rfc-3339=seconds`. Finished."
fi

if [ "$1" = "resume" ]; then
 echo "$PRE: Now is `date --rfc-3339=seconds`. Resuming..."
 # DVB-T modules are loaded by previous steps of pm utils, we can start backend
 /usr/sbin/service mythtv-backend start.
 # Wait until mythtv-backend really works and start MythWelcome
 rm -f /tmp/mythbackend-status
 wget --timeout=10 --output-document=/tmp/mythbackend-status --retry-connrefused --tries=4 http://localhost:6544
 DISPLAY=:0 exec su -c "/usr/bin/mythwelcome -q" myth01 &
 sleep 8
 /usr/sbin/service apache2 restart # Apache freezes occassionally
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 (volitelné, čistě pro klid duše)

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ů.

Nastavení výstupu zvuku pro HDMI

Výchozí konfigurace Mythbuntu na HTPC nepodporovala zvukový výstup přes HDMI kabel. Řešení je jednoduché, je nutné upravit (či vytvořit) soubor /etc/asound.conf a restartovat:

$ cat /etc/asound.conf
pcm.hdmi_hw {
 type hw
 card 0     #  <-----  Put your card number here
 device 3   #  <-----  Put your device number here
 }

pcm.hdmi_formatted {
 type plug
 slave {
 pcm hdmi_hw
 rate 48000
 channels 2
 }
 }

pcm.hdmi_complete {
 type softvol
 slave.pcm hdmi_formatted
 control.name hdmi_volume
 control.card 0
 }

pcm.!default hdmi_complete

Věnujte pozornost číslu karty a zařízení, v mém případě je to 0 a 3. Hodnoty zjistíte například vypsáním souboru /proc/asound/pcm:

$ cat /proc/asound/pcm
00-00: ALC662 rev1 Analog : ALC662 rev1 Analog : playback 1 : capture 1
00-01: ALC662 rev1 Digital : ALC662 rev1 Digital : playback 1
00-03: NVIDIA HDMI : NVIDIA HDMI : playback 1

Ve směšovači (amixer, alsamixer, xfce4-mixer, atd…) se objeví ovladač „hdmi_volume“ – tím lze regulovat hlasitost výstupu. Upozorňuji, že ovladač Master není masterem pro hdmi_volume, tj. změna nastavení Master se nijak nepromítne do změny hlasitosti výstupu přes HDMI.

Nastavení směšovače (mixer) zvuku pro HDMI

Mou snahou je v podstatě nepoužívat dálkový ovladač k televizi, takže jsem hledal cestu, jak ovládat hlasitost v MythTV. (Nemám samostatný zesilovač, zvuk přehrávám přes TV stereo reproduktory.)

MythTV frontend umí převzít pouze ovládání Master a PCM a navíc má nepříjemnou vlastnost, že při spuštění videa či TV vždy nastaví hlasitost na předem definovanou úroveň, což mne dost iritovalo. Ovládání směšovače lze naštěstí vypnout v nastavení frontendu.

Další možností je používat program xfce4-volumed, který je automaticky spouštěn po přihlášení do Xfce. Ten se stará o spojení multimediálních kláves se směšovačem (Master) a zobrazováním upozornění o změně hlasitosti. Bohužel, nenašel jsem způsob, jak mu vnutit ovladač hdmi_volume místo Master. Takže též nepoužitelné – v nastavení sezení Xfce4 jsem nastavil, aby se nespouštěl.

Funkčním řešením bylo ručně namapovat multimediální klávesy (v nastavení klávesnice) s následujícím skriptem. Skript umí i zobrazovat upozornění o změně hlasitosti. Nejsem autorem skriptu, našel jsem jej v nějaké konferenci na internetu. Vyžaduje instalaci balíčku „lib-notify“.

$ cat /usr/local/bin/mk-volume-notify.sh
#!/bin/sh

if [ $1 = 'up' ]; then
 amixer set hdmi_volume 14+
elif [ $1 = 'down' ]; then
 amixer set hdmi_volume 14-
elif [ $1 = 'mute' ]; then
 amixer set hdmi_volume toggle
else
 echo "Unknown control command: $1" >&2
 exit 1
fi
VOLUME=$(amixer sget hdmi_volume | sed '/^ *Front\ Left: /{s/^.*\[\(.*\)%\].*/\1/;p;};d;')
STATUS=$(amixer sget hdmi_volume | awk '$2 == "Left:" { print $NF; }')
if [ $STATUS = '[off]' ]; then
 ICON=notification-audio-volume-muted
else
 echo $VOLUME
 if [ $VOLUME -eq 0 ]; then
 ICON=notification-audio-volume-off
 elif [ $VOLUME -lt 33 ]; then
 ICON=notification-audio-volume-low
 elif [ $VOLUME -lt 66 ]; then
 ICON=notification-audio-volume-medium
 else
 ICON=notification-audio-volume-high
 fi
 VOLUME="${VOLUME}%"
fi
notify-send "Volume" -i $ICON -h int:value:$VOLUME -h string:x-canonical-private-synchronous:

Takže příkaz pro zvýšení hlasitosti je „/usr/local/bin/mk-volume-notify.sh up“ (snížení „down“, umlčení „toggle“). Velikost změny hlasitosti se nastavuje číselnou hodnotou u příkazů „amixer set hdmi_volume 14+“, atd.

Kopírování souborů po síti

  • Mythweb: umožňuje kopírovat nahrané pořady přes webové rozhraní. Je to též nejrychlejší cesta – neb přenos není komprimován ani šifrován.
  • SFTP: umožní přístup na disk, vhodné pro download a upload např. nových videí či písniček. Na MythTV je třeba nainstalovat OpenSSH server. Vzhledem k tomu, že procesor Intel Atom není příliš výkonný, je vhodné vypnout komprimaci a zvolit méně náročné šifrování. (Viz /etc/ssh/sshd_config a doplňte volby „Ciphers arcfour“, „Compression no“, každou na samostatný řádek a bez uvozovek.) Rozdíl poznáte hlavně na gigabitové síti. Protokol SFTP je využíván např. Midnight Commanderem nebo Nautilem.
  • NFS či Samba: obdobně jako SFTP umožní přístup na disk, z pohledu klienta může být výhodou připojení vzdáleného disku do normální stromové hierarchie, což umožní práci se vzdálenými soubory i programům nepodporující virtuální souborové systémy. Při mém testování bylo NFS významně rychlejší než Samba.

Následné zpracování nahrávek (střih, překódování)

Vzhledem k nepřesným vysílacím časům nahrávám pořady s pár minutovým předstihem a prodloužením. Tj., vybrané nahrávky musím před archivací sestříhat a poté překódovat.

Zkrácený postup:

  • Oprava nahraného videa (automatický user job):
    • projectx + mencoder – opraví případné chyby v MPEG2 streamu z DVB-T.
    • mythtranscode – aktualizuje odkazy na klíčové snímky v MythTV db (nutné pro přesný střih)
  • Střih nahrávky (pomocí klávesy „e“ při přehrávání v mythfrontendu).
  • Zmenšení souboru nahrávky (ručně spouštěný user job „transcode“ v režimu autodetect – video se nepřekódovává, pouze ořeže dle střihu).
  • Překódování do H.264 v MP4 kontejneru – pomocí avidemuxu na desktopovém počítači (kvůli vyššímu výkonu počítače):
    • mythlink.pl – skript vytvoří symlinky k nahrávkám v samostatném adresáři;
    • cp -L symlink realfile – vytvoří se symlinku skutečný soubor (pomalé – dořešit přes hardlinks);
    • přes sftp zkopírovat na desktopový počítač a v avidemuxu překódovat pomocí přednastaveného profilu.
    • (vyzkoušet překódování na backendu, případně automatizovat poslední tři body).
:,

Komentáře: 9

  • 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š

  • Jakub Zlámal

    Mám občas potíže s
    elif netstat -a | grep „tcp“ | grep „www“ | grep -q „ESTABLISHED“ ; then

    protože, když hodně stahuji na svém pomalém připojení občas skončí s errorem „getnameinfo failed“, když se nepodaří přeložit IP adresu pomocí DNS a počítač se uspí.

    takže jsem ten příkaz modifikoval

    elif netstat -a -n | grep „tcp“ | grep „:80“ | grep -q „ESTABLISHED“ ; then

    Jinak výborný a velmi inspirativní článek, díky.

  • Milan Knížek

    @Miloš Matůš: díky za odkaz, konečně jsem se dostal k tomu, abych pro jistotu nastavil „napevno“ i čísla adaptérů – nicméně, od chvíle, kdy jsem přestal s USB dongly manipulovat, tak se tunery v MythTV již tak jako tak nepřečíslovávaly.

  • Miloš

    Milane,
    chtěl bych tě poprosit, jestli by jsi trochu neodkryl postup, kterým jsi zjistil, které moduly suspendovat pro S3. Já mám jen FE na tomto mabo, ale teď se mi vždy po sleepu nebo hibernaci znovu startuje. Stačilo aktovovat napájení na USB2. Mám tam USB klávesnici s myší (all in one) a fractal dálkáč, co také emuluje klávesnici. Dále ještě imon a čtučku karet, ale to moc nepoužívám a je to zapojen na vnitřní usb piny. Takže teď potřebuji vypátrat, co mi budí pc a pak jak to pořádně uspat.

    Moc děkuji,
    Miloš

  • Peter

    Ahoj.
    Mam velmi podobnu zostavu so sata DVD-RAM LG GSA-T40N. Chcel som nainstalovat novu verziu MythBuntu 11.10. CD vsak nenabootuje s chybou buffer I/O error on device sr0.

    Mechanika je urcite v poriadku win cd ide v pohode. Skusal som aj mechaniku uj-810…

    Nevies pordit cim by to mohlo byt…

  • Roman

    Ahoj,
    řeším problém s MythTV. Po přechodu na Ubuntu 12.04 se mi rozhodila barevnost videa v MythTV – barvy jsou takové jako hodně přesaturované. Protože se stejně změnily i barvy v dříve nahraných pořadech (předtím byly v pořádku), usuzuji na nějaký problém v kódování videa. Zkoušel jsem projít celé MythTV, díval jsem se na webu, ale nic se mi nepodařilo najít. Dokonce jsem zkusil i kompletně přeinstalovat Ubuntu a znovu nainstalovat MythTV a barvy jsou opět rozhozené.
    Pokud by jsi věděl čím by to mohlo být, budu rád za každou radu.
    Díky Roman

  • Milan Knížek

    No, to netuším, ale postupoval bych krok za krokem: dělá to jen u videa nebo jsou saturovanější i fotky či grafické prostředí desktopu? Jaký je přehrávač (vestavěný/mplayer/vlc)? Co při srovnání s jinými přehrávači? Co video z jiných zdrojů (DVD)? Jaká je grafická karta? Podporuje grafická karta hw dekódování videa? Pokud ano, má v ovladačích nějaké nastavení? A co nějaké filtry obrazu v profilech přehrávání MythTV (Nastavení / Nastavení přehrávání)?

    P.S. Problém asi nebude v kódování videa, ale jeho dekódování. (Video už je kódované při ukládání; nehledě na to, že pokud přijímáš DVB-T, tak se nejspíše ukládá přímo MPEG 2 stream – nic se nekóduje).

    P.S. Jestli to dělá u všech videí, tak možná nejjednodušší bude změnit sytost zobrazení přímo na televizi…

3 Trackbacks / Pingbacks for this entry

Zanechte komentář

Archiv