Systemd is a system and service manager which provides a neat and easy way to organize and start your services on Linux. Only recently I found out you can use .socket files to start services on incoming network traffic.
Usage with XBMC and XBMC Remote
For example you can use a .socket file to conveniently start xbmc when you connect via the XBMC Remote App. See the following .socket file:
#/etc/systemd/system/xbmcnet.socket #You might have to use the Service= and Accept=no options if the service name differs from the socket name [Unit] Conflicts=xbmcnet.service [Socket] ListenStream=8080 #This is the tcp port we listen to traffic to, set to the port you have set in xbmc->settings->network http control port [Install] WantedBy=sockets.target
And the matching .service file:
#/etc/systemd/system/xbmcnet.service #See comments for the xbmcnet.socket file above! [Unit] Description=Launch XBMC on main display - oneshot [Service] PermissionsStartOnly=true User = xbmc Group = xbmc Type=oneshot Nice=-1 ExecStart = /usr/bin/xbmc-standalone -l /run/lirc/lircd ExecStartPost = /usr/bin/bash -c "sleep 10 && systemctl start xbmcnet.socket" #The sleep is needed because sometimes you are too slow with exiting the xbmc remote app and the traffic might start the service again immediately [Install] WantedBy=multi-user.target
Now you only need to start/enable the socket file and everything should be good to go!
systemctl enable xbmcnet.socket systemctl start xbmcnet.socket