Difference between revisions of "User:Lwoggardner"

From MythTV Official Wiki
Jump to: navigation, search
(What's not)
m (Suspend to RAM on idle)
(28 intermediate revisions by one user not shown)
Line 1: Line 1:
Let me just start by saying MythTV rocks.
 
 
I was keeping track of where I was at with Myth on my home wiki, but then figured I might as well share it here!
 
I was keeping track of where I was at with Myth on my home wiki, but then figured I might as well share it here!
  
== My Setup ==
+
= My Setup =
 +
 
 +
MythBuntu 12.04 with separated front-end/backend
 +
 
 +
* Live TV/TV recording Free to air HD/SD (from Sydney, Australia)
 +
* Multi-rec
 +
* DTS/AC3 passthrough including 5,1 surround digital out
 +
* VDPAU
 +
* [[MythMusic]]
 +
* [[MythGallery]]
 +
* [[MythVideo]]
 +
* Frontend Suspend to RAM + Wake On USB
 +
* Backend Suspend to RAM
 +
 
 +
== Backend ==
  
Combined FE/BE.
 
 
=== Hardware ===
 
=== Hardware ===
* AMD S754 Athlon 64 3700+
 
* Gigabyte S754 GA-K8VM800M
 
* 1GB Ram
 
* 320GB Western Digital 7200rpm 8M Serial ATA HDD
 
* 500GB Samsung Serial ATA HDD
 
* Albatron FX5200LP 128M 8x Video Card with DVI output.
 
* <strike>Gigabyte FX5200 128M 8x Video Card with DVI output.</strike>
 
  
* DVICO FusionHDTV Hybrid Tuner
+
* HDDs totalling 1.2Tb
* DNTVLive LP Tuner
+
* Intel S775 Core 2 Q6600 Quad-Core CPU
 +
* Gigabyte S775 GA-G33M-S2 Motherboard
 +
* 4GB RAM
 +
* PCI Hauppauge Nova-T-500 MCE(OEM) Dual DVBT tuner
 +
* PCI Hauppauge Nova-TD 400 Dual DVBT tuner
  
* DVICO FusionRemote
+
=== Software ===
  
 +
* MythBuntu 12.04
 +
* [[MythWeb]]
 +
* [http://svn.whuffy.com/index.fcgi/wiki Shepherd XMLTV grabber]
 +
 +
=== Configuration ===
 +
 +
* Channel 9, Gem, GO will not tune. The dtv_multiplex.network_id is null - set to 4114 seems to fix things.
 +
 +
==== Shepherd grabber ====
 +
 +
Standard install except cron job is disabled and allow mythtv to run mythfilldatabase. This is to allow mythtv to also be in control of suspend.
 +
 +
==== Suspend to RAM on idle ====
 +
 +
Why Suspend to RAM and not just a full shutdown that would "just work"?  Partly due to boot speed and partly just because.
 +
 +
'''Overview''':
 +
 +
* mythbackend controls idle detection, supported by a custom script to check other reasons to stay up, and sudo rules to allow passwordless root activity
 +
* suspend needs to unload dvb/usb modules which requires stopping mythbackend which means triggering suspend via upstart
 +
* wake up for recordings triggered by /sys/class/rtc as per [[ACPI_Wakeup]], hwlock-save update disabled via upstart override
 +
* wake up for daily processing (anacron) triggered by cron running on my (always on) DD-WRT enabled router issuing a WOL
 +
* wake up for serving adhoc web requests (mythweb et al) triggered by [[http://www.dd-wrt.com/wiki/index.php/Useful_Scripts#Web_Server_Wake-up|a custom router script]]
 +
 +
Settings (set via mythweb as server is basically headless)
 +
 +
{| border=1 cellspacing=0 cellpadding=5
 +
| '''Name'''
 +
| '''Setting'''
 +
| '''Value'''
 +
| '''Why'''
 +
|-|
 +
| Pre ShutdownWakeUp Check Command
 +
| preSDWUCheckCommand
 +
| /home/mythtv/bin/check-idle.sh
 +
| check if i'm logged in, or machine is in use for some other reason
 +
|-
 +
| Block ShutdownWakeUp without client
 +
| blockSDWUwithoutClient
 +
| 0
 +
| because this is a backend only machine
 +
|-
 +
| Set Wakeup time command
 +
| SetWakeuptimeCommand
 +
| sudo /usr/local/sbin/set-wakeup.sh $time
 +
|-
 +
| Server Halt command
 +
| ServerHaltCommand
 +
| sudo /usr/local/sbin/emit-suspend.sh
 +
| can't suspend directly because we need to shutdown mythbackend during suspend
 +
|-
 +
| Wakeup time format
 +
| WakeupTimeFormat
 +
| time_t
 +
| as per [[ACPI_Wakeup|ACPI wakeup]] page to use /sys/class/rtc
 +
|-
 +
|}
 +
===== /home/mythtv/bin/check_idle.sh =====
 +
<pre>
 +
#!/bin/sh
 +
 +
ACCESS_LOG="/var/log/apache2/access.log"
 +
LOG_AGE="5 minutes ago"
 +
 +
# Anacron runs our daily, weekly, monthly housekeeping (backups etc)
 +
# anacron runs at boot, on resume from suspend, and at 2:00am via a cron job
 +
# It will actually do its thing the first time it runs after midnight on any given day
 +
# In general I expect it to run at 2:30am when we are resumed by a cron scheduled WOL event from the router
 +
pgrep 'anacron' && {
 +
    echo "Anacron job is running"
 +
    exit 1
 +
}
 +
 +
# users are logged in
 +
if [ `who | wc -l` -gt 0 ] ; then
 +
    who
 +
    exit 1
 +
fi
 +
 +
# apache request in last 5 minutes
 +
# also need to configure apache to drop its dummy internal connections from the access logs
 +
if [ -f $ACCESS_LOG -a `stat -c %Y $ACCESS_LOG` -gt `date --date "$LOG_AGE" "+%s"` ] ; then
 +
    echo "Web server in use"
 +
    exit 1
 +
fi
 +
 +
# and all the standard mythtv stuff
 +
/usr/bin/mythshutdown -v --check
 +
</pre>
 +
 +
===== /etc/sudoers.d/mythtv =====
 +
<pre>
 +
#Enable mythtv to set the real time clock and emit the suspending event without a password prompt
 +
 +
%mythtv ALL = NOPASSWD: /usr/local/sbin/emit-suspend.sh, /usr/local/sbin/set-wakeup.sh
 +
</pre>
 +
 +
===== /usr/local/sbin/set-wakeup.sh =====
 +
<pre>
 +
#!/bin/sh
 +
#$1 is the first argument to the script. It is the time in seconds since 1970
 +
#this is defined in mythtv-setup with the time_t argument
 +
 +
echo 0 > /sys/class/rtc/rtc0/wakealarm      #this clears your alarm.
 +
echo $1 > /sys/class/rtc/rtc0/wakealarm    #this writes your alarm
 +
</pre>
 +
 +
===== /usr/local/sbin/emit-suspend.sh =====
 +
<pre>
 +
#!/bin/sh
 +
# Suspend via upstart
 +
initctl emit suspending
 +
</pre>
 +
 +
===== /etc/init/suspending.conf =====
 +
<pre>
 +
start on (suspending)
 +
 +
script
 +
  logger -t "suspending" "Suspending via upstart"
 +
  pm-suspend
 +
end script
 +
</pre>
 +
 +
===== /etc/pm/sleep.d/50_mythtv =====
 +
<pre>
 +
#!/bin/sh
 +
# The dvb modules need to be unloaded to allow suspend/resume to work
 +
# To unload the modules mythbackend needs to be stopped
 +
#
 +
# NOTE: Suspend cannot be executed in a child process of mythbackend itself (eg via server halt command)
 +
# since it will simply abort at the point we stop mythbackend below. If this is required use upstart or some
 +
# other means to decouple pm-suspend from the mythbackend process.
 +
 +
LOG=/var/log/mythtv/mythsuspend.log
 +
MODULES="dvb_usb_dib0700"
 +
 +
echo "Will now $1 mythtv" | tee -a $LOG
 +
 +
case $1 in
 +
  suspend|hibernate)
 +
       
 +
        stop mythtv-backend 2>&1 | tee -a $LOG
 +
        sleep 3
 +
        modprobe -r  $MODULES 2>&1 | tee -a $LOG
 +
  ;;
 +
  resume|thaw)
 +
       
 +
        modprobe $MODULES
 +
        start mythtv-backend | tee -a $LOG
 +
  ;;
 +
esac
 +
</pre>
 +
 +
== Frontend ==
 +
 +
=== Hardware ===
 +
* ZOTAC ionitx-d-e board, 2G memory
 +
* Szrealan E-2011 case (tiny!)
 +
* External DVD player
 +
* 1Tb external e-Sata drive
 
* BenQ PE8700 DLP Projector
 
* BenQ PE8700 DLP Projector
 +
* Sony Bravia TV over HDMI
 +
* CambridgeAudio AV receiver
 +
  
 
=== Software ===
 
=== Software ===
* Ubuntu Dapper (upgraded from Breezy server install)
+
* MythBuntu 12.04 64bit
* Kernel 2.6.15-27-amd64-k8
+
* [http://synergy2.sourceforge.net/ Synergy] to allow laptop to be the keyboard/mouse.
* v4l-dvb-0.9 drivers patched to handle vendor/device codes being the same between 2 different devices!!  (Many thanks to [http://www.itee.uq.edu.au/~chrisp/Linux-DVB/ Chris Pascoe] for getting the DVICO card going)
+
* [http://www.nvidia.com/object/unix.html NVidia amd64 version 8774]
+
* lirc version 0.8.0 (Dapper upgrade changed device from <code>/dev/usb/hiddev0</code> to <code>/dev/hiddev0</code>
+
* [[Ratpoison]] window manager
+
* MythTV 0.20.x fixes branch
+
  
 +
=== Configuration ===
  
 +
==== Enable Wake on USB ====
 +
We need to enable USB0 in /proc/acpi/wakeup
  
== What's working for me ==
+
Note if USB2 is also enabled, then the board immediately wakes up regardless, unsure if this is due to another USB device
  
* Live TV/TV recording Free to air HD/SD (from Sydney, Australia). Both tuner's simultaneously.
+
Seems to be enabled by default for Mythbuntu 12.04 but
* AC3 passthrough including 5,1 surround
+
Current cheap as Chinese remote does not send the wakeup signal from the power button unfortunately
* [http://www.cse.unsw.edu.au/~willu/xmltv/tv_grab_au_reg.html XMLTV grabber] from the OZTivo site
+
* [[MythMusic]]
+
* [[MythGallery]]
+
* [[MythDVD]] using xine as an external player
+
* [[MythWeb on Jetty]] rather than apache including the WAP version on the BlackBerry!
+
* Using irexec to restart Myth, including with a different Layout to switch between the Projector and TV
+
  
== What's not ==
+
==== Auto-start X ====
* The Albatron FX5200 card does not do PAL output properly, as it renders in B&W. Fortunately my TV autodetects NTSC colour.
+
* The Gigabyte FX5200 card has been fingered as the cause of my DVI problems on my projector. Apparently it freaks out a PCB component causing the EDID data to become corrupt. (So far so good on the Albatron card since Aug 2006).
+
  
BTW: I previously had the Albatron and Gigabyte cards the wrong way around in this description....
+
* disabled lightdm in via upstart override (echo 'manual' > /etc/init/lightdm.override)
 +
* [[Frontend Auto Login|Simple mingetty startup]] with a tty definition and a startx script in the console
 +
* user .xsession linked to /usr/share/mythbuntu/session.sh so we get the same xfce startup.
 +
 
 +
===== /etc/init/tty7.conf =====
 +
<pre>
 +
# tty7 - mythtv
 +
#
 +
start on runlevel [23]
 +
stop on runlevel [!23]
 +
 
 +
respawn
 +
exec /sbin/mingetty --autologin=mythtv tty7
 +
</pre>
  
== What more do I want to do ==
+
===== ~mythtv/.profile =====
* I'd like MythMusic to use MythGallery as a visualisation!
+
Appended to detect if we are on tty7, in which case we start-up X with an optional layout specified in ~/.mythrc
* More cleanup of MythGallery thumbnail code. (Thumbnail cache is unnecessary if EXIF thumbnails are available in the images themselves)
+
  
== Useful config info ==
+
Note that when X is stopped we automatically logout and respawn
xorg.conf for PE8700 and TV-Out
+
  
ExactModeTimingsDVI is important for the projector.
 
This is the main detail, the driver autodetects the connected display and will use the Projector (DFP) in preference to TV-Out.
 
 
<pre>
 
<pre>
 +
start-frontend() {
 +
MYTHRC="$HOME/.mythrc"
 +
if [ -r $MYTHRC ] ; then
 +
  . $MYTHRC
 +
fi
 +
 +
LAYOUT_SPEC=
 +
[ ! -z "$LAYOUT" ] && LAYOUT_SPEC="-layout $LAYOUT"
 +
 +
startx --  $LAYOUT_SPEC -logverbose 5
 +
logout
 +
}
 +
 +
tty | grep tty7 && start-frontend
 +
</pre>
 +
 +
===== xorg.conf =====
 +
For PE8700  Samsung LCD. See also the tips for the [[NVidiaProprietaryDriver]]
 +
 +
The FX5200 cards were the cause of my DVI problems on my projector. Apparently they freak out a PCB component causing the EDID data to become corrupt.
 +
(a Gigabyte card lasted from Aug 2006 to Dec 2007. Fortunately the new nvidia driver allow you to use a CustomEDID to load the data from a file.
 +
 +
Option ExactModeTimingsDVI is also important for the projector.
 +
 +
Option "UseEDIDDpi" "false" or some equivalent control of DPI is important for the Samsung television otherwise you get really small fonts (fixed in 0.21)
 +
 +
There are two layouts, the default uses outputs via VGA to a Samsung LCD television, the second uses DVI to the PE8700 projector.
 +
 +
<pre>
 +
Section "ServerLayout"
 +
    Identifier    "Main" # Output to Samsung LCD television
 +
#LCD[0] VGA, LCD[1] HDMI
 +
    Screen        0 "LCD[1]" 0 0
 +
    Option        "Xinerama" "off"
 +
EndSection
 +
 +
Section "ServerLayout"
 +
    Identifier    "Projector"
 +
    Screen        0 "Projector[0]" 0 0
 +
    Option        "Xinerama" "off"
 +
EndSection
 +
 +
Section "Module"
 +
        Load    "glx"
 +
EndSection
 +
 
Section "Device"
 
Section "Device"
     Identifier    "FX5200[0]"
+
     Identifier    "ION-GPU[0]"
 
     Driver        "nvidia"
 
     Driver        "nvidia"
     BusID          "PCI:1:0:0"
+
     BusID          "PCI:3:0:0"
 
     Screen        0
 
     Screen        0
     #Not sure of the effect of this
+
     #This prevents the cursor being displayed on resume from suspend
     Option        "NvAGP" "3"
+
     Option        "HWCursor" "off"
 +
EndSection
 +
 
 +
Section "Screen"
 +
    Identifier    "LCD[1]"
 +
    Device        "ION-GPU[0]"
 +
    Monitor        "AnyMonitor"
 +
    DefaultDepth    24
 +
    Option        "UseDisplayDevice" "DFP-1" # HDMI
 +
    Option        "ConnectedMonitor" "DFP-1"
 
EndSection
 
EndSection
  
 
Section "Screen"
 
Section "Screen"
     Identifier    "Screen[0]"
+
     Identifier    "LCD[0]"
     Device        "FX5200[0]"
+
     Device        "ION-GPU[0]"
     Monitor        "Either"
+
     Monitor        "AnyMonitor"
 
     DefaultDepth    24
 
     DefaultDepth    24
 +
    Option        "ConnectedMonitor" "CRT-1"
 +
    Option        "UseEDIDDpi" "FALSE" #Computed DPI values not so good for TV display
 +
    Option        "UseDisplayDevice" "CRT-1" # VGA out
 
     SubSection    "Display"
 
     SubSection    "Display"
 
         Depth      24
 
         Depth      24
         Modes      "1280x720" "720x576" "800x600"
+
         Modes      "1360x768" "800x600"
 +
    EndSubSection
 +
EndSection
 +
 
 +
Section "Screen"
 +
    Identifier    "Projector[0]"
 +
    Device        "ION-GPU[0]"
 +
    Monitor        "AnyMonitor"
 +
    Option        "ConnectedMonitor" "DFP"
 +
    Option        "UseDisplayDevice" "DFP" # DVI out
 +
    Option        "CustomEDID" "DFP-0:/etc/X11/benq-c.bin"
 +
 
 +
    DefaultDepth    24
 +
    SubSection    "Display"
 +
        Depth      24
 +
        Modes      "1280x720" "800x600"
 
     EndSubSection
 
     EndSubSection
 
EndSection
 
EndSection
  
 
Section "Monitor"
 
Section "Monitor"
     Identifier  "Either"
+
     Identifier  "AnyMonitor"
 
     Option      "DPMS"
 
     Option      "DPMS"
    #Option      "UseEDIDFreqs" "true"
 
 
     Option      "ExactModeTimingsDVI" "true"
 
     Option      "ExactModeTimingsDVI" "true"
 
     Option      "RenderAccel" "true"
 
     Option      "RenderAccel" "true"
    #Option      "TVStandard" "PAL-B"
 
    Option      "TVOutFormat" "COMPOSITE"
 
    Option      "TVOverScan" "0.5"
 
 
EndSection
 
EndSection
 +
 
</pre>
 
</pre>
Because the projector still signals that it is "connected" during its 2 minute warm down phase I have a second ServerLayout that points to a Screen section that specifies
 
  Option "UseDisplayDevice" "TV"
 
in case I am in a hurry to switch back to the TV.
 
  
.asoundrc For ALSA digital audio out
+
===== ~mythtv/.mythtv/session =====
 +
 
 +
Start a ruby program that listens to /dev/lircd and manages -
 +
 
 +
* mythtv via updating the database + network control port
 +
* the AV receiver via RS232 - volume/mute, power on/off, input type
 +
* alsa via calls to amixer - volume/mute, digital/analog outputs
 +
* suspend on lirc idle or power button
 +
* restart specifying TV or Projector layout
 +
 
 
<pre>
 
<pre>
pcm.!default {
+
#!/bin/sh
type plug
+
 
slave {
+
#store our dbus session and display where our kill script can pick it up
pcm "spdif"
+
export | egrep "DBUS_SESSION_BUS_ADDRESS|DISPLAY" > ~/.xsession-export
rate 48000
+
 
format S16_LE
+
#Run unclutter to hide the cursor after resume - not required - see HWCursor in xorg.conf
}
+
#unclutter -display $DISPLAY &
}
+
 
 +
#run our main lirc control program
 +
/home/mythtv/bin/audiomodeswitch/main.rb &
 
</pre>
 
</pre>
  
/etc/inittab entry to auto login the mythtv user
+
===== ~mythtv/bin/suspend_mythtv.sh =====
 
<pre>
 
<pre>
1:2345:respawn:/sbin/mingetty --autologin mythtv tty1
+
#!/bin/sh
 +
 
 +
# We use dbus-send because it seems to block until resume which is what we want
 +
echo "Suspending"
 +
 
 +
dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer \
 +
        org.freedesktop.Hal.Device.SystemPowerManagement.Suspend int32:2
 +
 
 +
echo "Resumed"
 
</pre>
 
</pre>
  
 +
===== ~mythtv/bin/kill_mythtv.sh =====
 +
Script is called by the ruby program, but also useful to restart from ssh
 +
<pre>
 +
#!/bin/sh
 +
 +
[ -f $HOME/.xsession-export ] && . $HOME/.xsession-export
 +
echo "killing mythfrontend"
 +
pkill mythfrontend
 +
#pkill unclutter
 +
echo "xfce logout $DISPLAY"
 +
xfce4-session-logout --logout --fast
 +
</pre>
 +
 +
==== LIRC Remote Control ====
 +
 +
Standard mythbuntu setup for MCE remote.
 +
 +
==== Sound ====
 +
 +
Onboard sound
 +
 +
=====~/.asoundrc=====
 +
 +
Could probably do better 48/44kHz switching on the analog output between music and video but if that is important we just go digital passthrough and let the receiver do the work.
 +
 +
In myth config, you can see that default sound device is ALSA:myth-video, the passthrough device is ALSA:myth-passthru, and mythmusic uses ALSA:myth-music. the AC3PassThru and DTSPassThru
 +
settings are managed by the ruby program
  
.profile to start X from the auto login, also starts irexec.
 
 
<pre>
 
<pre>
PATH=$PATH:$HOME/bin
+
#First line comment
  
start-frontend() {
+
pcm.myth-music {
irexec --daemon $HOME/.lircrc
+
  type copy
 +
  slave.pcm "default"
 +
}
  
#If $HOME/.xlayout exists use its contents to specify a layout to the XServer
+
ctl.myth-music {
LAYOUT_SPEC=""
+
  type hw
XLAYOUT=$HOME/.xlayout
+
  card 0
if [ -r $XLAYOUT ] ; then
+
}
  read LAYOUT < $XLAYOUT
+
  LAYOUT_SPEC="-layout $LAYOUT"
+
  rm $XLAYOUT
+
fi
+
  
startx -- $LAYOUT_SPEC -logverbose 5
+
pcm.myth-video {
 +
  type copy
 +
  slave.pcm "default"
 +
}
  
 +
ctl.myth-video {
 +
  type hw
 +
  card 0
 
}
 
}
  
tty | grep tty1 && start-frontend
+
pcm.myth-passthru {
 +
  type copy
 +
  slave.pcm = "spdif"
 +
}
  
</pre>
+
ctl.myth-passthru {
 +
  type hw
 +
  card 0
 +
}
  
.xsession To start MFE and Ratpoison
 
<pre>
 
#Remove default blue background around TV-out picture
 
xvattr -a XV_COLORKEY -v 0
 
ratpoison &
 
mythfrontend -l mfe.log
 
 
</pre>
 
</pre>
  
.ratpoisonrc
+
=== minimyth.conf ===
<pre>
+
TODO - Works nicely through the WRT310N router etc, but we have a hard drive have decided to stick with Mythbuntu for now.
#Make escape (default C-t) not clash with mythTV key bindings
+
escape C-r
+
#Banish the mouse cursor out of the way.
+
addhook switchwin banish
+
</pre>
+
  
script to restart MythTV via irexec.
+
== Upgrades ==
 +
 
 +
=== Mythbuntu 12.04 ===
 +
 
 +
Reconfigured from scratch for no particular reason
 +
 
 +
=== Mythbuntu 10.10 ===
 +
 
 +
100% clean on server
 +
 
 +
front end was missing non-versioned symlink for vdpau nvidia library
 
<pre>
 
<pre>
#!/bin/bash
+
ln -s /etc/alternatives/libvdpau_nvidia.so /usr/lib/libvdpau_nvidia.so
pkill -t tty1 -u mythtv mythfrontend
+
if [ $# -gt 0 ] ; then
+
  echo $1 > $HOME/.xlayout
+
fi
+
sleep 1
+
pkill -u mythtv irexec
+
pkill -9 -t tty1 -u mythtv
+
 
</pre>
 
</pre>
  
the .lircrc file (buttons as per the DVICO remote, which I think are now standard in the lirc distribution)
+
=== Mythbuntu 9.10 ===
<pre>
+
## irexec
+
# Bounce this tty
+
begin
+
    button = power_onoff
+
    prog  = irexec
+
    config = /home/mythtv/bin/ir_power_onoff.sh &
+
end
+
  
#Run myth-setup
+
100% clean on server
begin
+
    button = cpf
+
    prog  = irexec
+
    config = /home/mythtv/bin/ir_myth_setup.sh &
+
end
+
  
#Bounce the tty, set the TV layout.
+
front end needed /etc/events.d/tty7 moved to /etc/init/tty7.conf
begin
+
 
    button = tv_onoff
+
=== Mythbuntu 8.10  ===
    prog  = irexec
+
 
    config = /home/mythtv/bin/ir_power_onoff.sh TV-Only &
+
=== 0.21-fixes ===
end
+
upgrade smooth
</pre>
+
  
=== 0.19.x fixes info ===
+
[[Category:User_Systems]]
* MythTV 0.19.x fixes branch (had to move <code>/usr/lib/libdts_pic.a</code> to <code>/usr/lib/libdts.a</code> to compile)
+
* [http://xinehq.de Xine] external DVD/video player
+
* XvMC  ( with Bob de-interlacing for HD channels. Have to manually turn it off for SD stuff).
+

Revision as of 04:09, 12 January 2013

I was keeping track of where I was at with Myth on my home wiki, but then figured I might as well share it here!

My Setup

MythBuntu 12.04 with separated front-end/backend

  • Live TV/TV recording Free to air HD/SD (from Sydney, Australia)
  • Multi-rec
  • DTS/AC3 passthrough including 5,1 surround digital out
  • VDPAU
  • MythMusic
  • MythGallery
  • MythVideo
  • Frontend Suspend to RAM + Wake On USB
  • Backend Suspend to RAM

Backend

Hardware

  • HDDs totalling 1.2Tb
  • Intel S775 Core 2 Q6600 Quad-Core CPU
  • Gigabyte S775 GA-G33M-S2 Motherboard
  • 4GB RAM
  • PCI Hauppauge Nova-T-500 MCE(OEM) Dual DVBT tuner
  • PCI Hauppauge Nova-TD 400 Dual DVBT tuner

Software

Configuration

  • Channel 9, Gem, GO will not tune. The dtv_multiplex.network_id is null - set to 4114 seems to fix things.

Shepherd grabber

Standard install except cron job is disabled and allow mythtv to run mythfilldatabase. This is to allow mythtv to also be in control of suspend.

Suspend to RAM on idle

Why Suspend to RAM and not just a full shutdown that would "just work"? Partly due to boot speed and partly just because.

Overview:

  • mythbackend controls idle detection, supported by a custom script to check other reasons to stay up, and sudo rules to allow passwordless root activity
  • suspend needs to unload dvb/usb modules which requires stopping mythbackend which means triggering suspend via upstart
  • wake up for recordings triggered by /sys/class/rtc as per ACPI_Wakeup, hwlock-save update disabled via upstart override
  • wake up for daily processing (anacron) triggered by cron running on my (always on) DD-WRT enabled router issuing a WOL
  • wake up for serving adhoc web requests (mythweb et al) triggered by [custom router script]

Settings (set via mythweb as server is basically headless)

Name Setting Value Why
Pre ShutdownWakeUp Check Command preSDWUCheckCommand /home/mythtv/bin/check-idle.sh check if i'm logged in, or machine is in use for some other reason
Block ShutdownWakeUp without client blockSDWUwithoutClient 0 because this is a backend only machine
Set Wakeup time command SetWakeuptimeCommand sudo /usr/local/sbin/set-wakeup.sh $time
Server Halt command ServerHaltCommand sudo /usr/local/sbin/emit-suspend.sh can't suspend directly because we need to shutdown mythbackend during suspend
Wakeup time format WakeupTimeFormat time_t as per ACPI wakeup page to use /sys/class/rtc
/home/mythtv/bin/check_idle.sh
#!/bin/sh

ACCESS_LOG="/var/log/apache2/access.log"
LOG_AGE="5 minutes ago"

# Anacron runs our daily, weekly, monthly housekeeping (backups etc)
# anacron runs at boot, on resume from suspend, and at 2:00am via a cron job
# It will actually do its thing the first time it runs after midnight on any given day
# In general I expect it to run at 2:30am when we are resumed by a cron scheduled WOL event from the router 
pgrep 'anacron' && {
    echo "Anacron job is running"
    exit 1
}

# users are logged in
if [ `who | wc -l` -gt 0 ] ; then
    who
    exit 1
fi

# apache request in last 5 minutes
# also need to configure apache to drop its dummy internal connections from the access logs
if [ -f $ACCESS_LOG -a `stat -c %Y $ACCESS_LOG` -gt `date --date "$LOG_AGE" "+%s"` ] ; then
    echo "Web server in use"
    exit 1
fi

# and all the standard mythtv stuff
/usr/bin/mythshutdown -v --check
/etc/sudoers.d/mythtv
#Enable mythtv to set the real time clock and emit the suspending event without a password prompt

%mythtv ALL = NOPASSWD: /usr/local/sbin/emit-suspend.sh, /usr/local/sbin/set-wakeup.sh
/usr/local/sbin/set-wakeup.sh
#!/bin/sh
#$1 is the first argument to the script. It is the time in seconds since 1970
#this is defined in mythtv-setup with the time_t argument

echo 0 > /sys/class/rtc/rtc0/wakealarm      #this clears your alarm.
echo $1 > /sys/class/rtc/rtc0/wakealarm     #this writes your alarm
/usr/local/sbin/emit-suspend.sh
#!/bin/sh
# Suspend via upstart
initctl emit suspending
/etc/init/suspending.conf
start on (suspending)

script
   logger -t "suspending" "Suspending via upstart" 
   pm-suspend
end script
/etc/pm/sleep.d/50_mythtv
#!/bin/sh
# The dvb modules need to be unloaded to allow suspend/resume to work
# To unload the modules mythbackend needs to be stopped
# 
# NOTE: Suspend cannot be executed in a child process of mythbackend itself (eg via server halt command)
# since it will simply abort at the point we stop mythbackend below. If this is required use upstart or some
# other means to decouple pm-suspend from the mythbackend process.

LOG=/var/log/mythtv/mythsuspend.log
MODULES="dvb_usb_dib0700"

echo "Will now $1 mythtv" | tee -a $LOG

case $1 in
  suspend|hibernate)
        
        stop mythtv-backend 2>&1 | tee -a $LOG
        sleep 3
        modprobe -r  $MODULES 2>&1 | tee -a $LOG 
  ;;
  resume|thaw)
        
        modprobe $MODULES
        start mythtv-backend | tee -a $LOG
  ;;
esac

Frontend

Hardware

  • ZOTAC ionitx-d-e board, 2G memory
  • Szrealan E-2011 case (tiny!)
  • External DVD player
  • 1Tb external e-Sata drive
  • BenQ PE8700 DLP Projector
  • Sony Bravia TV over HDMI
  • CambridgeAudio AV receiver


Software

  • MythBuntu 12.04 64bit
  • Synergy to allow laptop to be the keyboard/mouse.

Configuration

Enable Wake on USB

We need to enable USB0 in /proc/acpi/wakeup

Note if USB2 is also enabled, then the board immediately wakes up regardless, unsure if this is due to another USB device

Seems to be enabled by default for Mythbuntu 12.04 but Current cheap as Chinese remote does not send the wakeup signal from the power button unfortunately

Auto-start X

  • disabled lightdm in via upstart override (echo 'manual' > /etc/init/lightdm.override)
  • Simple mingetty startup with a tty definition and a startx script in the console
  • user .xsession linked to /usr/share/mythbuntu/session.sh so we get the same xfce startup.
/etc/init/tty7.conf
# tty7 - mythtv
#
start on runlevel [23]
stop on runlevel [!23]

respawn
exec /sbin/mingetty --autologin=mythtv tty7
~mythtv/.profile

Appended to detect if we are on tty7, in which case we start-up X with an optional layout specified in ~/.mythrc

Note that when X is stopped we automatically logout and respawn

start-frontend() {
MYTHRC="$HOME/.mythrc"
if [ -r $MYTHRC ] ; then
   . $MYTHRC
fi

LAYOUT_SPEC=
[ ! -z "$LAYOUT" ] && LAYOUT_SPEC="-layout $LAYOUT"

startx --  $LAYOUT_SPEC -logverbose 5
logout
}

tty | grep tty7 && start-frontend
xorg.conf

For PE8700 Samsung LCD. See also the tips for the NVidiaProprietaryDriver

The FX5200 cards were the cause of my DVI problems on my projector. Apparently they freak out a PCB component causing the EDID data to become corrupt. (a Gigabyte card lasted from Aug 2006 to Dec 2007. Fortunately the new nvidia driver allow you to use a CustomEDID to load the data from a file.

Option ExactModeTimingsDVI is also important for the projector.

Option "UseEDIDDpi" "false" or some equivalent control of DPI is important for the Samsung television otherwise you get really small fonts (fixed in 0.21)

There are two layouts, the default uses outputs via VGA to a Samsung LCD television, the second uses DVI to the PE8700 projector.

Section "ServerLayout"
    Identifier     "Main" # Output to Samsung LCD television
#LCD[0] VGA, LCD[1] HDMI
    Screen         0 "LCD[1]" 0 0
    Option         "Xinerama" "off"
EndSection

Section "ServerLayout"
    Identifier     "Projector"
    Screen         0 "Projector[0]" 0 0
    Option         "Xinerama" "off"
EndSection
 
Section "Module"
        Load    "glx"
EndSection

Section "Device"
    Identifier     "ION-GPU[0]"
    Driver         "nvidia"
    BusID          "PCI:3:0:0"
    Screen         0
    #This prevents the cursor being displayed on resume from suspend
    Option         "HWCursor" "off"
EndSection

Section "Screen"
    Identifier     "LCD[1]"
    Device         "ION-GPU[0]"
    Monitor        "AnyMonitor"
    DefaultDepth    24
    Option         "UseDisplayDevice" "DFP-1" # HDMI
    Option         "ConnectedMonitor" "DFP-1"
EndSection

Section "Screen"
    Identifier     "LCD[0]"
    Device         "ION-GPU[0]"
    Monitor        "AnyMonitor"
    DefaultDepth    24
    Option         "ConnectedMonitor" "CRT-1"
    Option         "UseEDIDDpi" "FALSE" #Computed DPI values not so good for TV display
    Option         "UseDisplayDevice" "CRT-1" # VGA out
    SubSection     "Display"
        Depth       24
        Modes       "1360x768" "800x600"
    EndSubSection
EndSection

Section "Screen"
    Identifier     "Projector[0]"
    Device         "ION-GPU[0]"
    Monitor        "AnyMonitor"
    Option         "ConnectedMonitor" "DFP"
    Option         "UseDisplayDevice" "DFP" # DVI out
    Option         "CustomEDID" "DFP-0:/etc/X11/benq-c.bin"

    DefaultDepth    24
    SubSection     "Display"
        Depth       24
        Modes       "1280x720" "800x600"
    EndSubSection
EndSection

Section "Monitor"
    Identifier   "AnyMonitor"
    Option       "DPMS"
    Option       "ExactModeTimingsDVI" "true"
    Option       "RenderAccel" "true"
EndSection

~mythtv/.mythtv/session

Start a ruby program that listens to /dev/lircd and manages -

  • mythtv via updating the database + network control port
  • the AV receiver via RS232 - volume/mute, power on/off, input type
  • alsa via calls to amixer - volume/mute, digital/analog outputs
  • suspend on lirc idle or power button
  • restart specifying TV or Projector layout
#!/bin/sh

#store our dbus session and display where our kill script can pick it up
export | egrep "DBUS_SESSION_BUS_ADDRESS|DISPLAY" > ~/.xsession-export

#Run unclutter to hide the cursor after resume - not required - see HWCursor in xorg.conf
#unclutter -display $DISPLAY &

#run our main lirc control program
/home/mythtv/bin/audiomodeswitch/main.rb &
~mythtv/bin/suspend_mythtv.sh
#!/bin/sh

# We use dbus-send because it seems to block until resume which is what we want
echo "Suspending"

dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer \
        org.freedesktop.Hal.Device.SystemPowerManagement.Suspend int32:2

echo "Resumed"
~mythtv/bin/kill_mythtv.sh

Script is called by the ruby program, but also useful to restart from ssh

#!/bin/sh

[ -f $HOME/.xsession-export ] && . $HOME/.xsession-export
echo "killing mythfrontend"
pkill mythfrontend
#pkill unclutter
echo "xfce logout $DISPLAY"
xfce4-session-logout --logout --fast

LIRC Remote Control

Standard mythbuntu setup for MCE remote.

Sound

Onboard sound

~/.asoundrc

Could probably do better 48/44kHz switching on the analog output between music and video but if that is important we just go digital passthrough and let the receiver do the work.

In myth config, you can see that default sound device is ALSA:myth-video, the passthrough device is ALSA:myth-passthru, and mythmusic uses ALSA:myth-music. the AC3PassThru and DTSPassThru settings are managed by the ruby program

#First line comment

pcm.myth-music {
  type copy
  slave.pcm "default"
}

ctl.myth-music {
  type hw
  card 0
}

pcm.myth-video {
  type copy 
  slave.pcm "default"
}

ctl.myth-video {
  type hw
  card 0
}

pcm.myth-passthru {
  type copy
  slave.pcm = "spdif"
}

ctl.myth-passthru {
  type hw
  card 0
}

minimyth.conf

TODO - Works nicely through the WRT310N router etc, but we have a hard drive have decided to stick with Mythbuntu for now.

Upgrades

Mythbuntu 12.04

Reconfigured from scratch for no particular reason

Mythbuntu 10.10

100% clean on server

front end was missing non-versioned symlink for vdpau nvidia library

ln -s /etc/alternatives/libvdpau_nvidia.so /usr/lib/libvdpau_nvidia.so

Mythbuntu 9.10

100% clean on server

front end needed /etc/events.d/tty7 moved to /etc/init/tty7.conf

Mythbuntu 8.10

0.21-fixes

upgrade smooth