Aim : Use 1 computer for two tasks :
a) Desktop for GF to use as a regular linux machine (web browsing, photos, etc)
b) Completely independent MythTV set-up, with the output going to the TV.

Also, the set-up has to be turn-key, with both sessions logging in automatically (goodbye gdm).

There’s a lot going on for this one. Fortunately, Fedora 9 (FC9) doesn’t require recompilation of any raw code (phew).

However, the major twist is that xorg now (by default) defers input device detection to HAL, which doesn’t appear to have any relevant documentation about how to allocate the discovered devices to the different screens/users.

The X11 setup

First, the setup in /etc/X11/xorg.conf :

# Xorg configuration created by mdda  
Section "ServerFlags"
Option "blank time" "0"
Option "standby time" "0"
Option "suspend time" "0"
Option "off time" "0"
Option "Xinerama" "0"
Option "AutoAddDevices" "false"
EndSection

Section "Module"
Load "dbe"
Load "evdev"
Load "extmod"
Load "freetype"
Load "glx"
Load "fbdevhw"

# New :
SubSection "extmod"
Option "omit xfree86-dga" # don't initialise the DGA extension
EndSubSection
EndSection

Section "ServerLayout"
Identifier "Default"
Option "DefaultServerLayout"
Screen "Screen0" 0 0
InputDevice "Mouse0" "SendCoreEvents"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection

Section "ServerLayout"
Identifier "MythTV"
Screen "Television" 0 0
InputDevice "MouseWireless" "CorePointer"
InputDevice "KeyboardWireless" "CoreKeyboard"
EndSection

Section "InputDevice"
Identifier "Keyboard0"
Driver "evdev"
Option "Name" "AT Translated Set 2 keyboard"
Option "Device" "/dev/input/event1"
Option "XkbModel" "evdev"
Option "XkbLayout" "us"
EndSection

Section "InputDevice"
Identifier "Mouse0"
Driver "evdev"
Option "Device" "/dev/input/event2"
Option "ZAxisMapping" "4 5"
Option "Protocol" "IMPS/2"
Option "Emulate3Buttons" "false"
Option "CorePointer"
Option "SendCoreEvents" "true"
EndSection

Section "InputDevice"
Identifier "KeyboardWireless"
Driver "evdev"
Option "Device" "/dev/input/event3"
Option "XkbModel" "evdev"
Option "XkbLayout" "us"
Option "evBits" "+1"
Option "keyBits" "~1-511"
EndSection

Section "InputDevice"
Identifier "MouseWireless"
Driver "evdev"
Option "Device" "/dev/input/event4"
Option "Emulate3Buttons" "false"
Option "Protocol" "IMPS/2"
Option "ZAxisMapping" "4 5"
Option "CorePointer"
Option "SendCoreEvents" "true"
EndSection

Section "Monitor"
Identifier "Monitor0"
ModelName "LCD Panel 1280x1024"
HorizSync 31.5 - 67.0
VertRefresh 59.0 - 69.0
EndSection

Section "Monitor"
Identifier "NTSC Monitor"
DisplaySize 182 122
HorizSync 30.0 - 68.0
VertRefresh 50.0 - 120.0
Option "DPMS" "off"

Mode "720x480"
DotClock 23.832
HTimings 720 775 799 800
VTimings 480 494 496 497
Flags "-HSync" "-VSync"
EndMode
EndSection

Section "Device"
Identifier "Videocard0"
Driver "intel"
# Option "NoAccel" "true"

Option "FramebufferCompression" "true"
Option "Tiling" "true"
Option "DRI" "true"

Option "Legacy3D" "true"
Option "XVideo" "false"
Option "AperTexSize" "8"

Option "AccelMethod" "XAA"
#Option "AccelMethod" "EXA"

Option "ModeDebug" "true"

BusID "PCI:0:2:0"
EndSection

