#!/bin/sh # # S22brightness — 开机按用户设置恢复背光(MeowOS M21) # # 位置/顺序(/etc/init.d 按文件名自然序执行,见 /etc/init.d/rcS): # S11jpeg_display_shell 画开机 logo,画前把背光写成 20(驱动默认 0 = 灭屏 → logo 暗而可见) # → S21mount_ubifs 挂载 /usr/data # → S22brightness 本脚本:此时才读得到 /usr/data/meow/settings.conf # → S30dbus … → S70meow_sysui / S90meow_bootmenu launcher/watchdog 接管后继续维持用户亮度 # # 为什么不能只改 S11:S11 早于 S21,/usr/data 未挂载 → settings.conf 不存在,只能写死一个安全低值 # (且真机 S11 跑在背光模块加载之前,写入时机受 fb0 约束)。 # # 行为: # - 读 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 未必写过值,真机驱动默认 0 = 灭屏,所以这里只报当前读数、不做假设), # 打一行日志后 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: $*" } # 当前背光读数(仅用于日志;读不到返回 unreadable)。 cur_bl() { v=$(cat "$BL_BRIGHTNESS" 2>/dev/null) case "$v" in ''|*[!0-9]*) printf 'unreadable' ;; *) printf '%s' "$v" ;; esac } start() { # /usr/data 刚挂载时 settings.conf 可能尚不存在(新机/首次启动)或被正在写: # 只读一次,读不到就不改背光,不 sleep 重试(不阻塞 init 链)。 if [ ! -r "$MEOW_SETTINGS" ]; then log "settings.conf 不可读($MEOW_SETTINGS),不改背光(当前 brightness=$(cur_bl))" return 0 fi max=$(cat "$BL_MAX" 2>/dev/null) case "$max" in ''|*[!0-9]*) log "max_brightness 读不到,不改背光(当前 brightness=$(cur_bl))" return 0 ;; esac if [ "$max" -le 0 ]; then log "max_brightness=$max 非法,不改背光(当前 brightness=$(cur_bl))" 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,不改背光(当前 brightness=$(cur_bl))" 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 # 2>/dev/null 放在 > 之前,避免节点不可写时重定向报错漏到控制台。 if echo "$b" 2>/dev/null > "$BL_BRIGHTNESS"; then log "开机背光 -> $b(min=$mn max=$max)" else log "写背光 $b 失败,保持当前值(brightness=$(cur_bl))" fi return 0 } case "$1" in start) start ;; stop|restart|reload) ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0