Coxxs https://dev.moe/ Mon, 19 Jan 2026 08:27:02 +0000 zh-Hans hourly 1 https://wordpress.org/?v=6.9.4 https://dev.moe/wp-content/uploads/2015/11/cropped-0e9d3ee98a13c72bf9e698bd46214bb7-32x32.png Coxxs https://dev.moe/ 32 32 66418562 这些年的 AI 编程 https://dev.moe/3265 https://dev.moe/3265#comments Wed, 31 Dec 2025 02:14:55 +0000 https://dev.moe/?p=3265 这是一篇写给未来的自己回看的博文。之所以这么说,其一,在未来回看一个技术的快速发展是一件很有意思的事情*。其二继续阅读"这些年的 AI 编程"

这些年的 AI 编程最先出现在Coxxs

]]>
这是一篇写给未来的自己回看的博文。之所以这么说,其一,在未来回看一个技术的快速发展是一件很有意思的事情*。其二,呃… 是因为这年头大家都在和 AI 聊天,不怎么有人会去看个人博客了(也许 AI 会看吧…)。

* 就像本站 2013 年记录过 部署 https 的「艰辛」历程,而今 https 已是日常了。

众所周知,AI 热潮是从 2022 年末 ChatGPT 的发布开始的。不过,本文会从稍早一些讲起。

2021 年 6 月:好用的代码补全

2021 年的 GitHub Copilot 是一个代码补全器。例如,用户输入一句 DB::,AI 就会根据上下文「猜测」用户想读取哪个数据库、哪些数据,并将猜出来的完整的读取数据库的代码呈现给用户,用户按下 Tab 即可快速补全。

我在 2021 年 10 月 27 日收到的 Copilot 内测邀请邮件(苦等数月…)

那阵子,你能看到获得 Copilot 内测权限的用户们在 Twitter 上分享体验,有人发现 Copilot 会写出隐藏着错误的代码,有人质疑 Copilot 写出的代码会高度匹配某些带有版权的公开代码,引起法律问题。有趣的是,人们发现 Copilot 似乎什么都能做。

Copilot 当然可以补全代码 (Source)
Copilot 还可以用来补全翻译 (Source)
…或者引导 Copilot 回答问题?(Source)

对于当时写段代码要打开几十个浏览器窗口的我来说,Copilot 是相当好用的。它除了省去了写类似 CRUD(数据库增删改查)的重复劳动之外,我不熟悉的算法、不知道的 API 定义,也可以省去搜索的过程,直接写句注释让 Copilot 「猜」代码。写代码更轻松了,效率也提高了。

那这是怎么做到的呢?其实是 GitHub Copilot 使用了一个大语言模型(LLM, Large Language Model),根据上下文的代码进行补全。

Copilot 使用的基于 Transformer 架构的 LLM 可以被视为一个复杂的「文本补全器」。它并不具备人类的思维意识,而是通过预先阅读海量的文本与代码数据,学习了词汇与代码逻辑之间的统计规律。当 LLM 收到一串文字时,模型内部的神经网络会进行庞大的矩阵运算,计算出词表中的每一个字词在当前语境下出现的可能性,随后,它会根据这些概率选取下一个字词,周而复始。

对了,当时的 GitHub Copilot 用的是 OpenAI 提供的 Codex 模型(不是 2025 年的那个)。而当时的 Codex 模型是基于 GPT-3 模型微调得到的。

嗯?GPT?

2022 年末:爆火的 AI 聊天网站

GitHub Copilot 公开的一年半后(2022 年末),OpenAI 决定花几周时间把他们的 GPT-3.5 模型做成一个简单的 AI 问答网站 —— ChatGPT。

原理很简单,就像 Copilot 用 GPT-3「猜」接下来的代码一样,ChatGPT 是用 GPT-3.5 「猜」接下来的文本,只不过这次这个 ChatGPT 会把用户的话放在类似这样的模板里来补全(以及模型进行了一些针对 ChatGPT 的微调):

这是 GPT-3 示例中的对话提示词(GPT-3.5 使用的模板可能有所不同)

于是,任何人只要访问一个网站,就能与 GPT-3.5 对话了。原本只是在程序员圈子里火的模型,这次在全球范围内火了。短短两个月,ChatGPT 积累了一亿用户。

然而,就像 AI 补全代码会写出错误的代码一样,LLM 的回答也可能是错误的。对于 AI 训练数据中冷门的领域,或者一些细节的问题上,LLM 往往会以自信满满的语气,在回答中捏造出一个完全不存在的事物。

回到编程的话题,这个一年前会补全代码的 GPT-3 大语言模型(LLM),在 ChatGPT 里自然也会写代码:

有人发现 ChatGPT 很擅长写代码 (Source)

只不过,虽然它能生成代码片段、也能提供报错的解决方案,但「代码片段」可能是错的,「解决方案」也可能是虚构的。

有人发现 ChatGPT 会写出错误的代码 (Source)

别忘了,LLM 只是一个复杂的「文本补全器」。它并不理解用户在说什么,只是根据上下文,计算出下一个最可能出现的字词。如果你去问 LLM 一个它不熟悉的领域,它很可能会开始利用训练数据内的知识开始瞎编。

那么,有没有办法让 AI 像人类一样,能在遇到不熟悉的领域时,主动去上网搜索答案呢?

2023 年初:LLM 开始使用工具(Tool)

之前提到,ChatGPT 在两个月内获得了一亿用户。这是一件很可怕的事情,对于 Google 而言,这意味着自己搜索引擎的流量入口可能会被夺走;而对于 Microsoft Bing 而言,这是一次翻身的机会(剧透:并没有翻身)。

2023 年初,Bing Chat 支持了搜索功能

于是,各家公司开始在 AI 上投入资源。作为 ChatGPT 用户,2023 年初的那几个月,ChatGPT 几乎每个月都有新功能。其中重要的功能之一,就是它会上网「搜索」了。或者,从本质上说,是 LLM 会调用工具了。

LLM 作为一个「文本补全器」,它是怎么调用工具的呢?很简单,系统会在提示词里告诉 LLM 调用工具的「命令」(例如 { "tool": "search", "query": "天气" }),当 LLM 生成出调用工具的「命令」后,系统中断生成。此时,服务器会根据命令去执行工具(如联网搜索),拿到结果后,再把执行结果,塞进对话中,并继续补全。