Section "Device"
Identifier "Hauppauge PVR 350 iTVC15 Framebuffer"
Driver "ivtv"
Option "fbdev" "/dev/fb0" # <-- modify if using another device
BusID "PCI:1:5:0"
# Option "VideoOverlay" "on"
# Option "XVideo" "1"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Videocard0"
Monitor "Monitor0"
DefaultDepth 16
SubSection "Display"
Viewport 0 0
Modes "1280x1024"
EndSubSection
EndSection

Section "Screen"
Identifier "Television"
Device "Hauppauge PVR 350 iTVC15 Framebuffer"
Monitor "NTSC Monitor"
DefaultDepth 24
DefaultFbBPP 32
SubSection "Display"
Depth 24
FbBPP 32
Modes "720x480"
EndSubSection
EndSection

Section "DRI"
Mode 0666
EndSection

The myth user

Append to ~/.bash_profile :

#...  
if [ -z "$DISPLAY" ]; then
if
[ `tty` == "/dev/tty6" ];then
setterm -blank 0 -powersave off -powerdown 0 -cursor off

export DISPLAY=:1.0
# The following starts :
# Xmyth according to the settings in .xserverrc
# mythfrontend according to the settings in .xinitrc
xinit -- :1 &
#xmodmap /home/myth/.Xmodmap
else
echo "Remote Terminal"

fi
else
echo "X is running"
fi

Into ~/.xinitrc :

xsetroot -solid \#400040 -cursor_name top_left_arrow  
xmodmap /home/myth/.Xmodmap
mythfrontend &> /home/myth/myth.frontend.log
setterm -reset
echo;echo;echo

Into ~/.xserverrc :

#! /bin/bash  
killall Xmyth > /dev/null
exec Xmyth -novtswitch -sharevts -isolateDevice PCI:1:5:0 -nolisten tcp tty6 -layout MythTV :1 &> /home/myth/myth.x.log

The desktop user

Append to ~/.bash_profile :

#...  
if [ -z "$DISPLAY" ]; then
if
[ `tty` == "/dev/tty7" ]; then
setterm -blank 0 -powersave off -powerdown 0 -cursor off

export DISPLAY=:0.0
# The following starts :
# X0 according to the settings in .xserverrc
xinit -- :0 &
else
echo "Remote Terminal"

fi
else
echo "X is running"
fi

Into ~/.xinitrc :

exec /usr/bin/startxfce4  

Into ~/.xserverrc :

#! /bin/bash  
killall X0 > /dev/null
exec X0 -isolateDevice PCI:0:2:0 -novtswitch -sharevts -nolisten tcp tty7 -layout Default :0

The auto-login

This is all handled by upstart now, which uses /etc/initab only for the id:5:initdefault: line. Make sure it contains :

id:5:initdefault:  

Add the following two files to /etc/event.d :

# In /etc/event.d/login-mythuser   
#
# Autologin myth on tty6 - starts X
#
# This service maintains a getty on tty6 from the point the system is
# started until it is shut down again.

start on stopped rc5
stop on runlevel [!5]

respawn
exec /sbin/mingetty --autologin=myth tty6

and

# In /etc/event.d/login-desktopuser   
#
# Autologin yoshika on tty7 - starts X
#
# This service maintains a getty on tty1 from the point the system is
# started until it is shut down again.

start on stopped rc5
stop on runlevel [!5]

#respawn
exec /sbin/mingetty --autologin=yoshika tty7

Also, comment out every line in /etc/event.d/prefdm (this file is the one that creates the gdm login manager, which is not required if the users are auto-logged in as above).

MythTV in general

The permissions for the video devices are not set up correctly for access by both the desktop and the mythtv user. So put the following in /etc/udev/rules.d/50-udev-extra.rules :

# Let everyone get at the video devices  
KERNEL=="video*", MODE="0666"
KERNEL=="fb0", MODE="0666"

# Create links ready for xine (eg : /dev/dvd1)
SUBSYSTEM=="block", KERNEL=="sr[0-9]*", SYMLINK+="dvd%n"

See other posts for lircd, alsa, etc…



Martin Andrews

{Finance, Software, AI} entrepreneur, living in Singapore with my family.