Zotero Connector 在 Edge 里找不到桌面 Zotero(Linux / Zotero 9.0.6 / Edge 150)

文章目录

Zotero Connector 在 Edge 里找不到桌面 Zotero(Linux / Zotero 9.0.6 / Edge 150)

Edge 装了 Zotero Connector,桌面 Zotero 9.0.6 也开着。点保存按钮,图标变灰、提示「unable to communicate with Zotero」。这是一篇关于这个具体故障的排查笔记。

环境

项目 版本
操作系统 Ubuntu 24.04
Zotero 9.0.6(解压式安装在 ~/Zotero)
浏览器 Microsoft Edge 150
Zotero Connector v5.0.210(Edge 扩展 ID nmhdhpibnnopknkmonacoephklnflpho)

第一反应:按官方文档测一下

Zotero 官方 KB 给的诊断入口是这一句:访问 http://127.0.0.1:23119/connector/ping,看到「Zotero is running」就说明桌面应用是好的,问题在浏览器那边;看不到就说明桌面应用没就绪。

我在 Edge 地址栏打开这个 URL:

text 复制代码
curl: (7) Failed to connect to 127.0.0.1 port 23119

桌面 Zotero 明明在跑,任务栏也有图标。但 23119 没人接。

Zotero 实际在听哪里

列出 zotero 进程持有的本地端口:

bash 复制代码
$ ss -lntp | grep zotero
LISTEN  127.0.0.1:19876  ...  zotero-bin
LISTEN  127.0.0.1:23116  ...  zotero-bin
LISTEN  127.0.0.1:23124  ...  zotero-bin

挨个 curl:

端口 /connector/ping 响应
23119 connection refused
23124 Zotero is running
23116 timeout
19876 timeout

Connector server 实际跑在 23124 上,而不是 KB 说的 23119。

是不是 native messaging 没注册

看到端口不是预期值,第一反应是 native messaging host 的 manifest 没装------这是 Linux 解压式安装的常见坑。

检查 Edge 的 manifest 目录:

bash 复制代码
$ ls ~/.config/microsoft-edge/NativeMessagingHosts/
(empty)

空的。看起来就是这个问题了。

但接下来查 connector 扩展的源码(zotero/zotero-connectors),看到 src/common/zotero.js 里写死了:

js 复制代码
"connector.url": 'http://127.0.0.1:23119/',

Connector 不通过 native messaging 探测 Zotero,就是直接打 23119。manifest 目录空不空对这个问题其实无关紧要。这条路走死了。

那 Zotero 怎么跑到 23124 去的

回到 Zotero 自己。看 HTTP server 的默认端口:

bash 复制代码
$ unzip -p ~/Zotero/app/omni.ja defaults/preferences/zotero.js | grep httpServer
pref("extensions.zotero.httpServer.enabled", true);
pref("extensions.zotero.httpServer.port", 23119);
pref("extensions.zotero.httpServer.localAPI.enabled", false);

默认就是 23119。那为什么实际是 23124?看用户配置:

bash 复制代码
$ grep httpServer ~/.zotero/zotero/<profile>/prefs.js
user_pref("extensions.zotero.httpServer.localAPI.enabled", true);
user_pref("extensions.zotero.httpServer.port", 23124);

第 88 行被改成了 23124。这文件是什么时候被改的?

bash 复制代码
$ stat -c '%y' ~/.zotero/zotero/<profile>/prefs.js
2026-07-13 08:42:20

就在这次启动 Zotero 后的一分钟内。是 Zotero 自己写的,不是手工改的。

根因:端口占用触发静默回退

Zotero 的 HTTP server 是 Firefox 的 HttpServer。它的行为是:调用 start(port) 时,如果 port 被占用,会自动找下一个空闲端口,并把实际监听的端口写到 prefs。

我这次启动 Zotero 时,23119 恰好被另一个进程占着------很可能是某个短命的本地服务,活着的时候占住 23119,被我用 kill 清掉后没人再起来。Zotero 启动那一瞬间发现 23119 不空,就退到 23124,并把 23124 写进了 prefs.js。

之后那个短命进程退出,23119 空了,但 Zotero 已经把 23124 当成事实上的「我的端口」记在了配置里。下次再启动还是会读这个 23124。

Connector 是写死的 23119,根本不知道桌面应用换了端口。链路在这里断了。

修复

bash 复制代码
# 1. 停 Zotero
pkill -f ~/Zotero/zotero-bin
sleep 2

# 2. 确认 23119 现在是空的
ss -lntp | grep :23119 || echo "(23119 free)"

# 3. 改 prefs.js,把端口改回默认
sed -i 's/httpServer.port", 23124/httpServer.port", 23119/' \
    ~/.zotero/zotero/<profile>/prefs.js

# 4. 启动 Zotero
~/Zotero/zotero &

# 5. 验证
curl http://127.0.0.1:23119/connector/ping
# <!DOCTYPE html><html><body>Zotero is running</body></html>

回到 Edge 打开任何学术页面,Zotero Connector 图标变彩色、能触发保存,问题解决。

防复发

如果过几天 connector 又断了,先看 prefs.js 是不是又被改回 23124。如果是:

bash 复制代码
# 找到占用 23119 的进程
sudo lsof -i :23119
# 或在 Zotero 启动那一瞬间抓 snapshot:
ss -lntp | grep :23119

常见会撞 23119 的本地服务:AnkiConnect(默认 8765,但有人在反代时改成 23119)、Calibre Content Server(默认 8080)、某些调试代理和远程开发隧道。

如果找不到占用方但又确实复发,可以在 Zotero 启动前临时占住 23119,让其他进程让路:

bash 复制代码
# 占用 23119 直到 Zotero 起来
( sleep 1 && exec nc -lk 23119 ) &
~/Zotero/zotero &

这个方法很 ugly,但能稳定避免回退。

更彻底的办法是改 connector 而不是改 Zotero------给 connector 加一个 native messaging host,让它动态询问 Zotero 实际监听哪个端口。Connector 仓库目前没有这种机制,等官方支持。

小结

Connector 的 URL 是写死的 23119,Zotero 在 23119 被占时会静默回退到其他端口并把端口写入 prefs.js。这两边的设计对不上,端口一旦错位就静默断连。修复就是改 prefs.js 把端口改回 23119,再用 lsof 排查占用方,避免下次启动又被抢。

相关推荐
郑州光合科技余经理34 分钟前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆6661 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)1 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
羔羊++1 小时前
18_实验十七_其他命令与自定义启动变量
linux
码艺-Alimjan2 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_3 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒3 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技3 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
DYWorker0014 小时前
Linux驱动:RK3568 GMAC + YT8531C 千兆以太网全流程解剖
linux
yivifu4 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub