mirror of
				https://github.com/RetroDECK/RetroDECK.git
				synced 2025-04-10 19:15:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			374 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			374 lines
		
	
	
		
			9.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| if [ ! "$1" ];then
 | |
| 	echo -e "usage : batocera-config [command] [args]\nWith command in\n\toverscan [enable|disable]\n\tlsaudio\n\tgetaudio\n\taudio [hdmi|jack|auto|custom|x,y]\n\tcanupdate\n\tupdate\n\twifi [enable|disable] ssid key\n\tstorage [current|list|INTERNAL|ANYEXTERNAL|RAM|DEV UUID]\n\tsetRootPassword [password]\n\tgetRootPassword\n\ttz [|tz]"
 | |
| 	exit 1
 | |
| fi
 | |
| configFile="/storage/.config/distribution/configs/config.txt"
 | |
| storageFile="/storage/.config/distribution/configs/batocera-boot.conf"
 | |
| command="$1"
 | |
| mode="$2"
 | |
| extra1="$3"
 | |
| extra2="$4"
 | |
| extra3="$5"
 | |
| extra4="$6"
 | |
| arch=$(cat /storage/.config/.OS_ARCH)
 | |
| 
 | |
| updateurl="https://127.0.0.1"
 | |
| 
 | |
| preBootConfig() {
 | |
|     mount -o remount,rw /boot
 | |
| }
 | |
| 
 | |
| postBootConfig() {
 | |
|     mount -o remount,ro /boot
 | |
| }
 | |
| 
 | |
