為什麼要啟用背景執行:在多個APP之間切換的時候,iSH Shell會被iOS暫停,這會導致程式執行到一半卡住,所以必須申請背景執行權限。
以iOS的設計來說,APP少數能在背景執行的方法就是請求定位權限了。iSH Shell可透過cat /dev/location
指令請求定位權限,讓iSH Shell得以在背景繼續執行。請放心,定位只是為了讓iSH Shell不會被iSO中止。資料不會傳輸給第三方。
我們將用OpenRCiSH Shell的背景執行權限。
1. 設定OpenRC服務#
- 安裝OpenRC套件
apk add openrc
- 新增指令稿
vim /etc/init.d/runbg
- 填入以下內容,執行
cat /dev/location
指令,並將結果輸出到/dev/null
,這樣資料就不會傳給任何人
#!/sbin/openrc-run
#
# Copyright (c) 2021-2024: [email protected]
# License: MIT
#
# This service reads the GPS and discards the output to /dev/null.
# This is not tracking you in any way. The sole purpose of this
# is to ensure an iOS program continues to run in the background.
# This process has no noticeable impact on battery life.
#
description="Reads GPS to ensure iSH continues to run in the background"
command="/bin/cat"
command_args="/dev/location > /dev/null"
command_background="YES"
pidfile="/run/runbg.pid"
- 將指令稿加入OpenRC自動啟動的服務
chmod +x /etc/init.d/runbg
rc-update add runbg default
- 重開APP,iSH Shell隨即會請求定位權限,之後iSH Shell就能在背景執行了。
2. 如果iSH Shell在背景還是被iOS中止#
若iSH Shell的程式佔用太多RAM,iOS還是會把它中止的。
經過實測,iSH Shell的SSH連線放到背景還是會被凍結QQ 看來只有iPad的幕前調度能真正避免APP背景執行被殺掉。