After spending w-a-y more time working on it than I'd like to admit, I
finally have my Apple TV working flawlessly (so far) as a mythTV
frontend, serving up 1080i and 720p MPEG2 from my HDHomeRun equipped
backend. I'm now ready to retire the big and clunky PC that formally
had this duty. But the road was not an easy one. I started out using
Ubuntu Desktop 9.04 and had several problems that left me pulling my
hair out:

- Unacceptable shuttering in both video and audio during playback. I
tried removing this package and that in an attempt to improve this
problem. The results were still disappointing. I heard several people
in this forum discussing their bare bones installations of linux, but
could very find few details on how exactly they accomplished this.
Which packages are needed and which ones are not?
- I was able to get HDMI output to work fairly easily. But sound via
HDMI doesn't appear to be supported by atv-bootloader/linux. There
aren't many HDTV's out there that will accept video via HDMI and audio
via analog or optical. I didn't want to add an external receiver to
the mix either.  This rendered HDMI useless to me.
- I became incredibly frustrated trying to get NVIDIA's driver to
output component video that my TV would accept. I kept getting "no
valid modes for 1920x1080 found", etc. I  chased many dead ends, like
turning off various types of ModeValidation, etc. Nothing seemed to
work.
- I initially had problems even getting analog sound to work. I
followed others instructions, but it still didn't work (I later
discovered that you have to increase the volume of both aumix AND
Mixer/alsamixer in my Ubuntu desktop install).

But now, I'm happy to report that I have overcome ALL of these
issues.

Very little of this was pioneered by me. I've simply cobbled together
information from other people that are far smarter than me and who
deserve the credit for making this awesome solution work! I don't want
to take any credit for the hard work of others. I simply compiled this
information in this guide for prosperity and with the hope that it
might make it easier for another noob like me :)

Minimum ubuntu install

My first mistake originally starting out was using Ubuntu Desktop.
Ultimately, all I wanted is a mythvfrontend and nothing else. There's
way too much fat in the Desktop install. Instead, use the minimal CD
version of ubuntu 9.04 here:

        
http://archive.ubuntu.com/ubuntu/dists/jaunty/main/installer-i386/current/images/netboot/mini.iso

This installer will only install the bare minimum software needed by
Ubuntu and lets you add packages after as needed. Create a bootable CD
from the ISO image (alternatively, you could probably just copy the
files to your USB thumb drive - but I didn't do it that way, so do so
at your own risk of frustration)

I followed the instructions here to create a bootable USB thumb drive:

        http://code.google.com/p/atv-bootloader/wiki/LinuxUSBPenBoot

Using a USB hub, connect your USB thumb drive, CDROM with your Ubuntu
mini CD and keyboard to your Apple TV. Reboot and telnet into your
Apple TV.

Resize the Media partition and create new partitions for Ubuntu on
your Apple TV's internal disk using these instructions:

        http://code.google.com/p/atv-bootloader/wiki/AlternatePartitioning2

Start the install from the Ubuntu CD:

        mkdir /cdrom
        mount -o loop /dev/sr0 /cdrom
        kexec --load /cdrom/linux --initrd=/cdrom/initrd.gz
        kexec -e

Hopefully, at this point, the Ubuntu install will start up. Remove
your USB thumb drive. When you get to the partitioning step, select
Manual. Select the 5th partition from your Apple TV internal drive.
For "use as", select "Ext3 journaling file system". Select "yes" for
Format and "/" as the mount point. Select the 6th partition and set
the "use as" to swap. Towards the end of the install, you'll be given
the option to install additional features. Select openssh server.

When the install finishes, disconnect your CDROM and reboot. During
reboot it may seem to hang (it stops writing output to the screen).
Don't worry. This is because it needs some additional tweaks to get
the video working properly. SSH into your Apple TV from another
machine.

        ssh <ip of your atv>

Edit "/etc/modprobe.d/blacklist-framebuffer" and comment out
"blacklist vesafb"

        #blacklist vesafb

Edit "/etc/initramfs-tools/modules" and add:

        fbcon
        vesafb
        8139too

Run "update-initramfs" to commit your changes:

        sudo update-initramfs -u

Install some additional needed packages.

        sudo apt-get install xorg mythtv-frontend alsa-utils nvidia-glx-180
nvidia-common --no-install-recommends

Install the lirc package and select the Apple Mac Mini IR Reciever
from the first prompt (none from the second)

        sudo apt-get install lirc

Get the mythtv theme package for the theme that you plan to use (and
its associated OSD package):

        sudo apt-get install mythtv-theme-mythcenter-wide mythtv-theme-
blootube-osd