AI 能调用工具搜索了,不错,然后呢?

2024 年 9 月:LLM 开始思考(Reasoning)

2024 年 9 月,OpenAI 发布了 o1 模型。它被训练成会在回答用户的提问前,先「浪费」大量的 Token,进行自我思考与反思,最后将思考结果呈现给用户。这种模型被称作推理模型(Reasoning model),但依然是 LLM

这看上去像是一种提高模型能力的「作弊」方式 —— 假如 LLM 没法一次给出正确结果,那就给出结果前多思考几次 LLM 的答案是否正确。不过,对于其他公司而言,既然别家做了,那我不能没有,于是大家开始纷纷推出各自的思考模型。

需要注意,用户所看到的各家闭源 AI 的思考过程,其实并非原始的思考过程,而是总结后的思考过程。不仅是因为原始的思考过程并不易读,也是因为思考过程其实是相当「值钱」的,可以被别人拿去用于训练 AI。

Gemini 3 Pro 提供的思考过程,已经被它总结过了

想要看到原始的思考过程,可以去使用开源的推理模型。另外,我也遇到过有时闭源模型或是其系统会出 BUG,泄露出原始的思考过程:

Gemini 3 Pro 有时会泄露其复杂的思考过程

2025 年:Coding Agent 改变了编程

2025 年,此时的 LLM 可以对话,能够调用工具,还学会了思考。

假如我们给 LLM 一些特定的工具,让它能操作用户的电脑(搜索/浏览/修改文件、执行命令等),会发生什么呢?这一年,集齐了各种能力的 Coding Agent 开始遍地开花。

现在,我只需要安装任意的 Coding Agent(如 Cursor、Windsurf、Antigravity 等),然后在 IDE 里打开项目文件,告诉 LLM 我想做什么,它就会自己查找相关的代码、调用搜索引擎工具去查询文档、生成代码、修改文件、执行命令测试、分析报错、修复错误、完善代码、修改文档。

我在 Antigravity 向 Claude 提了个需求,它很快就写好了

于是,我喝着咖啡、躺在椅子上,惬意地看着 AI 自动为我写代码、Debug。当 AI 完成一件事后,我只需要批准一下它修改的代码(甚至可以设置成自动批准),进行「验收」,然后提出下一个需求。

我发现,我更愿意去尝试做一些以前不敢做的事情了。当构思新功能时,我可以先让 Code Agent 花几分钟实际写出来试试,如果不好用,点击 Reject 就行。在接触新编程语言时,也不必像以前那样频繁的查文档、寻找最佳实践,AI 可以根据我的要求直接写出代码,不懂还能直接问。

这也带来了一种新的开发方式:氛围编程(Vibe Coding)。既然 AI 能理解代码,能完成需求,那为什么人类还需要学习编程呢?不妨直接告诉 AI 需求,人类只负责试用,试用不满意就撤销,满意就提下一个需求。周而复始,人类一行代码都不用懂了!What could possibly go wrong?

AI:既然鉴权会出错,那就先删除鉴权吧!(Source)

但毋庸置疑,Coding Agent 显著提高了程序开发的效率。这也不禁让人感慨,程序员已从代码搬运工变成了代码主理人

未来

在未来,AI 会替代程序员吗?

这并不是一个非黑即白的问题:AI 会替代程序员,因为开发效率变高了,需要的人就少了;但 AI 不会完全替代程序员,因为 LLM 是一个「随机」的文本生成器,即使通过思考和工具,能让它自我纠正,它依然会常常犯不易看出的错误。这就需要懂架构、懂代码的程序员去引导并纠正它。

但可以确定的是,AI 编程让人类有了更多偷懒的方法,而人类本性是倾向于偷懒的。对于大项目而言,如果人类在使用 AI 编程时偷懒不检查,偶尔几次或许还好,但长期累积的各种错误一定会让项目开始失控。

在我看来,2025 年是软件质量急剧下降的一年。三大云厂商宕机了至少各一次,更别说 BUG 漫天飞舞的 Windows 11 了。就连过去高速稳定的 Chrome 也出现了各种大大小小的 BUG。

迷一样的 Windows 11 网络登录界面布局

不知十年后,AI 编程是否仍基于 LLM?Windows 是否仍在不断出错?


Coxxs

本文(https://dev.moe/3265)由 Coxxs 原创,禁止转载。

这些年的 AI 编程最先出现在Coxxs

]]>
https://dev.moe/3265/feed 2 3265
解决 Intel Wi-Fi 网卡串流游戏卡顿(关闭后台扫描) https://dev.moe/3178 https://dev.moe/3178#comments Thu, 17 Jul 2025 16:46:32 +0000 https://dev.moe/?p=3178 最近在使用 Surface Pro 8 使用 Moonlight + Sunshine 游戏串流时(PC 有线继续阅读"解决 Intel Wi-Fi 网卡串流游戏卡顿(关闭后台扫描)"

解决 Intel Wi-Fi 网卡串流游戏卡顿(关闭后台扫描)最先出现在Coxxs

]]>
最近在使用 Surface Pro 8 使用 Moonlight + Sunshine 游戏串流时(PC 有线连接路由器、Surface 使用 Wi-Fi),即使 Wi-Fi 信号强度满格,声音也会时常出现爆音,同时画面也会卡顿几秒。打开 PingPlotter 在后台进行网络测试,发现每隔 10 分钟,延迟就会升高几秒,造成 Moonlight 爆音及卡顿。

一番排查后,锁定元凶:Intel Wi-Fi 网卡的后台扫描(Global BG Scan)功能。这个功能原本是为了让网卡定期扫描周围的 Wi-Fi 信号,以优化连接或切换到更强的接入点(AP)。但在串流游戏这种对延迟和稳定性要求极高的场景下,后台扫描会让网络受到干扰,导致画面和声音卡顿。

在老版本的 Intel Wi-Fi 驱动中,解决这个问题很简单——直接在设备管理器的网卡属性中,找到“Global BG Scan blocking”选项,设置为“Always”或“On Good RSSI”,就能禁止或限制后台扫描,解决每隔 10 分钟的问题。然而,Intel 的天才工程师认为他们改进后的扫描逻辑并不会对用户造成干扰,因此直接把这个选项删了。

