折腾机缘
基于 Rime 的小狼毫输入法(以下简称小狼毫)是 Windows 系统中为数不多的开源免费输入法,也是我目前的主力输入法。
在此之前,我个人主力使用的是系统自带的微软拼音输入法,但在 Windows 10 系统更新到 2004 版本后,无奈遭遇到微软拼音输入法层出不穷的 bugs ,如无法正常定位光标位置等,我也曾经在小众软件论坛中发帖 吐槽过 此事,也正因这一系列的问题让我不得不考虑放弃使用微软拼音输入法。
正当我在考虑要凑合着继续用的时候,我在机缘巧合之下,同样是在小众软件论坛中看到了这个关于小狼毫输入法的 帖子,当中懒人现成的方案让我二话不说便迅速转移到小狼毫中。碰巧我在大学期间曾有过一段主力使用小狼毫输入法的经历,当时候我甚至对于词库词频、输入法外观都做了各种自定义和优化。只可惜当时候并没有备份的概念,一次硬盘的损坏让当时折腾的成果付诸东流。而恰逢当时候 Windows 10 刚刚发布更新,小狼毫输入法仅能在 Windows 10 系统中的部分软件实现正常的输入,而在各种游戏、UWP 软件中会出现无法调用的情况。Rime 的开发者佛振后来也对此发表了 声明,意思这是旧的前端程序的问题导致的,后续会发布全新的程序作为代替以实现兼容 Windows 10。尽管我个人是非常喜欢与欣赏开源的产品,但我考虑到日常生活中的正常使用,因此逐渐过渡到微软拼音输入法上。
不知不觉多年就过去了,微软拼音输入法成为了唯一与习惯,直到现在我又重新回到了小狼毫的怀抱中。
美中不足
小狼毫在佛振等作者的共同努力下已经基本稳定成熟,并非像当初的兼容性问题让人焦头烂额。可对于系统软件有洁癖的我而言,我自知我的使用场景不同于普通用户,因此我在折腾中遇到一些不可避免的问题。
首先我是 Sandboxie 沙盘软件用户,同时也是低权限隔离用户方案的使用者。通常情况下小狼毫在安装后是不能直接正常在以上两种使用场景中被正常调用的,具体会出现无法显示输入框与候选框,或仅能输入英文的情况。
简单介绍一下这两种场景:
- Sandboxie,是一款从 Windows 系统底层层面上,将真实系统环境与虚拟系统隔离的软件。国内使用这款软件的通常是用于软件、游戏的双开或者多开,反倒像我这种以安全为主要目的的用户是少数派,我更偏向用于装载不确定安全性的软件、以及某些强制要求管理员权限的国产软件。
- 低权限隔离用户方案,这个词是我自创的,但方案本身并不是。在中文世界中我是从这篇 教程文章 看到的,后来这套方案也在少数派被另外一位作者 SunsetYe 进行 再演绎 发布。有需求的可以在这两篇文章中进行阅读学习。于我个人而言,我的电脑系统中的国产软件或免费软件只要并非强制要求管理员身份运行才可以安装或使用的情况,我均采用这种方式。简单说说大致原理是,在系统中创建一个没有管理员权限的受限用户身份,在当前正在使用的管理员用户中调用这个受限用户的身份,将相关的 app 以这个用户的身份进行安装、运行,从而避免某些软件滥用管理员权限在后台肆意妄为。这一系列操作中,其中牵涉到的是 RunAsInvoker 的避免调用管理员身份运行的指令,关于 RunAsInvoker 更准确的介绍可参考:https://devblogs.microsoft.com/oldnewthing/20161117-00/?p=94735
解决方案
经过我多番查阅资料与实际测试,发现这两个使用场景的本质还是要让沙箱安全环境中的软件能正常加载 Rime 的服务项,但具体的步骤不同,以下内容按需阅览。
注:以下教程将默认你已经了解 Sandboxie 和低权限隔离用户的基本安装与使用方法,详细的安装教程将不再赘述,需要学习的请使用搜索引擎或看上文中提及的教程文章
Sandboxie 中调用 Rime 小狼毫
官方参考:https://github.com/rime/weasel/issues/143#issuecomment-405796590
- 新建沙盘后,鼠标右键点击所新建的沙盘,选择沙盘设置
- 依次点击「资源访问」>「文件访问」>「完全访问」,找到「编辑/添加」,输入
\Device\NamedPipe\* 你的用户名*\WeaselNamedPipe
,点击两次「确定」后保存设置 - 如无意外现在启动软件应该能正常调用 Rime 小狼毫输入法了,如果还没有正常调用可先终止沙盘所有软件的运行,再重新启动沙盘中的软件。
低权限隔离用户调用 Rime 小狼毫
该教程默认你已经安装 Rime 小狼毫输入法在系统中,并了解 Rime 小狼毫的基本文件结构与功能
以下步骤中,前 8 步的操作与上文提及到的低权限隔离用户的 教程文章 中的安装软件的步骤教程基本一致
参考源:https://geelaw.blog/entries/isolate-app/
- 以当前用户的身份正常启动 PowerShell 。
- 输入
$cred = Get-Credential
并回车。 - 输入低权限隔离用户的用户名,回车,例如我的隔离用户名是
Limited
。 - 输入该用户的登录密码,回车(密码默认不显示) 。
- 输入
Start-Process powershell -ArgumentList '-Command Start-Process powershell' -Credential $cred -LoadUserProfile
,回车,会弹出一个新的 PowerShell 窗口。 - 在新的 PowerShell 窗口中输入
$env:__COMPAT_LAYER = 'RunAsInvoker'
,回车。 - cd 定位到 Rime 的安装路径,例如
cd "C:\Program Files (x86)\Rime\weasel-0.14.3"
,回车。 - 输入
.\WeaselSetup.exe
,回车,完成安装部署 - 把你原有的 Rime 配置
C:\Users\你的当前用户名\AppData\Roaming\Rime
中的文件转移到文件夹C:\Users\你的低权限隔离用户名\AppData\Roaming\Rime
中。 - 尝试启动低权限隔离用户中的软件,如无意外软件已经可调用 Rime 小狼毫输入法。