Set a password for the user "mythtv". You'll need this password when
you "su" to the mythtv user.

        sudo passwd mythtv

We're going to use the mythtv user to run the frontend, since it will
already be set up with the right groups, etc. Configure Ubuntu to
automatically start up X and the frontend on boot using the mythtv
user:

        su mythtv

        cd ~
        vi .xinitrc

Add the following command to the .xinitrc script:

        mythfrontend > mythfrontend.log

This will cause mythfrontend to launch as soon as X windows starts.

Un-mute your sound devices and boost the volume using
"alsamixer" (make sure your still running as the mythtv user - if you
get a "snd_ctl_open failed" error then you are not running the
alsamixer under the mythtv user).

        alsamixer

Use your arrow keys to move between the sound controls. Use the up
arrow to increase volume on each control and use the "m" key to un-
mute a control (it will have a "00" under it if its not muted). Make
sure you increase the volume of the Master and PCM controls to 100%
and you un-mute the IEC958 IEC958-D, and IEC958 1 controls. Hit the
escape key when done.

Exit from mythtv user:

        exit

Add the following to "/etc/rc.local":

        su - mythtv -c xinit

This will cause X windows to be started when the system finishes
booting and run X under the mythtv user.

Fixing the video

Create and add the following to "/etc/modprobe.d/options.conf"

        options nvidia NVreg_RegistryDwords="PerfLevelSrc=0x2222"
        options nvidia NVreg_Mobile=0

This makes the graphics card to appear to not have a mobile chipset,
allowing it to be over(under)clocked.

Next, create "/home/mythtv/.mythtv" directory:

        su mythtv
        cd ~
        mkdir .mythtv

Create a "~/.mythtv/session" file and add the following:

        #!/bin/sh
        xset -dpms
        xset s off
        nvidia-settings -a GPUOverclockingState=1
        nvidia-settings -a GPU2DClockFreqs=200,760

This script underclocks the GPU clock speed to 200 MHz (from 360 MHz)
and sets the memory clock to around 760 MHz.

Exit from "su mythtv".

        exit

Next, run the following:

        sudo sed -i -e 's/^libXvMC.so.1$/libXvMCNVIDIA_dynamic.so.1/' /etc/
X11/XvMCConfig

Edit "/etc/X11/xorg.conf". The following works with my Panasonic HDTV
using the component inputs. It may need some tweaks for your HDTV. The
key things that I discovered were necessary included setting my set
horizontal and vertical frequency ranges and telling X that I'm using
component inputs. I generated a first cut of this config by booting up
with my Apple TV connected to my set via HDMI, launching nvidia-
settings and then selecting the option for it to generate an xorg.conf
file. However, I did this in a prior attempt from Ubuntu Desktop (not
this bare bones install), so I can't guarantee it will work for you at
this point, but thought it was worth mentioning. The frequencies below
did NOT match the frequencies in the manual for my set. If you're
trying to output standard 1080i to your set, I'd guess the frequency
values below will work.

# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings:  version 1.0  (bui...@palmer)  Sun Feb  1 20:21:04
UTC 2009

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0" 0 0
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
EndSection

Section "Files"
EndSection

Section "Module"
    Load           "glx"
EndSection

Section "ServerFlags"
    Option         "Xinerama" "0"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "PANASONIC-TV"
    HorizSync       15.0 - 45.0
    VertRefresh     59.0 - 61.0
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce Go 7300"
    Option         "RegistryDwords" "RMDisableRenderToSysmem=1"
    Option         "UseDisplayDevice" "TV"
    Option         "TVOutFormat" "COMPONENT"
    Option         "TVStandard" "HD1080i"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "NoLogo" "True"
    Option         "Coolbits" "1"
    Option         "TwinView" "0"
    SubSection     "Display"
        Depth       24
        Modes      "1920x1080" "1280x720" "720x480"
    EndSubSection
EndSection

#Section "Extensions"
#    Option         "Composite" "Disable"
#EndSection

Getting the sound to work

Edit "/etc/modprobe.d/options.conf" and add:

        options snd-hda-intel model=imac24

Then run:

        sudo update-initramfs -u

IR Controller

Edit "/etc/modprobe.d/options.conf" and add:

        options usbhid quirks=0x05ac:0x8241:0x10

Then run:

        sudo update-initramfs -u

Edit "/etc/lirc/hardware.conf" and change the top part to look like
this:

# /etc/lirc/hardware.conf
#
#Chosen Remote Control
REMOTE="Apple Mac mini USB IR Receiver"
REMOTE_MODULES=""
REMOTE_DRIVER="macmini"
REMOTE_DEVICE="/dev/usb/hiddev0"
REMOTE_LIRCD_CONF=""
REMOTE_LIRCD_ARGS=""

