This is an old revision of the document!


Batocera Services

This feature was introduces in Batocera v38 Blue Moon and is a powerful replacement for the custom.sh. We can devide two setups. First the preinstalled services which should not be altered and in second instance the Userservices that are stored to directory: `/userdata/system/services`. In both cases the activation state can altered through EmulationStation Frontend: Main Menu –> System Settings –> Services

Even if custom.sh is still working (10/2024) it is recommended to use the service section for future proof setups.

Disabling services (with batocera-services disable or through the UI) doesn't stop them. That needs to be done manually with batocera-services stop. Disabling them only means that they wil not be automatically started after the next system startup.

Enabling them (with batocera-services enable or through the UI) works the same. To actually start a service, enable it first, then restart Batocera or use batocera-services start.

For filenames there are some rules! This is caused by the handling for this kind of usecase. Every file is exported as systemvariable so only charaters from A-Z and digits 0-9 (not as first letter!) are allowed. Spaces, dots, bracketes and regional chars like ß,œ or я are not allowed.

Some file examples:

  • Hello –> okay
  • Hello_5 –> okay
  • Hello.sh –> not allowed
  • 5_Hello –> not allowed
  • Hello-5 –> not allowed
  • Hallöle –> not allowed

You can test your script names by typing `batocera-services list user` you will receive a result-list of your services.

``` [root@BATOCERA /userdata/system/services]# batocera-services list user Hello - Hello_5 - WARNING: Invalid service script name: Hello.sh WARNING: Invalid service script name: 5_Hello WARNING: Invalid service script name: Hello-5 WARNING: Invalid service script name: Hallöle ```

All these scripts are initiated through `/etc/init.d/S99userservices` so there is a `start` and a `stop` condition that can be used inside the scripts. S99 will wait for all scripts to be finished, so be aware of your scripts using sleep timers and infinite do-while loops.

As a bonus: These scripts can also be used on FAT-file systems and are started through bash-interpreter, so you don't need them executable through `chmod +x your_service_file` command.

#!/bin/bash
# Sanatize Service by crcerror (second life)
# Selfrepair first
grep -rlq $'\r' "$0" && dos2unix -k -q "$0" && exit 0
 
#only on start condition
[[ $1 == stop ]] && exit 0
 
# Sanatize Windows-CRLF to unix-style
# Sanatize filenames: Use underscore for non allowed characters
 
pushd /userdata/system/services > /dev/null
 
find -type f -printf '%f\n' |
while read USER_SERVICE
do
        SANITIZE=${SERVICE//[^0-9A-Za-z_]/}
        SANITIZE=$(echo "$SANITIZE" | sed 's/^[[:digit:]]*//')
        if [[ "${USER_SERVICE}" =! "${SANITIZE}" ]]
        then
           mv -b --suffix=_backup "${USER_SERVICE}" "${SANITIZE}"
           grep -rlq $'\r' "${SANITIZE}" && dos2unix -kq "${SANITIZE}" 
        fi
 
        grep -rlq $'\r' "${USER_SERVICE}" && dos2unix -kq "${USER_SERVICE}"     
 
done
 
popd > /dev/null
  • scripting_services_rules_examples.1728165562.txt.gz
  • Last modified: 20 months ago
  • by crcerror