这个「用户不需要」的选项在大量用户抱怨了三年后,依旧没有恢复。

解决:恢复隐藏的后台扫描设置

好在被删除的只是设置 UI,驱动内的逻辑并没有被删除。一番研究之后,我找出了恢复该设置的方法。

1. 打开注册表编辑器(Win + R,输入 regedit),导航到以下路径:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}

这里会看到一堆编号文件夹,比如 0001、0002、0003 等等。挨个点开,在右侧找到一个名为 AdapterModel 的键,值是你 Wi-Fi 网卡的型号(比如我的是 Intel(R) Wi-Fi 6 AX201 160MHz)。记下你的 Intel 无线网卡对应的目录编号(比如我的无线网卡在 0002 目录)。

2. 新建一个文本文件,命名为 wifi.reg,然后将以下内容粘贴进去。注意:把下面代码中的 0002 替换成你自己的无线网卡对应的目录编号。

Windows Registry Editor Version 5.00

; 请把下一行的 0002 替换成你自己的无线网卡的目录
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0002\Ndi\Params\BgScanGlobalBlocking]
"ParamDesc"="Global BG Scan blocking"
"Type"="enum"
"Default"="0"

; 请把下一行的 0002 替换成你自己的无线网卡的目录
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0002\Ndi\Params\BgScanGlobalBlocking\enum]
"0"="Never"
"1"="On Good RSSI"
"2"="Always"

3. 保存后,双击这个 wifi.reg 文件,确认导入注册表。

4. 导入注册表后,打开设备管理器(Win + X,选择“设备管理器”),找到你的 Wi-Fi 网卡(比如 Intel(R) Wi-Fi 6 AX201 160MHz),右键点击“属性”,切换到“高级”选项卡。
现在你会发现,“Global BG Scan blocking”选项出现了!它有三个选项:

  • Never:从不限制后台扫描(默认,会导致每隔 10 分钟卡顿)。
  • On Good RSSI:当信号强度良好时,禁止后台扫描。
  • Always:始终禁止后台扫描(推荐,但可能影响 Wifi 网络的漫游,即就算信号很弱,网卡也不会切换到附近另一个信号较强的 AP)。

再次测试

我设置为 On Good RSSI 后,使用 PingPlotter 再次测试,可以发现在最新驱动下,卡顿消失了(中间红色的丢包是我在重连网络)。

Coxxs

本文(https://dev.moe/3178)由 Coxxs 原创,转载请注明原文链接。

解决 Intel Wi-Fi 网卡串流游戏卡顿(关闭后台扫描)最先出现在Coxxs

]]>
https://dev.moe/3178/feed 3 3178
Switch 2 鼠标模式输入延迟测试 https://dev.moe/3153 https://dev.moe/3153#respond Sat, 07 Jun 2025 21:08:32 +0000 https://dev.moe/?p=3153 心心念念的 Nintendo Switch 2 终于到手了。 Switch 2 新增了鼠标模式,只需把 Joy继续阅读"Switch 2 鼠标模式输入延迟测试"

Switch 2 鼠标模式输入延迟测试最先出现在Coxxs

]]>
心心念念的 Nintendo Switch 2 终于到手了。

Switch 2 新增了鼠标模式,只需把 Joy-Con 2 像鼠标一样放在桌面上握持,一个光标就会显示在屏幕上,就像前年 Lenovo 发布的 Legion Go 一样。然而,我对 Switch 2 这个鼠标模式的第一印象就是——卡!非常卡!比我输入延迟已经很高的蓝牙鼠标还要卡。

为了证明这一点,我用 OnePlus 13 的 480fps 慢动作摄像头对 Joy-Con 2 和我的 Logitech MX Anywhere 3 做了个简单的测试。我测试的是鼠标从“开始移动”到屏幕画面“产生变化”的帧数。在更专业的测试中,其实还应该测试鼠标开始移动“后”的输入延迟,但因为测试环境较为简陋,只能作罢。

测试结果如下:

测试方法:将鼠标放在桌面上,先轻推一下唤醒它(虽然感觉并不需要),然后再用力推第二次。实际计算的是从鼠标第二次开始移动,到画面产生变化(光标开始移动)之间慢动作摄像头下的帧的数目。
备注:
1. 在 Home Screen 下,Joy-Con 2 (L) 是直接插在主机上的,只有 Joy-Con 2 (R) 被取下;而在 Welcome Tour 内,两个 Joy-Con 2 都被取下。
2. 在 Switch 2 的测试次数 1、2 中,Joy-Con 2 未安装腕带(Joy-Con 2 straps),而在测试次数 3、4 中,则安装了腕带。看上去腕带的安装与否并不会对输入延迟有较大影响。

可以看出,Joy-Con 2 的鼠标模式输入延迟比我的非游戏蓝牙鼠标高了大约 1.7x 左右,在射击游戏里几乎是不可用的状态。要是用鼠标模式在 Switch 2 上玩非独占的 FPS,那结果必然是被 PC 玩家狂虐。

Coxxs

本文(https://dev.moe/3153)由 Coxxs 原创,转载请注明原文链接。

Switch 2 鼠标模式输入延迟测试最先出现在Coxxs

]]>
https://dev.moe/3153/feed 0 3153
如何本地激活 Synology Active Backup for Business 等套件 https://dev.moe/3120 https://dev.moe/3120#comments Thu, 01 May 2025 10:24:44 +0000 https://dev.moe/?p=3120 Synology(群晖)DSM 的 Synology Active Backup for Busin继续阅读"如何本地激活 Synology Active Backup for Business 等套件"

如何本地激活 Synology Active Backup for Business 等套件最先出现在Coxxs

]]>
Synology(群晖)DSM 的 Synology Active Backup for Business 套件是一个很不错的备份方案,但是首次安装或是重装该套件后,需要使用 Synology 账户激活才能使用。

Active Backup for Business 很不错,但首次使用需要登录账户联网激活

我并不喜欢这种需要联网激活才能使用的本地软件 —— 如果某天服务器故障或下线,亦或是本地网络发生了故障,我又正好重装了该软件,就会被这个激活界面阻挡,成为正版受害者。

