我不是开了wss吗,怎么还让我开

使用问题 · 74 次浏览
18um 创建于 25天3小时前


回复内容
18um 25天0小时前
#1

让AI写了份报告

# Quicker Link 动作「需开启 WSS」问题排查报告


- 动作:**Quicker Link**(quicker2.0:连接 Android 手机与电脑上的 Quicker)

- 环境:Windows + Quicker 2.3.0.0(通道 slow),账号目录 `fd2c6c81…`,本机 `192.168.31.45`

- 排查时间:2026-10-05 08:5x – 09:1x

- 结论:**不是用户设置问题**。电脑端 WebSocket / WSS 均已开启且服务确实在跑 wss;是动作内部读取了"账号层"设置对象,而当前版本已把这两项设置改为"仅本机"存储,动作因此永远判定为"未开启"。


---


## 一、现象


运行 **Quicker Link** 动作时不出现配对二维码,而是:


1. 弹出提示:`请启用 WebSocket 和安全连接 WSS,点击“应用设置”后重新运行本动作。`

2. 自动打开「Quicker 设置 → HTTP / WebSocket 服务」页。


而设置页显示:`启用安全连接(HTTPS / WSS)` ✔、`启用 WebSocket 服务` ✔、验证码已填写、端口 668;运行状态 `HTTP: 已关闭 WebSocket: 已开启`,证书有效期至 2026-12-16。


## 二、电脑端实测(全部正常)


| 项目 | 实测结果 |

| --- | --- |

| 设置项 `websocket.enableSecure` | true |

| 设置项 `websocket.isEnabled` | true |

| 设置项 `localServer.allowRemote` | true |

| 设置项 `websocket.port` | 668 |

| 验证码 | 已设置(6 位) |

| 本机设置文件 `local-settings.json` | `useHttps=true`、`webSocket.enabled=true`、password 已存 |

| 端口 668 实测 | 仅接受 TLS;`https://192.168.31.45:668/` 正常握手(404),纯 HTTP 请求被断开 → 服务确实在跑 wss |

| 证书 | `CN=*.lan.quicker.cc`(Let's Encrypt 签发,链验证通过,Tls12,2026-12-16 到期) |

| DNS | `192-168-31-45.lan.quicker.cc` → `192.168.31.45`,可解析 |

| 监听 / 防火墙 | 监听 `::` 668(全网卡);Quicker 入站规则允许,当前网络为「专用」 |

| Quicker 日志 | 无任何 wss 相关报错 |


## 三、根因


动作内部是一段 C# 脚本(编译产物缓存:`…\script-cache-abi-2\normal\b1c05a72….dll`),其判定逻辑为:


```

GetSecureWebSocketErrorCode():

  IApplicationSettingsService.Settings2            // 账号层设置

    → UserSettings2.WebsocketServerSettings

       → IsEnabled && EnableSecure                 // 不满足 → 返回 "secure_websocket_required"

       → IsValidPassword(Password)                 // 不满足 → 返回 "invalid_connection_password"

```


在运行中的 Quicker 进程里读同一个对象,实测值:


```

LIVE  UserSettings2.WebsocketServerSettings :  IsEnabled=False  EnableSecure=True  Password=(空)  Port=668

FRESH new WebsocketServerSettings()          :  IsEnabled=False  EnableSecure=True  Password=(null)  Port=668

```


**两者完全一致**,说明该对象根本没有被当前版本的设置流程写入。


而设置页真正写入的是**本机层**(日志里 `Target=AccountLocalServerSettings`):


```

local-settings.json :  localServer.useHttps=true   localServer.webSocket.enabled=true   password=112112

```


设置页对「启用 WebSocket 服务」的说明也写着 **“仅保存在当前账号本机”**。


→ 动作读的是账号层 `UserSettings2.WebsocketServerSettings`,当前 Quicker 把「启用 WebSocket 服务 / 验证码」存到本机层,两层不再同步,动作永远看到 `IsEnabled=False`、`Password` 为空。


**补充验证(排除"没应用设置"的可能)**:通过设置接口把「启用 WebSocket 服务」关→开、并重设验证码(等价于点“应用设置”)后,该对象**仍为** `IsEnabled=False / Password 空`。所以重新应用设置、重启 Quicker 都不能解决。


## 四、临时解决方案(已验证有效)


在 Quicker 进程内解析同一服务,把账号层对象的两个字段补齐(**仅内存,重启失效**):


```csharp

IApplicationSettingsService.Settings2.WebsocketServerSettings.IsEnabled = true;

IApplicationSettingsService.Settings2.WebsocketServerSettings.Password  = <当前验证码>;

```


验证结果:


- `GetSecureWebSocketErrorCode()` 返回 **空**(判定通过)

- 重新运行动作:不再弹提示、不再跳设置页,出现 **“Quicker Link 配对”** 窗口(含二维码)


> 注意:重启 Quicker 后该内存补丁失效,需要重新执行一次。


## 五、建议的正式修复


(给动作作者 github.com/shuimowang/QuickerLink 和/或 Quicker 官方)


1. **动作**:改为读取“生效设置”,即本机层 `AccountLocalServerSettings`/合并后的服务设置,或使用官方推荐的新设置 API,不要依赖 `UserSettings2.WebsocketServerSettings`。

2. **动作**:判定放宽为“服务在运行且为 wss 即通过”,例如直接探测本机端口能否完成 wss 握手,而不是读对象。

3. **Quicker**:设置提交时同步/通知旧的 `Settings2` 对象(日志为 `[settings-v2] Committed … Notify=False`,可核查是否应 `Notify=True`),或在 2.x 保留兼容映射,避免社区动作集体失效。

4. **兜底**:动作内加一个“跳过环境检查”的开关,便于用户自查。


## 六、快速复现要点


- 触发:面板运行 **Quicker Link** → 弹提示 + 跳设置页,无二维码

- 判定错误码:`secure_websocket_required`(或 `invalid_connection_password`)

- 关键矛盾:设置页「运行状态」显示 **WebSocket 已开启**,但动作报未开启


困困君 24天23小时前
#2

更新动作,软件。软件通过github更新或者加qq群。

困困君 最后更新于 24天23小时前
回复主贴