当前位置: 首页 > news >正文

【解决方案】鸿蒙 / 矿鸿系统 Shell 无故退出问题(息屏导致)详解

平台环境

  • OpenHarmony 版本:4.1 release
  • 开发板:DAYU / RK3568
  • 调试工具:hdc

在使用 OpenHarmony 4.1 Release(矿鸿系统)进行开发时,遇到这样的问题:

🚨 Shell 会在一段时间后自动退出,严重影响调试和测试效率。

根本原因:系统息屏导致 shell 会话被关闭。

本文将从 修改系统配置、设置电源模式、替换配置文件、代码控制常亮 四种方法,讲解如何解决此问题。


一、修改源码实现全局不息屏

如果你正在编译自己的系统镜像(如 OHOS 源码构建),可以直接修改系统电源配置文件,实现在所有模式下“不息屏”。

修改路径:

base/powermgr/power_manager/services/native/profile/power_mode_config.xml

关键参数解释:

Switch ID功能说明
101DisplayOffTime 息屏时间
102系统自动睡眠时间
115屏幕亮度

DisplayOffTime表示息屏的,因此只需要修改DisplayOffTime 对应的id:101即可

<switch id="101" value="xxx"/>value 改为 -1,即表示不设置息屏时间 = 永不息屏

修改示例:

<proxy id="600"> <!-- 正常模式 --><switch id="101" value="-1" recover_flag="0"/>...
</proxy>

建议你对所有模式(id 600~603)都设置 value="-1",这样即使切换电源模式,也不会息屏。

修改后的文件

<!--Power Mode Definitions:        // 电源模式定义MODE_NORMAL = 600,             // 正常模式MODE_POWER_SAVE = 601,         // 省电模式MODE_PERFORMANCE = 602,        // 性能优先MODE_EXTREME_POWER_SAVE = 603, // 超级省电
-->
<!--Action Definitions:         // 行为定义DisplayOffTime = 101,       // 息屏时间控制SystemAutoSleepTime = 102,  // 系统自动睡眠时间控制AutoAdjustBrightness = 103, // 亮度自动调整时间控制AutoWindowRotation = 107,   // 窗口自动旋转时间控制SystemBrightness = 115,     // 系统亮度调节VibratorsState = 120,       // 马达(震动)状态
-->
<switch_proxy version="1"><proxy id="600"><switch id="101" value="-1" recover_flag="0"/><switch id="102" value="0" recover_flag="0"/><switch id="103" value="-1" recover_flag="0"/><switch id="107" value="1" recover_flag="0"/><switch id="115" value="102" recover_flag="0"/><switch id="120" value="1" recover_flag="0"/></proxy><proxy id="601"><switch id="101" value="-1" recover_flag="0"/><switch id="102" value="5000" recover_flag="0"/><switch id="103" value="-1" recover_flag="0"/><switch id="107" value="-1" recover_flag="0"/><switch id="115" value="50" recover_flag="0"/><switch id="120" value="-1" recover_flag="0"/></proxy><proxy id="602"><switch id="101" value="-1" recover_flag="0"/><switch id="102" value="-1" recover_flag="0"/><switch id="103" value="-1" recover_flag="0"/><switch id="107" value="1" recover_flag="0"/><switch id="115" value="255" recover_flag="0"/><switch id="120" value="1" recover_flag="0"/></proxy><proxy id="603"><switch id="101" value="-1" recover_flag="0"/><switch id="102" value="1000" recover_flag="0"/><switch id="103" value="-1" recover_flag="0"/><switch id="107" value="-1" recover_flag="0"/><switch id="115" value="25" recover_flag="0"/><switch id="120" value="-1" recover_flag="0"/></proxy>
</switch_proxy>

二、通过命令行修改电源模式(临时方案)

如果你不想重编系统镜像,也可以临时修改电源模式,使其使用“性能优先模式”来避免息屏。

操作步骤:

# 进入 shell
hdc shell# 设置为性能优先模式
power-shell setmode 602

成功输出如下:

Set Mode: 602
Set Mode Success!

⚠️ 注意:该设置在系统重启后会恢复,需重新执行。

三、替换设备上的 power_mode_config.xml 文件(持久化方案)

若你无法编译系统但希望持久生效,可以将修改后的 XML 文件推送至设备 /vendor 目录。

步骤:

  1. 修改本地 XML 文件:
    power_mode_config.xml 中,将所有 <switch id="101" value="xxx"/> 设置为 -1

  2. 获取写权限:

hdc shell "mount -o remount,rw /"
  1. 准备目录(如不存在):
hdc shell
mount -o rw,remount /vendor
cd /vendor/etc
mkdir power_config
exit
  1. 推送 XML 文件:
hdc file send power_mode_config.xml /vendor/etc/power_config/
  1. 重启设备使其生效:
hdc shell reboot

修改生效后,无需每次开机都重新设置,除非你重新刷机覆盖了 vendor 分区

四、应用内控制屏幕常亮(适用于 JS/TS 应用)

如果你只希望在当前应用运行时保持屏幕常亮,可在代码中调用 setWindowKeepScreenOn

示例代码(ArkTS):

private async keepScreenOn(status: boolean) {let context = getContext(this) as common.BaseContextlet windowClass = await window.getLastWindow(context)let isScreenOn = await windowClass.getWindowProperties().isKeepScreenOnif (!isScreenOn) {await windowClass.setWindowKeepScreenOn(status)}console.info("屏幕常亮状态:" + isScreenOn)
}

建议在页面生命周期中调用:

onPageShow() {this.keepScreenOn(true) // 页面显示时保持常亮
}onPageHide() {this.keepScreenOn(false) // 页面隐藏时取消
}
http://www.dtcms.com/a/284518.html

相关文章:

  • Spatial Frequency Modulation for Semantic Segmentation。针对图像下采样造成信息丢失问题的解决思路
  • 深入理解 Spring Boot Starter 的生成机制
  • tcp/udp调试工具
  • Linux内核网络栈深度剖析:inet_connection_sock.c的服务器端套接字管理
  • LINUX例行性工作(计划任务)实验操作 ---at和crontab以及系统级别的计划任务
  • springboot跨域问题 和 401
  • 当下主流摄像头及其核心参数详解
  • 不同场景下git指令的搭配
  • pycharm回车、删除、方向键和快捷键等不能使用原因
  • TRAE Agent 在 SWE-bench Verified 上得分 75.2%,并已开源
  • opencv、torch、torchvision、tensorflow的区别
  • Linux717 SWAP扩容;逻辑卷条带化
  • 前端-HTML
  • 杰理AC70NN项目用脚本自定义添加.mk文件,直接链接进主Makefile脚本编译
  • 开通腾讯位置复位
  • 深入理解Collections.addAll方法
  • 【华为】交换机vlan互访实验
  • 【人工智能99问】梯度消失、梯度爆炸的定义、后果及规避手段?(7/99)
  • JAVA面试宝典 -《Kafka 高吞吐量架构实战:原理解析与性能优化全攻略》
  • UE5多人MOBA+GAS 25、创建数据表初始化属性,使用MMC计算伤害
  • 模块化社交新范式:Moments用极简设计重构数字表达
  • 麒麟信安参编的三项软件供应链安全团体标准发布
  • 运维工程师面试题174道
  • 单片机最小系统硬件调试踩的一些坑
  • lesson16:Python函数的认识
  • Linux手动安装Nginx(基于Centos 7)
  • ESLint 完整功能介绍和完整使用示例演示
  • 01项目管理概论
  • Shell变量
  • 操作系统系统面试常问(进程、线程、协程相关知识)