网上流传了不少本地激活这类套件的方法,但都比较复杂,因此花时间研究了下,写了一个简单且通用的激活方案,以备不时之需。

请注意,使用本方法本地激活可能会影响您的产品支持和服务。尤其是在企业环境下,建议使用正常方式联网激活,以确保正常享受支持和服务。

教程

本方法支持本地激活 Synology Active Backup for Business、Synology AI Console 等套件。

  1. 打开套件,进入激活页面/弹窗
  2. 打开浏览器的开发者工具(F12)-> Console,粘贴以下代码并回车应用
    • 请留在群晖 DSM(地址栏如 192.168.X.X)的页面上操作。不要进入官网(地址栏如 activation.synology.com)操作。
const oldWindowOpen = window.open
window.open = (...args) => {
    const [url] = args
    if (url?.startsWith('https://activation.synology.com/package')) {
        const u = new URL(url)

        setTimeout(() => {
            window.dispatchEvent(new MessageEvent('message', {
                data: {
                    source: u.searchParams.get('package_name'),
                    package_name: u.searchParams.get('package_name'),
                    request_id: u.searchParams.get('request_id')
                },
                origin: "https://activation.synology.com"
            }))
        }, 100)

        setTimeout(() => {
            alert('Activation finished, please refresh the page.')
            window.open = oldWindowOpen
        }, 1000)
    } else {
        alert('Activation failed.')
    }
}
  1. 点击激活按钮,激活完成。

Coxxs

本文(https://dev.moe/3120)由 Coxxs 原创,转载请注明原文链接。

如何本地激活 Synology Active Backup for Business 等套件最先出现在Coxxs

]]>
https://dev.moe/3120/feed 3 3120
Ultra 7 265K 频繁卡顿及解决 https://dev.moe/2943 https://dev.moe/2943#comments Wed, 19 Mar 2025 20:58:00 +0000 https://dev.moe/?p=2943 可能是因为 Intel 发现自己的新产品卖不出去了,Core Ultra 200S 系列的 CPU 开始了大幅继续阅读"Ultra 7 265K 频繁卡顿及解决"

Ultra 7 265K 频繁卡顿及解决最先出现在Coxxs

]]>
可能是因为 Intel 发现自己的新产品卖不出去了,Core Ultra 200S 系列的 CPU 开始了大幅降价。我就趁势新装了一台 Intel Core Ultra 7 265K 的电脑,显卡就暂时先使用核芯显卡。虽然 Core Ultra 200S 的游戏性能(主要是网游)不行,但作为有长期开机需求、且不打网游的 4K 显示器用户,265K 还是很合适的 —— 它在待机时能效比很高,使用风冷十分安静。

主板是 MSI PRO Z890-A,只提供了一个 HDMI 接口作为视频输出。虽然这张主板的 HDMI 支持 4K 120HZ,但由于带宽限制,色彩格式会从 RGB 降级为 YUV420。体现在观感上就是小文字周围会出现彩边。不过,这张主板有 2 × Thunderbolt 4 接口,直接使用 Thunderbolt / USB 4 线连接到显示器,就可以使用 DP 协议输出 4K 144HZ 的 RGB 画面了(有 DSC 压缩,但肉眼看不出区别)。

Ultra 7 265K 的卡顿及解决

享受了一天之后就发现了不对劲,这台电脑每隔几分钟就会卡死几秒,在游戏里则体现为显卡负载突然降低,然后恢复。无论是 HDMI 还是 DP(USB-C)都有这个问题。这种异常卡顿不应该是 AMD 的专利吗!

研究了好一会,发现是核显驱动的问题,更新驱动重启后,问题就消失了。

然而,第二天,它又开始卡了。是的,Windows 的自动更新把我装的驱动降级了,把那版有问题的驱动又安装回来了。

据说 AMD Radeon RX 9070 系列显卡的「掉驱动」也是因为被 Windows Update 降级驱动造成的。

Microsoft 啥都好,就是有两点不行 —— 做硬件和写软件。嗯?

使用组策略禁止 WIndows 自动更新安装驱动即可:

  1. 打开组策略(Win+R -> 输入 gpedit.msc)
  2. Computer Settings -> Administrative Templates -> Windows Components -> Windows Update -> Manage updates offered from Windows Update
  3. 选择 Do not include drivers with Windows Updates,并设置为 Enabled

如果无法打开组策略,也可以更改注册表并重启,达到相同的效果:

  1. Win + X -> Terminal(管理员)
  2. 粘贴并回车:Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" -Name "ExcludeWUDriversInQualityUpdate" -Value 1 -Type DWord

需要注意,Windows 的驱动自动更新也会负责驱动的自动安装。如果之后发现插入新设备未自动安装驱动,可以暂时撤销此改动。

核芯显卡视频编解码器性能问题及解决

2025-12-16 更新:MSI 官方已发布修复本问题的新版 BIOS(本链接为 MSI PRO Z890-A 主板,请查找自己的主板支持页面下载)。

Intel 核芯显卡的视频编解码器一直处于领先地位,Ultra 200S 系列还加入了 AV1 编码支持。在玩游戏时若使用核芯显卡 QSV 硬件编码器推流,可以在几乎不影响游戏性能的前提下,实现高质量的推流。

但诡异的是,在这台电脑上,即使在 OBS 中使用 Intel QSV 的最快预设进行 H.264 / AV1 编码,依然会提示编码过载。更离谱的是,使用硬件解码在网页中播放 4K 视频时,画面直接掉帧一半,同时任务管理器显示 GPU 占用 100%。