| bato_config_set_value () {
 | |
| 	key=$1
 | |
| 	value=$2
 | |
| 	[ -z "$value" ] && value=0
 | |
| 	cat "$configFile" | grep "$key"
 | |
|         valPresent=$?
 | |
| 	if [ "$valPresent" != "0" ];then
 | |
| 		echo "$key=$value" >> "$configFile"
 | |
| 	else
 | |
| 		sed -i "s/#\?$key=.*/$key=$value/g" "$configFile"
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| #log=/userdata/system/logs/batocera.log
 | |
| #systemsetting="python /usr/lib/python2.7/site-packages/configgen/settings/batoceraSettings.py"
 | |
| 
 | |
| log=/tmp/logs/systemsettings.log
 | |
| systemsetting="/usr/bin/batocera-settings"
 | |
| 
 | |
| 
 | |
| echo "----config ----" >> $log
 | |
| 
 | |
| if [ "$command" == "getRootPassword" ]; then
 | |
|     # security disabled, force the default one without changing boot configuration
 | |
|     securityenabled="`$systemsetting  -command load -key system.security.enabled`"
 | |
|     if [ "$securityenabled" != "1" ];then
 | |
| 	echo "linux"
 | |
| 	exit 0
 | |
|     fi
 | |
| 
 | |
|     ENCPASSWD=$(grep -E '^[ \t]*rootshadowpassword[ \t]*=' "${storageFile}" | sed -e s+'^[ \t]*rootshadowpassword[ \t]*='++)
 | |
|     if test -z "${ENCPASSWD}"
 | |
|     then
 | |
| 	exit 1
 | |
|     fi
 | |
|     if ! batocera-encode decode "${ENCPASSWD}"
 | |
|     then
 | |
| 	exit 1
 | |
|     fi
 | |
|     exit 0
 | |
| fi
 | |
| 
 | |
| if [ "$command" == "setRootPassword" ]; then
 | |
|     PASSWD=${2}
 | |
| 
 | |
|     # security disabled, don't change
 | |
|     securityenabled="`$systemsetting  -command load -key system.security.enabled`"
 | |
|     if [ "$securityenabled" != "1" ];then
 | |
| 	exit 0
 | |
|     fi
 | |
| 
 | |
|     # if no password if provided, generate one
 | |
|     if test -z "${PASSWD}"
 | |
|     then
 | |
| 	PASSWD=$(tr -cd _A-Z-a-z-0-9 < /dev/urandom | fold -w8 | head -n1)
 | |
|     fi
 | |
|     PASSWDENC=$(batocera-encode encode "${PASSWD}")
 | |
| 
 | |
|     preBootConfig
 | |
|     if grep -qE '^[ \t]*rootshadowpassword[ \t]*=' "${storageFile}"
 | |
|     then
 | |
| 	# update it
 | |
| 	if ! sed -i -e s@'^[ \t]*rootshadowpassword[ \t]*=.*$'@"rootshadowpassword=${PASSWDENC}"@ "${storageFile}"
 | |
| 	then
 | |
| 	    postBootConfig
 | |
| 	    exit 1
 | |
| 	fi
 | |
| 	postBootConfig
 | |
| 	exit 0
 | |
|     else
 | |
| 	# create it
 | |
| 	if ! echo "rootshadowpassword=${PASSWDENC}" >> "${storageFile}"
 | |
| 	then
 | |
| 	    postBootConfig
 | |
| 	    exit 1
 | |
| 	fi
 | |
| 	postBootConfig
 | |
| 	exit 0
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| if [ "$command" == "overscan" ]; then
 | |
| if [ "$mode" == "set" ];then
 | |
| # set will set overscan values abd  also enable this mode
 | |
| 	if [ -z "$extra1" ] || [ -z "$extra2" ] || [ -z "$extra3" ] || [ -z "$extra4" ]; then
 | |
| 		echo "$0 $command $mode needs 4 arguments:"
 | |
| 		echo "$0 $command $mode overscan_left overscan_right overscan_top overscan_bottom"
 | |
| 		exit 2
 | |
| 	fi
 | |
| 	preBootConfig
 | |
| 	[ -f "$configFile" ] || touch "$configFile"
 | |
| 
 | |
| 	echo "setting overscan values $extra1 $extra2 $extra3 $extra4 " >> $log
 | |
| 	bato_config_set_value disable_overscan 0
 | |
| 	bato_config_set_value overscan_scale 1
 | |
| 	bato_config_set_value overscan_left "$extra1"
 | |
| 	bato_config_set_value overscan_right "$extra2"
 | |
| 	bato_config_set_value overscan_top "$extra3"
 | |
| 	bato_config_set_value overscan_bottom "$extra4"
 | |
| 
 | |
| 	postBootConfig
 | |
| 	exit 0
 | |
| 
 | |
| fi
 | |
| if [ -f "$configFile" ];then
 | |
|         preBootConfig
 | |
| 	if [ "$mode" == "enable" ];then
 | |
| 		echo "enabling overscan" >> $log
 | |
| 		bato_config_set_value disable_overscan 0
 | |
| 		bato_config_set_value overscan_scale 1
 | |
| 	elif [ "$mode" == "disable" ];then
 | |
|                 echo "disabling overscan" >> $log
 | |
| 		bato_config_set_value disable_overscan 1
 | |
| 		bato_config_set_value overscan_scale 0
 | |
| 	else
 | |
|                 postBootConfig
 | |
| 		exit 1
 | |
| 	fi
 | |
| 	postBootConfig
 | |
| 	exit 0
 | |
| else
 | |
| 	exit 2
 | |
| fi
 | |
| fi
 | |
| 
 | |
| if [ "$command" == "lsoutputs" ]
 | |
| then
 | |
|     echo "auto"
 | |
|     batocera-resolution listOutputs
 | |
| fi
 | |
| 
 | |
| if [ "$command" == "lsaudio" ];then
 | |
|     if [[ "${arch}" =~ "rpi" ]]
 | |
|     then
 | |
| 	echo "hdmi"
 | |
| 	echo "jack"
 | |
| 	echo "auto"
 | |
|     elif [[ "${arch}" =~ "x86" ]];then
 | |
| 	echo "auto"
 | |
| 	echo "custom"
 | |
| 	LANG=C aplay -l | grep -E '^card [0-9]*:' | sed -e s+'^card \([0-9]*\): \([^,]*\), device \([0-9]*\): [^\[]* \[\([^]]*\)].*$'+'\1,\3 \4 \2'+
 | |
|     else
 | |
| 	echo "auto"
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| if [ "$command" == "getaudio" ];then
 | |
|     $systemsetting -command load -key audio.device
 | |
|     exit 0
 | |
| fi
 | |
| 
 | |
| if [ "$command" == "audio" ];then
 | |
|     # this code is specific to the rpi
 | |
|     # don't set it on other boards
 | |
|     # find a more generic way would be nice
 | |
|     if [[ "${arch}" =~ "rpi" ]]
 | |
|     then
 | |
| 	# this is specific to the rpi
 | |
| 	cmdVal="0"
 | |
| 	if [ "$mode" == "hdmi" ];then
 | |
| 	    cmdVal="2"
 | |
| 	elif [ "$mode" == "jack" ];then
 | |
| 	    cmdVal="1"
 | |
| 	fi
 | |
|         echo "setting audio output mode : $mode" >> $log
 | |
| 	amixer cset numid=3 $cmdVal || exit 1
 | |
|     elif [[ "${arch}" =~ "x86" ]]
 | |
|     then
 | |
| 	# auto: no .asoundrc file
 | |
| 	# custom: don't touch the .asoundrc file
 | |
| 	# any other, create the .asoundrd file
 | |
| 	if [ "$mode" == "auto" ];then
 | |
| 	    rm -rf /userdata/system/.asoundrc || exit 1
 | |
| 	elif [ "$mode" != "custom" ];then
 | |
| 	    if echo "${mode}" | grep -qE '^[0-9]*,[0-9]* '
 | |
| 	    then
 | |
| 		cardnb=$(echo "${mode}" | sed -e s+'^\([0-9]*\),.*$'+'\1'+)
 | |
| 		devicenb=$(echo "${mode}" | sed -e s+'^[0-9]*,\([0-9]*\) .*$'+'\1'+)
 | |
| 		cat > /userdata/system/.asoundrc <<EOF
 | |
| 	    pcm.!default { type plug slave { pcm "hw:${cardnb},${devicenb}" } }
 | |
| 	    ctl.!default { type hw card ${cardnb} }
 | |
| EOF
 | |
| 		aplay "/usr/share/sounds/Mallet.wav"
 | |
| 	    fi
 | |
| 	fi
 | |
|     elif [[ "${arch}" =~ RG351 ]]
 | |
|     then
 | |
| 	case "${mode}" in
 | |
| 	    "auto"|"speakers")
 | |