Also make sure START_LIRCD is set to "true"

Use "irrecord" to generate a /etc/lirc/lircd.conf file. Use PLUS,
MINUS, PREV, NEXT, MENU and PLAY for the button names for the Apple
remote. Simply follow the instructions from irrecord:

        sudo irrecord -H macmini -d /dev/usb/hiddev0 /etc/lirc/lircd.conf

Actually, I think the command above created a file called
lircd.conf.conf and I had to delete the original lircd.conf and rename
the newly created one.

My lircd.conf ended up like this:

# Please make this file available to others
# by sending it to <[email protected]>
#
# this config file was automatically generated
# using lirc-0.8.4a(macmini) on Tue Aug 24 20:41:11 2010
#
# contributed by
#
# brand:                       /etc/lirc/lircd.conf.conf
# model no. of remote control:
# devices being controlled by this remote:
#

begin remote

  name  Apple_IR
  bits            8
  eps            30
  aeps          100

  one             0     0
  zero            0     0
  pre_data_bits   24
  pre_data       0x87EEAF
  gap          207973
  toggle_bit_mask 0x0
  ignore_mask 0xFF01

      begin codes
          PLUS                     0x0B
          MINUS                    0x0D
          PREV                     0x08
          NEXT                     0x07
          MENU                     0x02
          PLAY                     0x04
      end codes

end remote

Superuser to mythtv and create the file "~/.mythtv/lircrc" (I doubt
the Apple_A1156 sections are really needed, but I didn't test it w/o
them):

# LIRCRC Auto Generated by Mythbuntu Lirc Generator
# Author(s): Mario Limonciello, Nick Fox
# Created for use with Mythbuntu
begin
    remote = Apple_A1156
    prog = mythtv
    button = PLAY
    config = P
    repeat = 0
    delay = 0
end

begin
    remote = Apple_A1156
    prog = mythtv
    button = VOLDOWN
    config = [
    repeat = 0
    delay = 0
end

begin
    remote = Apple_A1156
    prog = mythtv
    button = BACKWARD
    config = <
    repeat = 0
    delay = 0
end

begin
    remote = Apple_A1156
    prog = mythtv
    button = VOLUP
    config = ]
    repeat = 0
    delay = 0
end

begin
    remote = Apple_A1156
    prog = mythtv
    button = MENU
    config = M
    repeat = 0
    delay = 0
end

begin
    remote = Apple_A1156
    prog = mythtv
    button = FORWARD
    config = >
    repeat = 0
    delay = 0
end
begin
    remote = Apple_IR
    prog = mythtv
    button = PLUS
    config = Up
    repeat = 2
    delay = 0
end

begin
    remote = Apple_IR
    prog = mythtv
    button = MINUS
    config = Down
    repeat = 2
    delay = 0
end

begin
    remote = Apple_IR
    prog = mythtv
    button = MENU
    config = Escape
    repeat = 2
    delay = 0
end

begin
    remote = Apple_IR
    prog = mythtv
    button = PLAY
    config = Space
    repeat = 2
    delay = 0
end

begin
    remote = Apple_IR
    prog = mythtv
    button = NEXT
    config = Right
    repeat = 2
    delay = 0
end

begin
    remote = Apple_IR
    prog = mythtv
    button = PREV
    config = Left
    repeat = 2
    delay = 0
end

If you want to test out your remote, restart lirc:

        sudo /etc/init.d/lirc restart

and test your configuration by running the following app and pressing
the IR buttons

        rw /dev/lircd

Reboot. The mythtv frontend should launch. Setup your mythtv frontend,
if the backend is not automatically detected. Enter the IP Address or
name of your mythtv backend and enter in the password for that
backend. Hopefully, you can watch TV at this point (including hearing
sound)! If not, make sure your backend is working properly. I had
problems with this initially and later realized that running a
frontend directly on my backend server wasn't working either.
Restarting the backend by going into its setup on the backend server
seemed to fix the issue.

Make sure to set your mythtv theme to the theme that you installed
(Settings -> Appearance).  If you can't change channels and don't see
the OSD, this is likely your problem. Check the mythtvfrontend.log
file in ~mythtv. It will likely have an error like this:

        2010-08-27 19:41:50.532 Couldn't find OSD theme: blootube-osd

indicating that you have not installed a needed package for your
selected theme or its associated OSD

Good luck! And thanks to everyone for their contributions for
providing a great way to re purpose my Apple TV as a mythTV frontend!

-- 
To post to this group, send email to [email protected]
For more options, visit this group at
http://groups.google.com/group/atv-bootloader?hl=en

Reply via email to