本文是忘记 Kindle 锁屏密码的完美解决方案的后续,将继续与烦人的密码做斗争.同样,本文的目标仍是在不重置设备的情况下重置密码.
与锁屏密码不同, Kindle 的家长监护密码是以 LIPC 方式存储的.关于 LIPC, 我也不是太懂,感觉跟 Windows 的注册表有些相似. LIPC 存储方式中,每条数据(称为 property) 是一个 key-value 对,并由相应的 publisher 提供.数据可以是这三种类型之一: String, Int, Hash. 前两种数据通过 lipc-set-prop
和 lipc-get-prop
命令进行读和写,第三种数据的读写(似乎)需要使用 lipc-hash-prop
命令.
在 com.lab126.dpmManager 这个 publisher 中存在着多个与家长监护密码有关的数据,如下:
名称 | 可能的值 | 是否可读写 | 描述 |
getControlStatus | 0,2 (int) | ro | 0: 未启用限制
2: 已启用限制 |
setParentalControlsPassword | * (hash) | rw | (可能是)以 Hash 类型存储的家长监护密码 |
validateParentalControlsPassword | * (hash) | rw | (可能是)家长监护密码是否正确 |
parentalControlsHint | * (str) | rw | 用户设置的密码提示文本 |
isKindleStoreDisabled | 0,2 (int) | rw | 0: 未限制 Kindle 商店访问
2: 已限制 Kindle 商店访问 |
isBrowserDisabled | 0,2 (int) | rw | 0: 未限制浏览器访问
2: 已限制浏览器访问 |
isArchivedItemsDisabled | 0,2 (int) | rw | 0: 未限制云端内容访问
2: 已限制云端内容访问 |
最后三组数据对应的其实就是 Kindle 的家长监护设置里的三种访问限制,如果有一为 2
,则 getControlStatus
为 2
.(居然用 2
代表真值)
最开始我认为可以通过修改 setParentalControlsPassword
的值来直接修改家长监护密码.但在尝试了多种命令后均已失败告终.(感觉 Hash 这种类型的数据有些奇怪)之后我发现,其实在 Kindle 内部家长监护的密码和访问限制是独立储存的,无需知道密码就可以修改访问限制.执行以下三行命令即可:
lipc-set-prop com.lab126.dpmManager isKindleStoreDisabled 0 lipc-set-prop com.lab126.dpmManager isBrowserDisabled 0 lipc-set-prop com.lab126.dpmManager isArchivedItemsDisabled 0
在哪执行随便你, SSH 或 Kindle 的虚拟终端 (kterm) 均可.这三条命令依次解除了 Kindle 商店,浏览器和云端内容的访问限制.此时,虽然家长监护密码仍然存在,但家长监护本身已经失效了(听起来像是一种很微妙的状态).
(另外,既然密码和访问限制是独立储存的,互不影响,那么当你的 Kindle 未曾设置过家长监护密码时,你也可以直接通过上述代码设置访问限制.有家长监护却没有密码,听起来也蛮有趣的.)
好吧,这其实不是一个十分完美的解决方案,毕竟我们没能重置家长监护密码,只是让它失效了而已,原因在于我不知道怎么改 setParentalControlsPassword
. 我已经在 MobileRead 论坛发贴请教大佬们了,也许再过一会就会有大佬告诉我方法,到时候我再更新本文.
以上.
Update: