平臺環境
- 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 | 功能說明 |
---|---|
101 | DisplayOffTime 息屏時間 |
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
目錄。
步驟:
-
修改本地 XML 文件:
在power_mode_config.xml
中,將所有<switch id="101" value="xxx"/>
設置為-1
。 -
獲取寫權限:
hdc shell "mount -o remount,rw /"
- 準備目錄(如不存在):
hdc shell
mount -o rw,remount /vendor
cd /vendor/etc
mkdir power_config
exit
- 推送 XML 文件:
hdc file send power_mode_config.xml /vendor/etc/power_config/
- 重啟設備使其生效:
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) // 頁面隱藏時取消
}