Squeezeslave on the core
Squeezeslave Setup
Here's how to setup squeezeslave to run on the core. It's fairly straight forward. One small issue is that because squeezeslave uses the OSS interface, you will need a separate sound card for each instance of squeezeslave you want to run.
Download Source
First download a version of Squeezeslave. I'm running the latest version as it fixed some playback bugs I was having, but any version that works with you're setup should be fine.
Installing
- You'll want to put it somewhere in you're path.
- Example: /usr/local/bin
Modify /etc/rc.local
Next add the following to /etc/rc.local (this is my setup for two)
/usr/local/bin/squeezeslave -m 00:00:00:00:00:01 -o 0 -s -r & /usr/local/bin/squeezeslave -m 00:00:00:00:00:02 -o 1 -s -r &
- the MAC address can be whatever you want
- the -o option specifies which OSS output device ie /dev/dsp1
- the -s option tells squeezeslave to wait for a signal to quit rather than control-C
- the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.
Setting Up Alsamixer
Next make sure all the volume levels in the mixer (alsamixer) are set correctly
alsamixer
Make sure that the settings are as desired and save (Esc button)
Setting Up LinuxMCE
Next step, manually add the squeezeslave to linuxmce as a squeezebox using the mac address you gave it.
Select Device
- Select Device->A/V Equipment
- Select SqueezeBox Player from the dropdown options
- Assign it to a room and entertainment area.
- Regen your orbiters and reload the router.
LMCE init script
Copy attached script text into a file named /etc/init.d/squeezeslave
Startup Script
#! /bin/sh ### BEGIN INIT INFO # Provides: squeezeslave # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: S 0 1 6 # Short-Description: Initscript for squeezeslave # Description: This init script make it possible to start squeezeslave as a daemon # It is placed in /etc/init.d. ### END INIT INFO # Author: Magnus Nilsson <magnus@karabas.nu> # # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/usr/sbin:/usr/bin:/sbin:/bin DESC="Squeezeslave dameon" NAME=squeezeslave DAEMON=/root/squeezeslave-0.7.1/$NAME DAEMON_ARGS="-o 1 -m 00:04:20:00:00:01 -r -s 192.168.80.1" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables [ -f /etc/default/rcS ] && . /etc/default/rcS # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start -b --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start -b --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 # Add code here, if necessary, that waits for the process to be ready # to handle requests from services started subsequently which depend # on this one. As a last resort, sleep for some time. } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/3/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. start-stop-daemon --stop --quiet --oknodo --retry=0/3/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } # # Function that sends a SIGHUP to the daemon/service # do_reload() { # # If the daemon can reload its configuration without # restarting (for example, when it is sent a SIGHUP), # then implement that here. # start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; #reload|force-reload) # # If do_reload() is not implemented then leave this commented out # and leave 'force-reload' as an alias for 'restart'. # #log_daemon_msg "Reloading $DESC" "$NAME" #do_reload #log_end_msg $? #;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac :
Make script executable
sudo chmod +x /etc/init.d/squeezeslave
Modify Parameters
Modify parameters in the beginning of the file to suite your needs.
- MAC address
- slimserver host
- binary location
- soundcard device.
Below is the parameters you should change:
NAME=squeezeslave DAEMON=/root/squeezeslave-0.7.1/$NAME DAEMON_ARGS="-o 1 -m 00:04:20:00:00:01 -r -s 192.168.80.1"
Setup to Run at Start Up
- Run from shell:
sudo default-rd.d /etc/init.d/squeezeslave default 50
- You should now be able to start/stop squeezeslave from shell.
sudo /etc/init.d/squeezeslave start
- Check with ps if it is running:
ps aux | grep squeezeslave
- Example output:
root 9007 0.0 0.3 64116 5436 ? Sl Jun18 0:03 /root/squeezeslave-0.7.1/squeezeslave -o 1 -m 00:04:20:00:00:01 -r -s 192.168.80.1
- To stop:
sudo /etc/init.d/squeezeslave stop
- Restart your core and check if everything start as it should, including squeezeslave.
That should do it.