查阅网上资料后,发现遇到类似问题的人似乎不多(也许是用 Ultra 200S 系列的人就不多吧!)。最后在一篇帖子中看到有人提到,可能与内存超频有关。(案例1 案例2 案例3

但我这边只是开启了 XMP(5600 → 6400),CPU 并没有超频,难道这样也会出问题?关掉 XMP 后,重启两次,编解码器果然就恢复正常了。此时在 OBS 中使用最高质量预设进行 AV1 编码,也能流畅推流 4K 画面。

上面遇到问题的案例的似乎全部都是 MSI 主板,也不知道是谁的锅了…


优雅地禁用 Windows 自动更新

此外,这里可以顺手把 Windows 臭名昭著的自动更新也给顺手停用了,无需使用第三方软件:

  1. 打开组策略(Win+R -> 输入 gpedit.msc)
  2. Computer Settings -> Administrative Templates -> Windows Components -> Windows Update -> Manage end user experience
  3. 选择 Configure Automatic Updates,并设置为 Disabled
    • 注意是 Disabled,设置为其他选项并不一定会遵循你的设置

以后电脑就不会在开机的时候自动下载更新并重启了。这么做不会影响手动更新,需要时自己进系统设置查找更新,并重启即可。

Windows 的更新其实很像疫苗 —— 即使你不及时更新,也会得到一定程度的保护。因为 Microsoft 对大多数用户强推更新,降低了黑客利用漏洞的动力。


Windows 11 专业版?

另外,只有 Windows 专业版及以上的版本可以打开组策略编辑器。家庭版可以在设置里输入专业版的 Generic Key 转换为专业版:VK7JG-NPHTM-C97JM-9MPGT-3V66T。

需要注意,这个 Generic Key 是通用 Key,并非盗版 Key。使用 Generic Key 并不会自动激活你的系统,你仍需要付费购买 Windows 专业版。

我不会在这里推荐使用数字权利激活脚本永久激活你的系统及硬件。因为对于企业用户,这存在法律风险;对于个人用户,这可能违反 Windows 的用户协议。

Coxxs

Ultra 7 265K 频繁卡顿及解决最先出现在Coxxs

]]>
https://dev.moe/2943/feed 1 2943
Android 15 启用侧载应用的无障碍功能 https://dev.moe/2918 https://dev.moe/2918#comments Sun, 12 Jan 2025 20:31:29 +0000 https://dev.moe/?p=2918 最近到手了一部新机,装了个 Smart AutoClicker 在挂机单机游戏时自动点击跳过按钮。然而在无障碍继续阅读"Android 15 启用侧载应用的无障碍功能"

Android 15 启用侧载应用的无障碍功能最先出现在Coxxs

]]>
最近到手了一部新机,装了个 Smart AutoClicker 在挂机单机游戏时自动点击跳过按钮。然而在无障碍页面,却无法授予点击器权限。

即使点击了启用,开关也会立刻自动关闭
原生 Android 则提示“受限制的设置”

尝试用 adb 命令(adb shell settings put secure enabled_accessibility_services ... )竟也无法启用。打开 logcat 后,发现了这么一条报错:

Skipping enabling service disallowed by device admin policy: ComponentInfo{com.buzbuz.smartautoclicker/com.buzbuz.smartautoclicker.SmartAutoClickerService}...

看了一下Android 代码库,才发现原来是 Android 引入的新安全机制。乘此机会,整理几种解决方案给有需要的朋友。

方法一:从 Google Play 重新安装

是的,Google 只限制了侧载应用的无障碍权限的开启。从 Google Play(或其他应用商店)安装就没有这个问题了。全文完。


等等,那如果这个应用并未在 Google Play 上架呢?

方法二:在应用设置里“允许受限制的设置”

且慢!无障碍功能权限很高。为侧载应用启用无障碍功能前,请务必确认应用的安全性。

如果你的系统没有被厂商魔改过度,那么在对应应用的系统设置里可以关掉这个限制。

具体位置如图:

应用设置 -> 右上角三个点 -> 允许受限制的设置

方法三:用第三方应用安装器重新安装

然而,我用的 OxygenOS 15 已经被魔改得连菜单都没有了。这时候可以曲线救国,利用 SAI 应用安装器来重装应用。因为是由应用安装的应用,所以会被判定为非侧载。此时应用的无障碍设置就能正常启用了。

可以继续挂机了!

Android 的安全功能越来越多了。虽然明面上说是安全,实际上也是 Google 为了掌握 Android 生态,让应用开发者与用户尽可能离不开 Google Play。

像本文提到的无障碍功能限制尚可以绕过,而 Google 最近推的 Google Play Automatic Protection(又名 pairipcore)则更恶心,有机会再聊吧。(然而并不会,我太菜了!)

Coxxs

Android 15 启用侧载应用的无障碍功能最先出现在Coxxs

]]>
https://dev.moe/2918/feed 2 2918
Synology DS918+ 续命小记 https://dev.moe/2892 https://dev.moe/2892#respond Mon, 23 Sep 2024 22:05:27 +0000 https://dev.moe/?p=2892 一年前,我运行了多年的 Synology(群晖)DS918+ NAS 突然掉线,查看机器竟然在不断重启。一开始继续阅读"Synology DS918+ 续命小记"

Synology DS918+ 续命小记最先出现在Coxxs

]]>
一年前,我运行了多年的 Synology(群晖)DS918+ NAS 突然掉线,查看机器竟然在不断重启。一开始以为是 NAS 主机的问题,但在取下所有硬盘后,NAS 却又能正常启动;一旦插入硬盘,机器又会再次开始不断重启。既然负载一高就重启,有可能是电源问题。网上一搜,果然 DS918+ 原配电源适配器损坏是通病了。

电源选购

众所周知,硬盘对电源的要求很高。如果不慎用了杂牌电源或是假货,电源坏了是小事,哪天把硬盘烧了就得不偿失了。

  1. 首先要回避的就是某宝上搜“918+ 电源”搜出来的高销量电源。杂牌就不提了,即使是所谓大品牌原装正品,也有可能是假货。(厂商官方旗舰店除外)
如某宝的这款所谓“原装正品”全汉电源,不仅是已经被淘汰的旧型号,标签相比网图还有“印刷错误”
  1. 相对稳妥的选择是购买官方电源适配器,不过 $109(某宝 ¥549)的售价确实有些离谱了。而且 100W 的适配器对于跑了几个 18TB+ 企业盘的 NAS 可能并不太够用,但至少不会损坏硬盘。
  2. 也可以选择有官方旗舰店的大牌电源,如航嘉(Huntkey) HKA150120A0-7C 或明纬(MEANWELL)GST160A12-R7B。需要注意明纬电源默认的针脚定义与 DS918+ 是不同的,直接插上会短路无法使用,需要重新定义或购买针脚转换线。

