Freitag, 31. Dezember 2010

Neue Schriftarten hinzufügen

Und noch eine Erkenntnis:

Wenn man eine neue TrueType-Schriftart, die man auf der Platte hat, in der MythTV-Konfiguration auswählbar haben will, muss man die entweder im Verzeichnis /usr/share/mythtv haben oder aber eine symbolischen Link anlegen, bspw. habe ich das Ganze mit der schon installierten Liberation-Schriftart gemacht:

sudo ln -s /usr/share/fonts/truetype/ttf-liberation/LiberationSans-Regular.ttf /usr/share/mythtv/LiberationSans-Regular.ttf

Videotext in richtiger Größe

Schon ewig auf der TODO-Liste. Der Videotext bedeckte ungefähr nur ein Viertel des Fernsehers, war oben links zu sehen und damit eigentlich etwas zu klein. Habe mich heute mal im Quellcode ein wenig umgesehen. Ausgehend von der Datei avformatdecoder.cpp, die wir ja schon hier kennengelernt haben, bin ich über nuppelvideoplayer.cpp (sic!) auf die osd.cpp gekommen. Und was sehen da meine Augen in der Methode "InitTeletext" (Zeile 347)? Schöne hartverdrahtete Koordinatenwerte:

QRect area = QRect(20, 20, 620, 440);

Mal flugs geändert in:
QRect area = QRect(106, 60, 1067, 600);

Dann war zwar der Videotext größer, die Schrift sah aber auch etwas mickrig aus. Kein Wunder, wenn man ein paar Zeilen später im Quellcode auf diese Zeile stößt:

int fontsize = 440 / 26;

Habe ich dann geändert in:

int fontsize = 20;

Wie kommt man auf diese Koordinaten? Der Bildschirm ist 1280 x 720 groß. Ich wollte ursprünglich den ganzen Bildschirm bedecken, aber das kann man bei der Schrift vergessen (bei Videotext hat jeder Buchstabe diesselbe Breite). Ich hatte mich nun für 600 Pixel als Höhe entschieden, dadurch steht die Breite wegens des 16:9-Verhältnisses auch fest. Die X- und Y-Koordinaten errechnet man dann einfach dadurch, dass man das Fenster zentriert haben möchte. Bei der Fontsize habe ich dann ein wenig rumprobiert :-)

Donnerstag, 30. Dezember 2010

Neue Menüstruktur

Habe gerade das Hauptmenü von MythTV geändert :-) Ist supersimpel (wenn man ein wenig XML oder auch HTML kann): man muß nur die Datei mainmenu.xml im Verzeichnis /usr/share/mythtv/themes/defaultmenu editieren und kann dort nach Herzenslaune die Reihenfolge ändern. Außerdem habe ich noch einen Punkt hinzugefügt: Fernsehprogramm (geklaut ähem gecovert aus der Datei tv_schedule.xml). Dadurch sieht mein Hauptmenü jetzt folgendermaßen aus:

Fernsehen
Mediathek
Fernsehprogramm
Aufnahmen verwalten
CD/DVD
Informationen
Zubehör/Konfiguration

Leider ist ein Punkt nicht mehr sichtbar, so dass ein Scrollpfeil eingeblendet wird. Naja. Aber ich finde es superklasse, dass man das Programm selber anpassen kann!!!

Aufwachen und einschlafen...

Schon fast das ganze Jahr über habe ich versucht, meinen Mythbuntu-Rechner dazu zu bewegen, automatisch zu starten, wenn eine Aufnahme ansteht und sich wieder abzuschalten, wenn nix zu tun ist. Ich bin nach diesem HOW-TO vorgegangen:
http://www.mythtv.org/wiki/ACPI_Wakeup
bin aber schon an dem Punkt "Manually test wakup" gescheitert - er fuhr zwar runter aber nicht wieder hoch *grmpff* Habe im BIOS probehalber alles eingeschaltet - aber es tat sich nix, außer einem schönen kleinen Nebeneffekt: Immer wenn ich nun den Schalter der Steckerleiste anschalte, fährt der Rechner automatisch hoch :-)