| 		amixer cset name='Playback Path' SPK
 | |
| 		;;
 | |
| 	    "headphone")
 | |
| 		amixer cset name='Playback Path' HP
 | |
| 		;;
 | |
| 	esac
 | |
|     fi
 | |
|     exit 0
 | |
| fi
 | |
| 
 | |
| if [ "$command" == "volume" ];then
 | |
| 	if [ "$mode" != "" ];then
 | |
|         	echo "setting audio volume : $mode" >> $log
 | |
| 
 | |
| 		# on my pc, the master is turned off at boot
 | |
| 		# i don't know what are the rules to set here.
 | |
| 		amixer set Master unmute      || exit 1
 | |
|                 amixer set Master    -- ${mode}% || exit 1
 | |
| 
 | |
| 		# maximize the sound to be sure it's not 0, allow errors
 | |
| 		amixer set PCM       -- 100% #|| exit 1
 | |
| 		amixer set Headphone -- 100% #|| exit 1
 | |
| 		exit 0
 | |
| 	fi
 | |
| 	exit 12
 | |
| fi
 | |
| 
 | |
| if [ "$command" == "gpiocontrollers" ];then
 | |
| 	command="module"
 | |
| 	mode="load"
 | |
| 	extra1="mk_arcade_joystick_rpi"
 | |
| 	extra2="map=1,2"
 | |
| fi
 | |
| 
 | |
| if [ "$command" == "module" ];then
 | |
| 	modulename="$extra1"
 | |
| 	map="$extra2"
 | |
| 	# remove in all cases
 | |
| 	rmmod /lib/modules/`uname -r`/extra/${modulename}.ko >> $log
 | |
| 
 | |
|         if [ "$mode" == "load" ];then
 | |
| 	        echo "loading module $modulename args = $map" >> $log
 | |
| 		insmod /lib/modules/`uname -r`/extra/${modulename}.ko $map >> $log
 | |
| 		[ "$?" ] || exit 1
 | |
|         fi
 | |
| 	exit 0
 | |
| fi
 | |
| 
 | |
| if [ "$command" == "canupdate" ];then
 | |
| 	available=$(updatecheck canupdate)
 | |
| 	echo "$available"
 | |
| 	if [[ "$available" != "no" ]]; then
 | |
| 		exit 0
 | |
| 	fi
 | |
| 	exit 12
 | |
| fi
 | |
| 
 | |
| if [ "$command" == "update" ];then
 | |
| 	351elec-upgrade
 | |
| 	exit $?
 | |
| fi
 | |
| 
 | |
| if [[ "$command" == "wifi" ]]; then
 | |
|         ssid="$3"
 | |
|         psk="$4"
 | |
| 
 | |
