From 85b0201739fa56723e028b9893e4e900c19fb730 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Tue, 3 May 2016 14:50:25 +0100 Subject: [PATCH] addons: mpd - initial package --- packages/addons/service/mpd/changelog.txt | 2 + packages/addons/service/mpd/icon/icon.png | Bin 0 -> 24915 bytes packages/addons/service/mpd/package.mk | 103 ++++ .../addons/service/mpd/source/bin/mpd.start | 41 ++ .../addons/service/mpd/source/config/mpd.conf | 453 ++++++++++++++++++ packages/addons/service/mpd/source/default.py | 19 + .../resources/language/English/strings.xml | 5 + .../service/mpd/source/resources/settings.xml | 8 + .../service/mpd/source/settings-default.xml | 3 + .../service/mpd/source/sleep.d/mpd.power | 42 ++ .../system.d/service.multimedia.mpd.service | 13 + 11 files changed, 689 insertions(+) create mode 100644 packages/addons/service/mpd/changelog.txt create mode 100644 packages/addons/service/mpd/icon/icon.png create mode 100644 packages/addons/service/mpd/package.mk create mode 100755 packages/addons/service/mpd/source/bin/mpd.start create mode 100644 packages/addons/service/mpd/source/config/mpd.conf create mode 100644 packages/addons/service/mpd/source/default.py create mode 100644 packages/addons/service/mpd/source/resources/language/English/strings.xml create mode 100644 packages/addons/service/mpd/source/resources/settings.xml create mode 100644 packages/addons/service/mpd/source/settings-default.xml create mode 100644 packages/addons/service/mpd/source/sleep.d/mpd.power create mode 100644 packages/addons/service/mpd/source/system.d/service.multimedia.mpd.service diff --git a/packages/addons/service/mpd/changelog.txt b/packages/addons/service/mpd/changelog.txt new file mode 100644 index 0000000000..c03759c728 --- /dev/null +++ b/packages/addons/service/mpd/changelog.txt @@ -0,0 +1,2 @@ +8.0.100 +- update to mpd-0.19.15 diff --git a/packages/addons/service/mpd/icon/icon.png b/packages/addons/service/mpd/icon/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3927473b32c11156ee3877f7b6244b5f8ab3ada9 GIT binary patch literal 24915 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 literal 0 HcmV?d00001 diff --git a/packages/addons/service/mpd/package.mk b/packages/addons/service/mpd/package.mk new file mode 100644 index 0000000000..473ff2c361 --- /dev/null +++ b/packages/addons/service/mpd/package.mk @@ -0,0 +1,103 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) +# +# This Program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This Program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +PKG_NAME="mpd" +PKG_VERSION="0.19.15" +PKG_REV="100" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://mpd.wikia.com/wiki/Music_Player_Daemon_Wiki" +PKG_URL="http://www.musicpd.org/download/${PKG_NAME}/${PKG_VERSION%.*}/${PKG_NAME}-${PKG_VERSION}.tar.xz" +PKG_DEPENDS_TARGET="toolchain boost glib ffmpeg libmad libogg flac faad2 curl alsa-lib yajl libid3tag lame" +PKG_PRIORITY="optional" +PKG_SECTION="service.multimedia" +PKG_SHORTDESC="Flexible, powerful, server-side application for playing music" +PKG_LONGDESC="Flexible, powerful, server-side application for playing music" + +PKG_IS_ADDON="yes" +PKG_ADDON_TYPE="xbmc.service" +PKG_ADDON_PROVIDES="" +PKG_ADDON_REPOVERSION="8.0" + +PKG_AUTORECONF="yes" + +PKG_DISCLAIMER="This may block your xbmc audio. It might also play no audio at all, if streamsilence is enabled and you try to use the very same device" + +PKG_MAINTAINER="Lukas Sabota (LTsmooth42@gmail.com)" + +pre_configure_target() { + export LDFLAGS="$LDFLAGS -ldl -logg" +} + +PKG_CONFIGURE_OPTS_TARGET="--enable-alsa \ + --disable-roar \ + --disable-ao \ + --disable-audiofile \ + --disable-bzip2 \ + --disable-cdio-paranoia \ + --enable-curl \ + --disable-smbclient \ + --disable-soup \ + --disable-debug \ + --disable-documentation \ + --disable-ffado \ + --enable-ffmpeg \ + --disable-fluidsynth \ + --disable-gme \ + --enable-httpd-output \ + --enable-id3 \ + --disable-jack \ + --disable-lastfm \ + --disable-despotify \ + --disable-soundcloud \ + --enable-lame-encoder \ + --disable-libwrap \ + --disable-lsr \ + --enable-mad \ + --disable-mikmod\ + --disable-mms \ + --disable-modplug \ + --disable-mpg123 \ + --disable-mvp \ + --disable-openal \ + --disable-oss \ + --disable-pipe-output \ + --disable-pulse \ + --disable-recorder-output \ + --disable-sidplay \ + --disable-shout \ + --disable-sndfile \ + --disable-solaris-output \ + --disable-sqlite \ + --disable-systemd-daemon \ + --disable-test \ + --disable-twolame-encoder \ + --disable-zzip \ + --with-zeroconf=no \ + --disable-icu" + +makeinstall_target() { + : # nop +} + +addon() { + mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin + cp -P $PKG_BUILD/.$TARGET_NAME/src/mpd $ADDON_BUILD/$PKG_ADDON_ID/bin +} diff --git a/packages/addons/service/mpd/source/bin/mpd.start b/packages/addons/service/mpd/source/bin/mpd.start new file mode 100755 index 0000000000..d6a7bc36f1 --- /dev/null +++ b/packages/addons/service/mpd/source/bin/mpd.start @@ -0,0 +1,41 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) +# +# This Program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This Program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenELEC.tv; see the file COPYING. If not, write to the +# Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. /etc/profile + +oe_setup_addon service.multimedia.mpd + +mkdir -p $ADDON_HOME/config +mkdir -p $ADDON_HOME/log +mkdir -p $ADDON_HOME/playlists +mkdir -p $ADDON_HOME/music +touch $ADDON_HOME/log/mpd.log +touch $ADDON_HOME/mpd.db +touch $ADDON_HOME/state + +chmod a+x $ADDON_DIR/bin/* + +if [ ! -f "$ADDON_HOME/config/mpd.conf" ]; then + cp $ADDON_DIR/config/mpd.conf $ADDON_HOME/config/mpd.conf +fi + +exec mpd --no-daemon $ADDON_HOME/config/mpd.conf > /dev/null 2>&1 diff --git a/packages/addons/service/mpd/source/config/mpd.conf b/packages/addons/service/mpd/source/config/mpd.conf new file mode 100644 index 0000000000..195784d693 --- /dev/null +++ b/packages/addons/service/mpd/source/config/mpd.conf @@ -0,0 +1,453 @@ +# An example configuration file for MPD +# See the mpd.conf man page for a more detailed description of each parameter. + + +# Files and directories ####################################################### +# +# This setting controls the top directory which MPD will search to discover the +# available audio files and add them to the daemon's online database. This +# setting defaults to the XDG directory, otherwise the music directory will be +# be disabled and audio files will only be accepted over ipc socket (using +# file:// protocol) or streaming files over an accepted protocol. +# +music_directory "/storage/music" +# +# This setting sets the MPD internal playlist directory. The purpose of this +# directory is storage for playlists created by MPD. The server will use +# playlist files not created by the server but only if they are in the MPD +# format. This setting defaults to playlist saving being disabled. +# +playlist_directory "/storage/.kodi/userdata/addon_data/service.multimedia.mpd/playlists" +# +# This setting sets the location of the MPD database. This file is used to +# load the database at server start up and store the database while the +# server is not up. This setting defaults to disabled which will allow +# MPD to accept files over ipc socket (using file:// protocol) or streaming +# files over an accepted protocol. +# +db_file "/storage/.kodi/userdata/addon_data/service.multimedia.mpd/mpd.db" +# +# These settings are the locations for the daemon log files for the daemon. +# These logs are great for troubleshooting, depending on your log_level +# settings. +# +# The special value "syslog" makes MPD use the local syslog daemon. This +# setting defaults to logging to syslog, otherwise logging is disabled. +# +log_file "/storage/.kodi/userdata/addon_data/service.multimedia.mpd/log/mpd.log" +# +# This setting sets the location of the file which stores the process ID +# for use of mpd --kill and some init scripts. This setting is disabled by +# default and the pid file will not be stored. +# +pid_file "/var/run/mpd.pid" +# +# This setting sets the location of the file which contains information about +# most variables to get MPD back into the same general shape it was in before +# it was brought down. This setting is disabled by default and the server +# state will be reset on server start up. +# +state_file "/storage/.kodi/userdata/addon_data/service.multimedia.mpd/state" +# +# The location of the sticker database. This is a database which +# manages dynamic information attached to songs. +# +#sticker_file "/storage/.mpd/sticker.sql" +# +############################################################################### + + +# General music daemon options ################################################ +# +# This setting specifies the user that MPD will run as. MPD should never run as +# root and you may use this setting to make MPD change its user ID after +# initialization. This setting is disabled by default and MPD is run as the +# current user. +# +#user "mpd" +# +# This setting specifies the group that MPD will run as. If not specified +# primary group of user specified with "user" setting will be used (if set). +# This is useful if MPD needs to be a member of group such as "audio" to +# have permission to use sound card. +# +#group "nogroup" +# +# This setting sets the address for the daemon to listen on. Careful attention +# should be paid if this is assigned to anything other then the default, any. +# This setting can deny access to control of the daemon. +# +# For network +#bind_to_address "any" +# +# And for Unix Socket +#bind_to_address "/storage/.mpd/socket" +# +# This setting is the TCP port that is desired for the daemon to get assigned +# to. +# +#port "6600" +# +# This setting controls the type of information which is logged. Available +# setting arguments are "default", "secure" or "verbose". The "verbose" setting +# argument is recommended for troubleshooting, though can quickly stretch +# available resources on limited hardware storage. +# +#log_level "default" +# +# If you have a problem with your MP3s ending abruptly it is recommended that +# you set this argument to "no" to attempt to fix the problem. If this solves +# the problem, it is highly recommended to fix the MP3 files with vbrfix +# (available from ), at which +# point gapless MP3 playback can be enabled. +# +#gapless_mp3_playback "yes" +# +# Setting "restore_paused" to "yes" puts MPD into pause mode instead +# of starting playback after startup. +# +#restore_paused "no" +# +# This setting enables MPD to create playlists in a format usable by other +# music players. +# +#save_absolute_paths_in_playlists "no" +# +# This setting defines a list of tag types that will be extracted during the +# audio file discovery process. Optionally, 'comment' can be added to this +# list. +# +#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" +# +# This setting enables automatic update of MPD's database when files in +# music_directory are changed. +# +#auto_update "yes" +# +# Limit the depth of the directories being watched, 0 means only watch +# the music directory itself. There is no limit by default. +# +#auto_update_depth "3" +# +############################################################################### + + +# Symbolic link behavior ###################################################### +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links outside of the configured music_directory. +# +#follow_outside_symlinks "yes" +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links inside of the configured music_directory. +# +#follow_inside_symlinks "yes" +# +############################################################################### + + +# Zeroconf / Avahi Service Discovery ########################################## +# +# If this setting is set to "yes", service information will be published with +# Zeroconf / Avahi. +# +#zeroconf_enabled "yes" +# +# The argument to this setting will be the Zeroconf / Avahi unique name for +# this MPD server on the network. +# +#zeroconf_name "Music Player" +# +############################################################################### + + +# Permissions ################################################################# +# +# If this setting is set, MPD will require password authorization. The password +# can setting can be specified multiple times for different password profiles. +# +#password "password@read,add,control,admin" +# +# This setting specifies the permissions a user has who has not yet logged in. +# +#default_permissions "read,add,control,admin" +# +############################################################################### + + +# Input ####################################################################### +# + +#input { +# plugin "curl" +# proxy "proxy.isp.com:8080" +# proxy_user "user" +# proxy_password "password" +#} + +# +############################################################################### + +############################################################################### +############################################################################### +# +# A BIG FAT WARNING +# +# This may block your xbmc audio. It might also play no audio at all, +# if streamsilence is enabled and you try to use the very same device. +# +############################################################################### +############################################################################### + +# Audio Output ################################################################ +# +# MPD supports various audio output types, as well as playing through multiple +# audio outputs at the same time, through multiple audio_output settings +# blocks. Setting this block is optional, though the server will only attempt +# autodetection for one sound card. +# +# See for examples of +# other audio outputs. +# +# An example of an ALSA output: +# +##audio_output { +## type "alsa" +## name "ALSA Device" +### device "hw:0,0" # optional +#### format "44100:16:2" # optional +#### mixer_type "hardware" # optional +#### mixer_device "default" # optional +#### mixer_control "PCM" # optional +#### mixer_index "0" # optional +##} +# +# An example of an OSS output: +# +#audio_output { +# type "oss" +# name "My OSS Device" +## device "/dev/dsp" # optional +## format "44100:16:2" # optional +## mixer_type "hardware" # optional +## mixer_device "/dev/mixer" # optional +## mixer_control "PCM" # optional +#} +# +# An example of a shout output (for streaming to Icecast): +# +#audio_output { +# type "shout" +# encoding "ogg" # optional +# name "My Shout Stream" +# host "localhost" +# port "8000" +# mount "/mpd.ogg" +# password "hackme" +# quality "5.0" +# bitrate "128" +# format "44100:16:1" +## protocol "icecast2" # optional +## user "source" # optional +## description "My Stream Description" # optional +## url "http://example.com" # optional +## genre "jazz" # optional +## public "no" # optional +## timeout "2" # optional +## mixer_type "software" # optional +#} +# +# An example of a recorder output: +# +#audio_output { +# type "recorder" +# name "My recorder" +# encoder "vorbis" # optional, vorbis or lame +# path "/var/lib/mpd/recorder/mpd.ogg" +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +#} +# +# An example of a httpd output (built-in HTTP streaming server): +# +#audio_output { +## type "httpd" +# name "My HTTP Stream" +# encoder "vorbis" # optional, vorbis or lame +# port "8000" +# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 +# quality "5.0" # do not define if bitrate is defined +# bitrate "320" # do not define if quality is defined +# format "44100:16:1" +# max_clients "0" # optional 0=no limit +#} +# +# An example of a pulseaudio output (streaming to a remote pulseaudio server) +# +#audio_output { +# type "pulse" +# name "My Pulse Output" +## server "remote_server" # optional +## sink "remote_server_sink" # optional +#} +# +## Example "pipe" output: +# +#audio_output { +# type "pipe" +# name "my pipe" +# command "aplay -f cd 2>/dev/null" +## Or if you're want to use AudioCompress +# command "AudioCompress -m | aplay -f cd 2>/dev/null" +## Or to send raw PCM stream through PCM: +# command "nc example.org 8765" +# format "44100:16:2" +#} +# +## An example of a null output (for no audio output): +# +audio_output { + type "null" + name "My Null Output" + mixer_type "none" # optional +} +# +# This setting will change all decoded audio to be converted to the specified +# format before being passed to the audio outputs. By default, this setting is +# disabled. +# +#audio_output_format "44100:16:2" +# +# If MPD has been compiled with libsamplerate support, this setting specifies +# the sample rate converter to use. Possible values can be found in the +# mpd.conf man page or the libsamplerate documentation. By default, this is +# setting is disabled. +# +#samplerate_converter "Fastest Sinc Interpolator" +# +############################################################################### + + +# Normalization automatic volume adjustments ################################## +# +# This setting specifies the type of ReplayGain to use. This setting can have +# the argument "off", "album" or "track". See +# for more details. This setting is off by default. +# +#replaygain "album" +# +# This setting sets the pre-amp used for files that have ReplayGain tags. By +# default this setting is disabled. +# +#replaygain_preamp "0" +# +# This setting enables on-the-fly normalization volume adjustment. This will +# result in the volume of all playing audio to be adjusted so the output has +# equal "loudness". This setting is disabled by default. +# +#volume_normalization "no" +# +############################################################################### + + +# MPD Internal Buffering ###################################################### +# +# This setting adjusts the size of internal decoded audio buffering. Changing +# this may have undesired effects. Don't change this if you don't know what you +# are doing. +# +#audio_buffer_size "2048" +# +# This setting controls the percentage of the buffer which is filled before +# beginning to play. Increasing this reduces the chance of audio file skipping, +# at the cost of increased time prior to audio playback. +# +#buffer_before_play "10%" +# +############################################################################### + + +# Resource Limitations ######################################################## +# +# These settings are various limitations to prevent MPD from using too many +# resources. Generally, these settings should be minimized to prevent security +# risks, depending on the operating resources. +# +#connection_timeout "60" +#max_connections "10" +#max_playlist_length "16384" +#max_command_list_size "2048" +#max_output_buffer_size "8192" +# +############################################################################### + +# Client TCP keep alive ####################################################### +# +# For clients connected by TCP on supported platforms. +# Allows detection of dangling connections due to clients disappearing from +# the network without closing their connections. +# +# This is not usually necessary but can be useful in cases such as wifi connectected +# clients that go in and out of network range or turn off wifi without closing their +# connections. Combined with low max_connections this can soon cause clients to not +# be able to connect. +# +# +# Enable tcp keepalive on new client connections (default is "no") +# +#tcp_keep_alive "no" +# +# Time in seconds since the last communication on the connection and before +# the keepalive probing is started. (default is 7200 seconds) +#tcp_keep_alive_idle "7200" +# +# Interval in seconds between keepalive probes, once a probe started. +# (default is 75 seconds) +#tcp_keep_alive_interval "75" +# +# Number of failed probes before the connection is pronounced dead and +# the connection is closed. (default is 9 times) +#tcp_keep_alive_count "9" +# +############################################################################### + +# Character Encoding ########################################################## +# +# If file or directory names do not display correctly for your locale then you +# may need to modify this setting. +# +#filesystem_charset "UTF-8" +# +# This setting controls the encoding that ID3v1 tags should be converted from. +# +#id3v1_encoding "ISO-8859-1" +# +############################################################################### + + +# SIDPlay decoder ############################################################# +# +# songlength_database: +# Location of your songlengths file, as distributed with the HVSC. +# The sidplay plugin checks this for matching MD5 fingerprints. +# See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq +# +# default_songlength: +# This is the default playing time in seconds for songs not in the +# songlength database, or in case you're not using a database. +# A value of 0 means play indefinitely. +# +# filter: +# Turns the SID filter emulation on or off. +# +#decoder { +# plugin "sidplay" +# songlength_database "/media/C64Music/DOCUMENTS/Songlengths.txt" +# default_songlength "120" +# filter "true" +#} +# +############################################################################### + diff --git a/packages/addons/service/mpd/source/default.py b/packages/addons/service/mpd/source/default.py new file mode 100644 index 0000000000..6f814651a2 --- /dev/null +++ b/packages/addons/service/mpd/source/default.py @@ -0,0 +1,19 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) +# +# This Program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This Program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ diff --git a/packages/addons/service/mpd/source/resources/language/English/strings.xml b/packages/addons/service/mpd/source/resources/language/English/strings.xml new file mode 100644 index 0000000000..d388c262c1 --- /dev/null +++ b/packages/addons/service/mpd/source/resources/language/English/strings.xml @@ -0,0 +1,5 @@ + + + General + Restart on suspend / resume + diff --git a/packages/addons/service/mpd/source/resources/settings.xml b/packages/addons/service/mpd/source/resources/settings.xml new file mode 100644 index 0000000000..ae2693c874 --- /dev/null +++ b/packages/addons/service/mpd/source/resources/settings.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/packages/addons/service/mpd/source/settings-default.xml b/packages/addons/service/mpd/source/settings-default.xml new file mode 100644 index 0000000000..f5afe2c799 --- /dev/null +++ b/packages/addons/service/mpd/source/settings-default.xml @@ -0,0 +1,3 @@ + + + diff --git a/packages/addons/service/mpd/source/sleep.d/mpd.power b/packages/addons/service/mpd/source/sleep.d/mpd.power new file mode 100644 index 0000000000..1ba5ab37c6 --- /dev/null +++ b/packages/addons/service/mpd/source/sleep.d/mpd.power @@ -0,0 +1,42 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) +# +# This Program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This Program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. /etc/profile + +oe_setup_addon service.multimedia.mpd + +SERVICE="service.multimedia.mpd" + +if [ "$RESTART_ON_RESUME" == "true" ] ; then + case "$1" in + pre) + if systemctl is-active "$SERVICE" &>/dev/null ; then + systemctl stop "$SERVICE" + fi + ;; + post) + if systemctl is-enabled "$SERVICE" &>/dev/null ; then + systemctl start "$SERVICE" + fi + ;; + esac +fi diff --git a/packages/addons/service/mpd/source/system.d/service.multimedia.mpd.service b/packages/addons/service/mpd/source/system.d/service.multimedia.mpd.service new file mode 100644 index 0000000000..147cd72129 --- /dev/null +++ b/packages/addons/service/mpd/source/system.d/service.multimedia.mpd.service @@ -0,0 +1,13 @@ +[Unit] +Description=mpd +After=graphical.target + +[Service] +ExecStart=/bin/sh -c "exec sh /storage/.kodi/addons/service.multimedia.mpd/bin/mpd.start" +TimeoutStopSec=1 +Restart=always +RestartSec=2 +StartLimitInterval=0 + +[Install] +WantedBy=kodi.target