Important: You are required to change your passwords used for Gentoo services and set an email address for your Wiki account if you haven't done so. See the full announcement and Wiki email policy change for more information.

XBMC

From Gentoo Wiki
Jump to: navigation, search

XBMC Autostart

Standard method, via init script

First create the xbmc user

root # useradd -m -G audio,cdrom,video,cdrw,usb,users xbmc

Then define the xbmc init.d file with the following contents

File/etc/init.d/xbmc

#!/sbin/runscript
# Released under the 2-clause BSD license.

description="Start and stop XBMC"

depend()
{
	need net
}

start()
{
        ebegin "Starting XBMC"
        start-stop-daemon --start -u ${XBMC_USER:-xbmc} --background --pidfile /var/run/xbmc.pid --make-pidfile --exec /usr/bin/xinit -- /usr/bin/xbmc-standalone ${XMBC_OPTS} -- :0
        eend $?
}

stop()
{
        ebegin "Stopping XBMC"
        start-stop-daemon --stop --pidfile /var/run/xbmc.pid
        eend $?
}

Set the appropriate permissions

root # chmod +x /etc/init.d/xbmc

And tell openrc to start it on boot

root # rc-update add xbmc default


Alternative method, via inittab

This is based on the way the mythtv ebuilds enable the autostart of the mythtv frontend.

First create the xbmc user

root # useradd -m -G audio,cdrom,video,cdrw,usb,users xbmc

Define an xinitrc file in xbmc's home

File/home/xbmc/.xinitrc

# .xinitrc
[ -x /usr/bin/nvidia-settings ] && /usr/bin/nvidia-settings -l
/usr/bin/xset s noblank
/usr/bin/xset s off
/usr/bin/xset -dpms
/usr/bin/evilwm &
exec /usr/bin/xbmc

Then create the login scripts

File/home/xbmc/.bash_profile

/home/xbmc/.bash_profile
# .bash_profile
case "`tty`" in
        *tty9) startx; logout ;;
esac

Finally add an inittab entry which does the autologin

File/etc/inittab

...
c9:2345:respawn:/sbin/mingetty --autologin xbmc tty9
...

Shutdown

Allow the xbmc user to issue an shutdown via polkit, resulting in a shutdown option in the XBMC menu:

File/etc/polkit-1/rules.d/60-xbmc.rules

polkit.addRule(function(action, subject) {
        if (( (action.id.indexOf("org.freedesktop.udisks.") == 0) || (action.id.indexOf("org.freedesktop.upower.")== 0) || (action.id.indexOf("org.freedesktop.consolekit.")== 0) ) &&
        subject.user=="xbmc") {
        return polkit.Result.YES;
        }
});

Note: ensure you have the udev USE flag set for shutdown to work

Hardened profile notes

XBMC runs in hardened profiles. One caveat is that to get networking fully working, CONFIG_GRKERNSEC_PROC_USER kernel option has to be unset. If you want to restrict /proc access, set CONFIG_GRKERNSEC_PROC_USERGROUP and GRKERNSEC_PROC_GID to a special group that will have access to /proc filesystem. You can then add add xbmc user to this group.

External resources