|         if [[ "$mode" == "enable" ]]; then
 | |
|             echo "configure wifi" >> $log
 | |
| 	    mkdir -p "/storage/.cache/connman" || exit 1
 | |
| 	    cat > "/storage/.cache/connman/wifi.config" <<EOF
 | |
| [global]
 | |
| Name=351elec
 | |
| 
 | |
| [service_351elec_default]
 | |
| Type=wifi
 | |
| Name=${ssid}
 | |
| EOF
 | |
| 	    if test "${psk}" != ""
 | |
| 	    then
 | |
| 		echo "Passphrase=${psk}" >> "/storage/.cache/connman/wifi.config"
 | |
| 	    fi
 | |
|             # Power up the WIFI device
 | |
|             if [ "$(cat /sys/firmware/devicetree/base/model)" == "Anbernic RG552" ]; then
 | |
|               echo 1 > /sys/class/gpio/gpio113/value
 | |
|             else
 | |
|               echo 1 > /sys/class/gpio/gpio5/value
 | |
|             fi
 | |
| 	    sleep 3
 | |
| 	    connmanctl enable wifi || exit 1
 | |
| 	    connmanctl scan   wifi || exit 1
 | |
|             exit 0
 | |
|         fi
 | |
|   	if [[ "$mode" =~ "start" ]]; then
 | |
|             if [[ "$mode" != "forcestart" ]]; then
 | |
|                 settingsWlan="`$systemsetting -command load -key wifi.enabled`"
 | |
|                 if [ "$settingsWlan" != "1" ];then
 | |
|                     exit 1
 | |
|                 fi
 | |
|             fi
 | |
|             # Power up the WIFI device
 | |
|             if [ "$(cat /sys/firmware/devicetree/base/model)" == "Anbernic RG552" ]; then
 | |
|               echo 1 > /sys/class/gpio/gpio113/value
 | |
|             else
 | |
|               echo 1 > /sys/class/gpio/gpio5/value
 | |
|             fi
 | |
| 	    sleep 3
 | |
| 	    connmanctl enable wifi || exit 1
 | |
| 	    connmanctl scan   wifi || exit 1
 | |
| 	    exit 0
 | |
|         fi
 | |
|         if [[ "$mode" == "disable" ]]; then
 | |
| 	    connmanctl disable wifi
 | |
|             # Power down the WIFI device
 | |
|             if [ "$(cat /sys/firmware/devicetree/base/model)" == "Anbernic RG552" ]; then
 | |
|               echo 0 > /sys/class/gpio/gpio113/value
 | |
|             else
 | |
|               echo 0 > /sys/class/gpio/gpio5/value
 | |
|             fi
 | |
|             exit $?
 | |
|         fi
 | |
| 	if [[ "$mode" == "list" ]]; then
 | |
| 	    WAVAILABLE=$(connmanctl services | cut -b 5- | sed -e s+'^\([^ ]*\).*$'+'\1'+ | grep -vE '^Wired$|^<hidden>$')
 | |
| 	    if test -n "${ssid}"
 | |
| 	    then
 | |
| 		echo "${WAVAILABLE}" | grep -qE '^'"${ssid}"'$' || echo "${ssid}"
 | |
| 	    fi
 | |
| 	    echo "${WAVAILABLE}"
 | |
|             exit 0
 | |
| 	fi
 | |
| fi
 | |
| 
 | |
| if [[ "$command" == "storage" ]]; then
 | |
|     exit 0;
 | |
| fi
 | |
| 
 | |
| if [[ "$command" == "forgetBT" ]]; then
 | |
|    killall -9 hcitool
 | |
|    systemctl stop bluetooth
 | |
|    rm -rf /storage/.cache/bluetooth/*
 | |
|    systemctl start bluetooth
 | |
|    exit 0
 | |
| fi
 | |
| 
 | |
| if [ "$command" == "tz" ];then
 | |
|     if test "$mode" == ""
 | |
|     then
 | |
| 	cat /storage/.config/distribution/configs/tz
 | |
|     else
 | |
| 	if test -f "/usr/share/zoneinfo/${mode}"
 | |
| 	then
 | |
| 	    echo "TIMEZONE=${mode}" > /storage/.cache/timezone
 | |
|         systemctl restart tz-data.service
 | |
| 	fi
 | |
|     fi
 | |
|     exit $?
 | |
| fi
 | |
| 
 | |
| exit 10
 |