使用 Watt Toolkit(原Steam++)加速 NVDA 插件下载和谷歌翻译
最近中文社区镜像源的流量又被恶意下载消耗光了,Google 翻译和插件都下载不了了。
其实我之前一直都使用 Watt Toolkit 来加速访问 GitHub,但一直存在一个问题非常困扰我,那就是 NVDA 插件商店下载插件时会遇到 SSL 验证错误。
自从 Watt Toolkit 最近推出了 Google 翻译加速之后,我几乎不依赖中文镜像源了,虽然镜像源依然很好用。
这两天我花了很长时间来想办法解决 SSL 报错问题,终于找到了个临时能用的方法。
我还花了大量时间来调查 Watt Toolkit 在键盘访问时的可访问性问题,但短时间内无法解决,也就只好先用 NVDA 插件的形式代替。虽然还有很多不足之处。
注意:要使用本文的加速访问的话,需要禁用镜像源相关的内容。
事先声明,本文是一篇技术性较强的文章,请谨慎使用本文的操作。
本文包括:
- 安装 Watt Toolkit
- 使用本文提供的 steam++ appModule 插件模块临时改善 Watt Toolkit 的键盘可访问性
- 配置 Watt Toolkit 加速 GitHub 和 Google 翻译
- 临时解决开启加速时 NVDA 插件商店下载插件失败的问题
下载和安装 Watt Toolkit
「Watt Toolkit」原本是一个开源跨平台的多功能游戏工具箱,但我们需要的仅仅是它的网络加速功能。
它可以加速 GitHub 和 Google 翻译等一部分访问存在问题的网站,注意这仅仅只是加速,而且一切流量都通过本地反代在本地计算机上完成。
注意:之后的操作可能需要管理员权限。
所以 NVDA 也需要可以访问管理员权限的应用。
在 https://steampp.net/ 下载 Watt Toolkit 安装程序。
官网提供了多个下载渠道,可以选择自己能访问的渠道下载。
然后安装 Watt Toolkit。
注意:Watt Toolkit 安装程序的界面需要 OCR 进行操作,不过 Windows OCR 就够用了。
改善 Watt Toolkit 的键盘可访问性
因为 Avalonia 框架的一些元素的可访问性还不够完善,导致系统焦点导航存在焦点名称无异议的问题。
这里我编写了一个临时的 appModule 来解决一部分问题,虽然不够完善但勉强够用了。
当然如果熟练掌握其它导航方式,也可跳过此步。
在 NVDA 的高级设置中勾选“允许从开发者实验目录加载自定义代码”,然后打开开发者实验目录。
在 appModules 目录下创建一个名为 steam++.py 的 Python 源文件,将下面的代码保存到此文件中。
# File: steam++.py
# Description: NVDA AppModule for Steam++
# Author: hwf1324 <1398969445@qq.com>
# This file is covered by the GNU General Public License 2.0.
# See: https://www.gnu.org/licenses/gpl-2.0.html for more details.
# Copyright (C) 2024 hwf1324 <1398969445@qq.com>
import appModuleHandler
import controlTypes
from NVDAObjects import NVDAObject
class ObjectIterator:
def __init__(self, obj: NVDAObject):
self.current = obj.firstChild
def __iter__(self):
return self
def __next__(self):
if self.current is None:
raise StopIteration
obj = self.current
self.current = obj.next
return obj
def makeName(name: str, newName: str) -> str:
if newName != "":
return newName if name == "" else ", ".join([name, newName])
return name
def findEfficientNameFromObjectChildren(obj: NVDAObject, name: str = "") -> str:
for child in ObjectIterator(obj):
if child.role == controlTypes.Role.STATICTEXT:
name = makeName(name, child.name)
if name != "":
break
elif child.children:
newName = findEfficientNameFromObjectChildren(child, name)
name = makeName(name, newName)
return name
class AppModule(appModuleHandler.AppModule):
def event_gainFocus(self, obj: NVDAObject, nextHandler):
if obj.name.find("Avalonia.") != -1 or obj.name == "":
name = findEfficientNameFromObjectChildren(obj)
if name != "":
obj.name = name
nextHandler()
安装好插件后,重启 NVDA 或重载插件即可。
配置 Watt Toolkit 加速 GitHub 和 Google 翻译
接下来,我们需要对 Watt Toolkit 进行一些配置。
- 按
Tab
键切到“主页”,然后按下光标
到“网络加速”然后回车
。 - 按
Tab
键切到“加速设置”,然后按空格
激活。(注:虽然“加速设置”面板的控件Tab
可以切的到,但有可能在后续版本中修复。) - 按
Tab
键切到“安装证书”,然后按空格
安装证书。(注:这里安装的证书是软件生成的自签名证书,但此行为依然是危险行为,请自行判断风险。) - 此时因为提示信息焦点会跑掉,按
Tab
键切回“加速设置”。- 默认有四种不同的代理方式,参考:https://github.com/BeyondDimension/SteamTools/discussions/1725
- 这里有些选项可按需启用。例如“启用脚本”、“启动时自动开启加速”。
- “代理设置”可弹出更复杂的代理配置面板。例如配置 DoH 等。
- 接下来一直按
Tab
键切到“平台加速”后的平台列表,初始默认只加速“Steam 服务”。- 按
Tab
可以导航到控制对应平台所有条目加速的复选框,按空格
选中或取消选中该平台是否加速。我们可以勾选我们需要的服务。 - 继续按
Tab
可以导航到下一个平台。 - 按空格展开或收起详细的加速条目。
- 详细的加速条目的复选框无法正常导航,可以使用鼠标点击来切换。
- 按
- 按
Shift+Tab
反切回“刷新”按钮的前一个控件,此控件为“一键加速”,按空格
开始加速。(注:此控件不读,也可用其它方式导航。)
注:加速后一些没有信任系统跟证书列表的应用在访问被加速的网站时会抛出 SSL 验证错误,例如在没有中文镜像源的 NVDA 插件商店下载插件,关闭加速即可用原方式访问。
临时解决开启加速时 NVDA 插件商店下载插件失败的问题
这一部分存在较大的安全风险,请确认自己知道自己在干什么。
NVDA 使用 Requests 库来下载插件,而 Requests 默认信任 certifi 包的证书。
下面的方式具有较大的安全风险,请自行判断风险。
在 Watt Toolkit 中找到“打开证书文件夹”,然后复制 SteamTools.Certificate.cer
的完整路径。
然后以管理员打开 PowerShell,替换下面命令的证书路径,输入命令并回车。
Get-Content "<SteamTools.Certificate.cer>" | Add-Content "C:\Program Files (x86)\NVDA\cacert.pem"
然后重启 NVDA 就可以在加速的情况下下载插件了。
注意:每次更新或安装 NVDA 后,都需要重新添加一次证书。
其实一班 certifi 包的证书也不会经常更新,如果想不那么麻烦的话,可以手动下载最新的 certifi PEM 证书文件,然后把自签名证书添加到 PEM 文件中,在用 Requests 的环境变量手动指定改好的证书文件。
后记
对于普通用户而言,在可以访问 GitHub 的地区,其实不建议使用上面的方式来添加自签名证书。
本文也只是提供了大致思路,也可以变通的在其它场景使用。
Watt Toolkit 还有很多可以设置的东西,例如开机自启,自动加速等。在这里就不一一介绍了。
注:在设置里开关不读条目的话可以导航到上一个对象之类的查看对应信息。
这个工具对于喜欢玩 Steam 游戏的朋友来说也是壁装工具。
虽然本篇文章临时解决了访问 GitHub 和 Google 翻译的问题,但还有很多不便之处,而且方案也是临时的。
希望之后能找到更好的方式吧。