Magisk环境下如何每次解锁屏幕时执行Shell脚本以保持屏幕常关
实现解锁屏幕时自动执行脚本关闭屏幕的方案
因为/data/adb/service.d下的脚本仅在开机时执行一次,无法直接实现每次解锁触发的需求,需要通过后台常驻监听解锁事件的方式来完成,具体步骤如下:
1. 创建常驻监听脚本
在/data/adb/service.d目录下创建脚本文件(比如命名为lock_display.sh),内容如下:
#!/system/bin/sh # 后台启动监听逻辑,避免阻塞service.d的其他脚本执行 ( while true; do # 检测设备是否处于已解锁状态(通用检测逻辑) if dumpsys window policy | grep -q "mDeviceIsUnlocked=true"; then # 执行你提供的关闭屏幕命令 su -c CLASSPATH=/storage/emulated/0/DisplayToggle.dex app_process / DisplayToggle 0 # 延迟10秒,避免短时间内重复触发(可根据需求调整) sleep 10 fi # 每隔2秒检测一次状态(可根据需求调整) sleep 2 done ) &
2. 设置脚本权限
执行以下命令赋予脚本可执行权限:
chmod 755 /data/adb/service.d/lock_display.sh
3. 验证与调试
- 重启手机后,脚本会随Magisk自动启动并后台常驻
- 如果解锁后未触发命令,可尝试调整状态检测逻辑:
- 替换检测语句为
logcat监听示例(适配部分ROM):# 清除旧日志后监听解锁关键词 logcat -c logcat | while read line; do if echo "$line" | grep -q "Screen unlocked"; then su -c CLASSPATH=/storage/emulated/0/DisplayToggle.dex app_process / DisplayToggle 0 sleep 10 fi done - 确认
/storage/emulated/0/DisplayToggle.dex路径正确且文件具备可读权限
- 替换检测语句为
注意事项
- 部分定制ROM的
dumpsys输出关键词可能不同,需根据实际情况调整过滤规则 - 脚本中的延迟时间可根据自己的使用需求修改,避免过度触发
内容的提问来源于stack exchange,提问作者DoDGer
相关产品推荐
相关产品推荐

