#!/bin/sh # # S22brightness — 开机按用户设置恢复背光(MeowOS M21) # # 位置/顺序(/etc/init.d 按文件名自然序执行,见 /etc/init.d/rcS): # S11jpeg_display_shell 画开机 logo,画前把背光压到 <=20(防「面板上电默认很亮」) # → S21mount_ubifs 挂载 /usr/data # → S22brightness 本脚本:此时才读得到 /usr/data/meow/settings.conf # → S30dbus … → S70meow_sysui / S90meow_bootmenu launcher/watchdog 接管后继续维持用户亮度 # # 为什么不能只改 S11:S11 早于 S21,/usr/data 未挂载 → settings.conf 不存在,只能写死一个安全低值。 # # 行为: # - 读 display.brightness,以 display.brightness_min(下限,缺省 1)和 # /sys/class/backlight/backlight_pwm0/max_brightness(上限,本机实测 101)clamp 后写入。 # - 单位是 0..max_brightness 的**绝对档位**,不是百分比;display.brightness_min 同单位。 # - 读不到文件 / 解析不出 display.brightness / max_brightness 读不到 → **不改背光** # (保持 S11 设的低值),打一行日志后 exit 0。 # - 幂等(当前值已是目标值则不写)、无 sleep / 无重试,任何运行期失败都 exit 0(不阻断 init 链)。 BL_BRIGHTNESS="/sys/class/backlight/backlight_pwm0/brightness" BL_MAX="/sys/class/backlight/backlight_pwm0/max_brightness" MEOW_SETTINGS="/usr/data/meow/settings.conf" log() { echo "S22brightness: $*" } start() { # /usr/data 刚挂载时 settings.conf 可能尚不存在(新机/首次启动)或被正在写: # 只读一次,读不到就保持 S11 的低亮度,不 sleep 重试(不阻塞 init 链)。 if [ ! -r "$MEOW_SETTINGS" ]; then log "settings.conf 不可读($MEOW_SETTINGS),保持 S11 低亮度" return 0 fi max=$(cat "$BL_MAX" 2>/dev/null) case "$max" in ''|*[!0-9]*) log "max_brightness 读不到,不改背光(保持 S11 低亮度)" return 0 ;; esac if [ "$max" -le 0 ]; then log "max_brightness=$max 非法,不改背光" return 0 fi # 解析 settings.conf: = ,容忍两侧空白/CR,忽略注释与非数字值。 b="" mn="" while IFS='=' read -r k v; do k=$(printf '%s' "$k" | tr -d '[:space:]') v=$(printf '%s' "$v" | tr -d '[:space:]') case "$k" in display.brightness) case "$v" in ''|*[!0-9]*) ;; *) b="$v" ;; esac ;; display.brightness_min) case "$v" in ''|*[!0-9]*) ;; *) mn="$v" ;; esac ;; esac done < "$MEOW_SETTINGS" if [ -z "$b" ]; then log "settings.conf 无有效 display.brightness,保持 S11 低亮度" return 0 fi [ -n "$mn" ] || mn=1 [ "$mn" -lt 1 ] && mn=1 [ "$mn" -gt "$max" ] && mn="$max" [ "$b" -lt "$mn" ] && b="$mn" [ "$b" -gt "$max" ] && b="$max" cur=$(cat "$BL_BRIGHTNESS" 2>/dev/null) if [ "$cur" = "$b" ]; then log "背光已是 $b,跳过写入" return 0 fi if echo "$b" > "$BL_BRIGHTNESS" 2>/dev/null; then log "开机背光 -> $b(min=$mn max=$max)" else log "写背光 $b 失败,保持原值" fi return 0 } case "$1" in start) start ;; stop|restart|reload) ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0