Irgendwann beim endlosen Recherchieren ("das muss doch gehen!") bin ich dann mal darauf gekommen, es mit "Standby" oder "Ruhezustand" auszuprobieren - dazu nicht mit shutdown den Rechner runterfahren, sondern mit pm-suspend bzw. pm-hibernate. Und es tat!!! Also gleich mal MythTV entsprechend dem Artikel eingerichtet.

Dumm ist nur, dass die Technotrend S2-3200 diese Modi nicht richtig unterstützt (beim Wiederhochfahren bekam das Backend keinen Lock auf irgendeinen Sender) - man muss beim hibernaten/suspenden (ich weiß, ein tolles Deutsch!) das Backend beenden und die Kernel-Module für die Karte entladen und das Ganz beim hochkommen vice versa. Dies hatte ich dann auch mit einem kleinen Skript in /usr/lib/pm-utils/sleep.d/ gelöst, welches diese Schritte enthielt und konnte selber den Rechner in den Winterschlaf schicken, er wachte zur nächsten Aufnahme auf - prima! Als ich dann allerdings probierte, dass das Backend selber entscheidet, ob es nix zu tun hat und sich dann runterfährt, blieb der Rechner mitten während des Hibernate stecken - da lief nix mehr!!! Ist im Nachhinein auch logisch, denn folgende Sachen passieren:
1. Backend entscheidet, dass es Zeit ist, herunterzufahren und ruft pm-hibernate auf.
2. pm-Hibernate ruft alle Skripte auf, die bei einem Hibernate etwas machen, darunter meins, was das Backend beenden will.
Und dabei kommt es zu einem Deadlock: Das Backend wartet darauf, das pm-hibernate sich beendet, während pm-hibernate darauf wartet, dass das Backend sich beendet. Kann ja nicht gutgehen...
Den Anfang einer Lösung habe ich hier gefunden (vielen Dank dafür!):
http://bml303.blogspot.com/2009/11/suspending-mythtv-backend.html
Hier wird vom Backend einfach nur ein Mini-Skript aufgerufen, welches ein upstart-event aufruft. Dann braucht man nur noch ein anderes Skript, was auf dieses event hin gestartet wird und das Backend beendet. Bei mir sehen die Skripte nun folgendermassen aus:
/etc/init/suspending.conf:
start on (suspending)
script
/etc/init.d/lirc stop
/etc/init.d/mysql stop
pm-hibernate
end script

/usr/lib/pm-utils/sleep.d/01mythtv:
#!/bin/bash
case "$1" in
suspend|hibernate)
;;
resume|thaw)
/etc/init.d/lirc start
/etc/init.d/mysql start
;;
*)
echo "Unhandled argument: $1"
;;
esac

/usr/bin/dosuspend.sh:
#!/bin/sh

initctl emit suspending

Zusätzlich habe ich in /etc/pm/config.d/00sleep_module die Module angegeben, die bei hibernate/suspend entladen und beim hochkommen wieder geladen werden sollen:
SUSPEND_MODULES="$SUSPEND_MODULES saa7146 budget_ci dvb-core budget-core lirc_dev lirc_i2c"

Bei den Modulen bin ich mir nicht ganz sicher, welche gebraucht werden und welche nicht, aber da es funktioniert, habe ich keinen Bock mehr, die Minimalkonfiguration herauszufinden.

Ach ja, auch sehr wichtig: über "sudo visudo" muss noch angegeben werden, welche Sachen der mythtv-User ausführen darf und da muss man alle Sachen angeben, die in den Skripten gemacht werden. Bei mir sieht die Zeile folgendermassen aus:
%mythtv ALL = NOPASSWD: /usr/bin/irexec, /usr/bin/dosuspend.sh, /usr/bin/killall, /sbin/shutdown, /bin/sh, /usr/sbin/pm-hibernate, /usr/sbin/pm-suspend, /usr/bin/setwakeup.sh, /usr/bin/mythshutdown, /sbin/rmmod, /sbin/modprobe, /etc/init.d/lirc, /etc/init.d/mysql, /bin/sleep, /usr/bin/killall