最终我选择了航嘉的电源,直接插上 DS918+ 即可,使用一年后暂未遇到任何问题。

全卷加密

如硬盘在保内损坏,将储存了大量个人数据的硬盘发给售后更换时,会有数据泄露风险。因此,提前做好数据加密很有必要。

一直以来 Synology 的 DiskStation Manager(DSM)系统都支持共享文件夹加密。但共享文件夹加密会有文件名 143 字符数的长度限制,性能也相对较低。

自 DSM 7.2 起,群晖支持了卷加密(Volume Encryption)。然而为了卖新品,DS918+ 并不支持卷加密。

要开启卷加密也很简单,修改 /etc.defaults/synoinfo.conf 文件即可。可以在 DSM 后台启用 SSH 后,登录 SSH 执行以下命令修改:

免责声明:本方法并不受官方支持,不保证未来可用,请务必备份数据及密钥,操作风险自负。

sudo synosetkeyvalue /etc.defaults/synoinfo.conf support_volume_encryption yes
sudo synosetkeyvalue /etc.defaults/synoinfo.conf support_kmip yes

需要注意,系统更新后卷加密支持可能会因配置重置被关闭,DSM 后台会报储存空间错误。此时重新执行命令并重启即可。

Coxxs

Synology DS918+ 续命小记最先出现在Coxxs

]]>
https://dev.moe/2892/feed 0 2892
在 Linux 与 Windows 11 下启用 BBR v2 https://dev.moe/2829 https://dev.moe/2829#comments Wed, 26 Apr 2023 14:38:00 +0000 https://dev.moe/?p=2829 BBR 是 Google 开发的 TCP 拥塞控制算法。它改善了传统拥塞控制算法(如 CUBIC)一丢包就降速继续阅读"在 Linux 与 Windows 11 下启用 BBR v2"

在 Linux 与 Windows 11 下启用 BBR v2最先出现在Coxxs

]]>
BBR 是 Google 开发的 TCP 拥塞控制算法。它改善了传统拥塞控制算法(如 CUBIC)一丢包就降速的缺点,让带宽利用率在高丢包环境下大幅提升。

需要注意,拥塞控制算法控制的是发包速度。如 Google 服务器开启了 BBR,其上传速度将尽可能占满用户带宽;在用户的角度看来,则体验到了更快的下载速度。

众所周知…

许多朋友会在自己的 Linux 服务器上,用几句命令轻松开启 BBR:

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

于是,当他们从服务器下载文件时,服务器就会尽可能用满带宽。可当他们上传文件时,速度却依旧很慢。这是因为他们上传所用的系统,仍在使用传统的拥塞控制算法。

如果用户使用的是 Linux 系统,用同样的步骤开启 BBR 即可。而对于 Windows 系统,如果是 Windows 11 22H2 以上版本,Microsoft 也添加了 BBRv2 的支持。

在 Windows 11 下启用 BBR / BBR v2

打开 PowerShell(管理员),先查看一下当前的拥塞控制算法:

NetTCPSetting | Select SettingName, CongestionProvider

然后开启 BBRv2:

netsh int tcp set supplemental template=Internet congestionprovider=BBR2
netsh int tcp set supplemental template=InternetCustom congestionprovider=BBR2
netsh int tcp set supplemental template=Datacenter congestionprovider=BBR2
netsh int tcp set supplemental template=DatacenterCustom congestionprovider=BBR2
netsh int tcp set supplemental template=Compat congestionprovider=BBR2

此处也可以将 BBR2 替换为 BBR(BBR v1),有兴趣的朋友可以测试比较一下效果。

在 Windows 11 23H2 / 24H2 及更新版本下,启用 BBR v2 可能会造成本地 TCP 连接无法使用(如导致 adb 卡住无法连接、Steam 无法使用等),我们还需要使用以下命令修复本地 TCP 连接。来源MSDN

netsh int ipv6 set global loopbacklargemtu=disable
netsh int ipv4 set global loopbacklargemtu=disable

再次输入一开始的命令,确认已成功开启。

启用后…

无需重启系统,单线程上传速度从 10Mbps 提升到了 30Mbps。推流及访问网页等场景的体验也获得了提升。

如果在启用 BBR2 后遇到了网络相关的问题,也可以用以下命令还原初始设置。

netsh int tcp set supplemental template=Internet congestionprovider=CUBIC
netsh int tcp set supplemental template=InternetCustom congestionprovider=CUBIC
netsh int tcp set supplemental template=Datacenter congestionprovider=CUBIC
netsh int tcp set supplemental template=DatacenterCustom congestionprovider=CUBIC
netsh int tcp set supplemental template=Compat congestionprovider=NewReno

netsh int ipv6 set global loopbacklargemtu=enable
netsh int ipv4 set global loopbacklargemtu=enable

还原后无需重启。可以在下次需要加速上传时再临时开启 BBR。

Coxxs

在 Linux 与 Windows 11 下启用 BBR v2最先出现在Coxxs

]]>
https://dev.moe/2829/feed 10 2829
ESXi 7.0 + R8168 / R8169 安装笔记 https://dev.moe/2794 https://dev.moe/2794#comments Thu, 18 Aug 2022 23:10:00 +0000 https://dev.moe/?p=2794 在一台不受支持的设备上安装 ESXi 是一件很考验运气的事。运气不好的我就发现电脑自带的网卡是 Realtek继续阅读"ESXi 7.0 + R8168 / R8169 安装笔记"

ESXi 7.0 + R8168 / R8169 安装笔记最先出现在Coxxs

]]>
在一台不受支持的设备上安装 ESXi 是一件很考验运气的事。运气不好的我就发现电脑自带的网卡是 Realtek R8168 —— 一张 ESXi 不再支持的网卡。

在 ESXi 6.x 时代,我们可以添加 net55-r8168 驱动让 ESXi 支持这张网卡,但 ESXi 7.x 禁用所有依赖 Linux 的驱动后,这个方法就行不通了。

USB Network Native Driver for ESXi

USB NIC

幸运的是,ESXi 现在提供了几款热门 USB 网卡的原生驱动(ASIX88179, RTL8152/RTL8153, AQC111U)。我们可以购买一个支持的 USB NIC 适配器,然后制作包含 VMKUSB-NIC-FLING (Backup) 驱动的镜像来安装 ESXi。

安装流程可以参考 Tips for using USB Network Adapters with VMware ESXi

安装后,如果每次开机后都要重新勾选网卡才能联网,则需要参考这里,添加开机脚本,使系统自动识别 USB 网卡:

# /etc/rc.local.d/local.sh

vusb0_status=$(esxcli network nic get -n vusb0 | grep 'Link Status' | awk '{print $NF}')
count=0
while [[ $count -lt 20 && "${vusb0_status}" != "Up" ]]
do
    sleep 10
    count=$(( $count + 1 ))
    vusb0_status=$(esxcli network nic get -n vusb0 | grep 'Link Status' | awk '{print $NF}')
done

esxcfg-vswitch -R

R8168 Passthrough

为了不浪费原先 R8168 网卡的网口,同时提升性能(USB 网卡会影响性能),我们可以将 R8168 网卡直通(Passthrough)到 ESXi 中的某一台虚拟机中继续使用。

然而实际配置好后,这张破网卡又开始出问题了——每隔几分钟就会断一次网。此时在虚拟机的 /var/log/kern.log 可以看到如下错误:

ubuntu kernel: [ 2581.050902] ------------[ cut here ]------------
ubuntu kernel: [ 2581.050905] NETDEV WATCHDOG: ens100 (r8169): transmit queue 0 timed out
ubuntu kernel: [ 2581.050921] WARNING: CPU: 0 PID: 0 at net/sched/sch_generic.c:472 dev_watchdog+0x270/0x280

搜索后发现可能是 Linux 自带的驱动有问题。我们可以安装 Realtek 提供的驱动尝试解决。在 Ubuntu 下使用 apt 命令即可直接安装:

apt install r8168-dkms

重启后问题解决。

Coxxs

ESXi 7.0 + R8168 / R8169 安装笔记最先出现在Coxxs

]]>
https://dev.moe/2794/feed 1 2794
小米平板 5 Pro 刷入 GSI Android 教程 https://dev.moe/2716 https://dev.moe/2716#comments Sat, 11 Jun 2022 06:08:22 +0000 https://dev.moe/?p=2716 到手了一块小米平板 5 Pro,又一次刷新了我对小米的认知。开个开发者模式要倒数 10 秒看警告;装个 apk继续阅读"小米平板 5 Pro 刷入 GSI Android 教程"

小米平板 5 Pro 刷入 GSI Android 教程最先出现在Coxxs

]]>
到手了一块小米平板 5 Pro,又一次刷新了我对小米的认知。开个开发者模式要倒数 10 秒看警告;装个 apk 也要倒数 10 秒看警告;解锁 Bootloader 又是登录账号,又是联网绑定,还要等 168 个小时,把用户当贼一样防。

听我说谢谢你,因为有你,温暖了四季…

更难受的是,小米平板 5 Pro 并未在全球发售,唯一支持的 MIUI 国行系统自带全链路反诈。隔壁低配的小米平板 5 反倒是又有国际版 MIUI,又有 Android 13 DP(开发者预览)。

不过,小米平板 5 系列通过了 Android 认证。这意味着即使没人给它适配第三方系统,它也一定能跑 Google 发布的 GSI(Generic System Images)原生系统。 而又有许多适配 GSI 的第三方系统,这就解锁了无限可能。

2024 年更新:目前,已有多位开发者为小米平板 5 Pro 适配了 AOSP 系统,建议直接使用。本文内容仅留作参考。

如果有一定的刷机经验,刷写 GSI 非常简单,本文也部分适用于其他 Android 设备。

免责声明:本文为经验总结,操作前请先备份,操作风险自负。

解锁 Bootloader

下载 SDK Platform Tools(包括 adb、fastboot 等实用程序)

解锁程序,解锁时会清除所有数据。

  1. 关机时按住 音量减 + 电源键 进入 Bootloader。
  2. 连接电脑,按解锁程序提示操作即可。如果程序提示要等 7 天,则 7 天后再次尝试。

接下来在刷入 GSI 前,可以先刷入 Magisk,便于之后的操作。

安装 Magisk

小米平板 5 Pro 目前没有能用的 Recovery,这里通过手动补丁的方式安装。

  1. 下载与平板系统相同版本的线刷包,提取其中的 boot.img,复制进平板。
  2. 进入系统安装 Magisk.apk,用 Magisk Manager 给 boot.img 手动补丁(Install -> Select and Patch a File)。
  3. 将获得的 magisk_patched-XXX.img 传回电脑。
  4. 进入 Bootloader,连接电脑,输入 fastboot boot magisk_patched-XXX.img 临时进入支持 Magisk 的系统。
    • 如果未成功进入,可以重新进入 Bootloader 再试一次
  5. 自动开机后,在 Magisk Manager 中正式安装 Magisk(Install -> Direct Install)。

备份 Persist 分区(可选)

Persist 分区中储存了诸如指纹模块等的校准信息,这些信息每部设备都是不同的,丢失无法恢复。建议在获取 root 权限后备份一份,以备不时之需。

  1. 进入 MIUI 系统,开启 USB 调试。
  2. 连接电脑,输入以下命令。
adb shell
su # 获取 root 权限,请在手机上确认
dd if=/dev/block/bootdevice/by-name/persist of=/sdcard/persist.img
# 此时按两次 Ctrl + D,退出 adb shell
adb pull /sdcard/persist.img

将获得的 persist.img (大小约 64 MB)长期保存,避免丢失(本教程不会用到)。

刷入 GSI 镜像

GSI 系统列表
vbmeta.img