You get the idea :-D

Dann hatte ich noch das Problem, dass der Rechner zu einer Aufnahme nicht aufwachen wollte. Ich habe vermutet, dass er mit der Zeit ein Problem hatte und lasse den Zeitstempel im Bakend-Setup nicht mehr von mythshutdown setzen, sondern von setwakeup.sh (im Format time_t) -genau wie es auch im Setup von Mythwelcome steht - klappt. Bei mir sehen die Einstellungen bei Mythwelcome so aus:

Command to set wakeup time             : sudo sh -c "/usr/bin/setwakeup.sh $time"
Wakeup time format : time_t
nvram-wakeup Restart command :
Command to restart : sudo shutdown -r now
Command to shutdown : sudo /usr/bin/pm-hibernate
Command to start the frontend : /usr/bin/mythfrontend

Backend-setup:
Block shutdown before client connected : unchecked
Idle shutdown timeout (secs) : 120
Max. wait for recording (min) : 15
Startup before rec. (secs) : 120
Wakeup time format : time_t
Command to set Wakeup Time : sudo sh -c "/usr/bin/setwakeup.sh $time"
Server halt command : sudo /usr/bin/dosuspend.sh
Pre Shutdown check-command : mythshutdown --check

Auf der Seite vorher
Bsckend-Leerlaufzeit vor EIT-Suche (Sek.): 120

Donnerstag, 2. Dezember 2010

HD-Patches

Wie schon geschrieben, sollte man eine VDPAU-fähige Grafikkarte sein eigen nennen, um vernünftig HD sehen zu können. Durch die folgenden zwei Bugreports hatte ich allerdings Hoffnung, auch ohne so eine zumindest in den Genuß von 720p-HD-Programmen wie Das Erste HD, ZDF HD schauen zu können:
http://code.mythtv.org/trac/ticket/7481
http://code.mythtv.org/trac/ticket/7522

Habe beide Fixes in meine 0.22-Version aufgenommen und kompiliert, viel gebracht hat es allerdings nicht :-(

Mittwoch, 1. Dezember 2010

Die richtige Startreihenfolge...

Manchmal kommt es vor, dass die Sachen nicht in der richtige Reihenfolge gestartet werden. Da kann es bei Systemstart schonmal vorkommen, dass sich das Frontend meldet mit der Meldung, ob denn das Backend nicht gestartet wurde? Doch wurde es, aber es war leider schneller als die MySQL-Datenbank und war dann beleidigt :-)

Man sollte also beide Sachen miteinander koppeln (zumindest, wenn man alle Sachen, also MySQL, Backend und Frontend, auf einer Maschine hat). Wie man das macht, habe ich hier gefunden:
http://bml303.blogspot.com/2009/11/suspending-mythtv-backend.html

Schonmal nicht schlecht. Allerdings kam es jetzt doch tatsächlich vor, dass das Frontend (bzw. Mythwelcome) schneller war als das Backend und MySQL, was sich dadurch bemerkbar macht, dass sich das Frontend im Standard-Theme meldet und ersteinmal die Sprache wissen möchte (es denkt also, es wäre der initiale Start auf diesem System und muss erstmal konfiguriert werden) *seufz* Wie also kann man dem System mitteilen, dass das Frontend bzw. Mythwelcome erst gestartet werden soll, wenn das Backend da ist? Die Lösung habe ich hier gefunden:
https://bugs.launchpad.net/ubuntu/+source/mythtv/+bug/470672/comments/11
Man muss nur dem GDM mitteilen, dass er erst starten darf, wenn das Backend soweit ist.

Bin mal gespannt, ob ich hoffentlich nie wieder das Frontend im Standard-Theme sehen muss... ;-)