小米平板 5 Pro 是 AB 分区ARM64。选择一个喜欢的 ROM 即可。我测试过可用的有:

  • Pixel Experience Plus
    • 带 Plus 的版本有一些额外功能,如网速显示
    • 基于 Pixel 手机系统,颜值较高,但平板上用会有一些布局错位
  • Lineage
    • 测试无法通过 SafetyNet
    • 对平板适配较好
  • AOSP (phhusson)
    • 上面的 ROM 都是基于 phhusson 大神的这个项目制作的
  • Android 13 GSI
    • 蓝牙无法使用(Beta 3)
  1. 下载解压 ROM,获得 system.img
  2. 进入 Bootloader,连接电脑。
  3. fastboot flash --disable-verity --disable-verification vbmeta vbmeta.img
    • 此步骤用于停用 Verified Boot 分区验证,只需执行一次
    • 如果已经安装了 Magisk,可以跳过本步骤,但未来要一直安装着 Magisk,否则 system 分区通不过校验可能会被禁用,需要重刷
  4. fastboot reboot fastboot
    • 此步骤用于进入 fastbootd,进入后屏幕上应显示 fastbootd
  5. fastboot flash system system.img,等待刷写完毕
  6. fastboot reboot recovery,进入 Recovery 后,按提示操作清除数据并重启系统
    • 刷入不同类型 ROM 或版本降级时必须清除数据,否则无法进入系统

此时应该已成功进入系统。如果此前安装了 Magisk,新系统中会自动出现 Magisk 应用。

功能补丁

由于 GSI 镜像并非针对小米平板 5 开发,有一些细节问题需要修复。

修复启动器 / 任务栏

hide-tablet-taskbar(Magisk 模块)

PixelExperience 系统对平板的支持有些小问题(比如任务栏只显示一半)。写了个 Magisk 模块修复之。另外似乎还没有模块支持隐藏 Android 12.1 平板模式下的底部提示条,这里也顺便支持了隐藏。

本模块一并修复了 PixelExperience 13 下启动器崩溃的问题,可以从系统设置中找到 Magisk,安装本模块修复启动器。

开启 120 Hz

adb shell settings put system min_refresh_rate 120
adb shell settings put system peak_refresh_rate 120

如果设置里有 Phh Treble Settings 的话,也可以在里面直接改(Misc features -> Force FPS)。

修复音频

来源:https://forum.xda-developers.com/t/run-an-gsi-on-your-mi-pad-5.4352591/page-9#post-86447857

此外,PixelExperience 13 ROM 可启用 Settings -> Treble -> Misc -> Use System Wide BT HAL 并重启以修复蓝牙音频。

移除屏幕锐化

注意到屏幕会经常出现锐化的效果,看了下 MIUI 并不会有这种情况,费半天劲找到了引起问题的设置,写 Magisk 模块修复之。v2 版本还修复了播放视频时的锐化。

SafetyNet

SafetyNet 的修复根据不同 ROM 分成几种情况,这里简单分享下经验。

PixelExperience ROM 已经模拟了设备信息,只需在 Magisk DenyList 对 Play Services 隐藏即可。

Lineage OS 可能由于自带了 su,我没能成功通过 Basic integrity 测试(可能要自己修改 ROM 了)。

Android 13 GSI 需要 MagiskHidePropsConf + Universal SafetyNet Fix + Magisk DenyList,其中 MagiskHidePropsConf 设置成 MIUI 系统的 fingerprint,外加将 ro.build.version.security_patch 设置成 MIUI 系统对应版本的值(可以用 7z 打开线刷包的 system.img,在 system/build.props 里找到)。

Magisk DenyList 配置方法

  1. 打开 Magisk,设置里选择 Hide the Magisk app
  2. 打开 Magisk,设置里启用 Zygisk 及 Enforce DenyList
  3. 进入 Configure DenyList,找到 Google Play services,只需勾选 com.google.android.gmscom.google.android.gms.unstable 两项。
  4. 进入设置,清除 Google Play services 及 Google Play Store 的数据。

DRM

DRM 方面,Widevine 无需任何操作,神奇的保持在了 L1,修复 Safetynet 后即可直接观看 Disney+。

Netflix 可能多了一套验证,默认会是 L3,以下操作后可以恢复到 L1:

  1. 确保 SafetyNet 已通过
  2. 将 Netflix 添加到 DenyList 列表
  3. 用 Magisk 模块在 build.prop 添加一行 ro.netflix.bsp_rev=Q8250-19134-1
    • 该值仅适用于小米平板 5 Pro
    • Magisk 模块写法非常简单,可以参考上面的「移除屏幕锐化」模块
    • 修改 build.prop 后需要清除 Netflix 应用数据重新登录
    • 该修改已合并至上游,一段时间后的新版 ROM 可能已经自带了
    • 感谢几位朋友的帮助!

系统升级

由于小米平板 5 为 A/B 分区,之前刷机时只刷入了一个分区,另一个分区情况未知,直接升级有一定风险。

建议非必要不升级。升级前务必备份好所有数据,升级后有可能无法开机,需要清数据重刷。

如出现问题,可下载 MIUI 线刷包,使用 Mi Flash 线刷恢复至 MIUI 系统,再次刷入新版 GSI 系统。

  • 如刷机刚开始时出现错误,不要试图修改刷机脚本绕过。请检查机型是否正确、是否触发防回滚检测。移除脚本中的自检代码强行刷入将会变砖,无法自行恢复。
  • 恢复时不建议锁定 Bootloader(在 Mi Flash 底部选择)。
  • 目前(2022-06)如将基于 Android 12 的 MIUI 13 作为底包,后续刷入 GSI 时,会出现一些兼容性问题。如果可能的话,建议刷入基于 Android 11 的 MIUI 13 稳定版。

我最后使用的是 PixelExperience Plus,还是挺不错的,跑分能跑到正常水平,指纹也正常使用。蓝牙耳机在修复音频后可以正常使用(Android 13 Beta GSI 不兼容蓝牙)。因为 Pixel 还没发布平板,PE 自带的 Pixel Launcher 会有些 Bug,但原生 Android 又不是不能换桌面 :P。

一些小问题是,小米键盘和手写笔会无法使用(没买这些),不支持双击唤醒(录入指纹后可用指纹快速唤醒),快充无法使用(被迫延长电池寿命),相机偶尔会假死,MIUI 的各种平板优化自然也没了。

怕被叫成二次元,在 Pixel 壁纸库里换了张艺术壁纸!

本文撰写过程中参考了以下内容,在此表示感谢:

本文(https://dev.moe/2716)由 Coxxs 原创,转载请注明原文链接。

小米平板 5 Pro 刷入 GSI Android 教程最先出现在Coxxs

]]>
https://dev.moe/2716/feed 13 2716