现版本 Koishi 的插件市场似乎每次更新依赖时都会尝试解析所有依赖项,我因为还在使用 qsign+gocq+onebot 接入,而其中 gocq 的包已被移除,解析无法完成。虽然可以简单通过从 package.json
移除 gocq 来避免解析,但是事到如今顺手迁移一下接入方式也挺好的。故尝试通过 NTQQ 加载 LLOneBot/LLOneBot 接入 Koishi 的 onebot 插件。
本文重点在于如何在没有 x server 和显示器的机器上远程完成 NTQQ 及 LLQQNT 的安装与启动。
就步骤本身而言,NTQQ 直接通过 deb 安装,LiteLoaerQQNT 及 LLOneBot 的安装方法参考上面仓库内教程。这个环节涉及对 NTQQ 的 GUI 进行操作,通过 ssh 连接的 X forwarding 便可实现。只需本地机器拥有 x server 环境,ssh 连接时提供 -X 参数启用转发即可。
为了给 NTQQ 配置 systemd 服务,便于管理和自启,我们不能满足于通过 ssh 连接手动启动 NTQQ,再启用 Koishi。但没有转发 X 时,NTQQ 的启动会因没有 x server 和 DISPLAY 环境而失败。经过网络检索我发现有 Xvfb 这么个好东西可以在无显示器的机器上伪装一个 x server 和 DISPLAY。安装后,我们先为 Xvfb 编写服务:
/etc/systemd/system/xvfb.service
[Unit]
Description=Xvfb headless plotting
After=network.target
[Service]
User=root
ExecStart=/usr/bin/Xvfb :0 -screen 0 1280x1024x24
[Install]
WantedBy=multi-user.target
Alias=Xvfb.service
Alias=xvfbd.service
该服务将启动 Xvfb 并提供 DISPLAY:0。systemctl daemon-reload,enable,start 该服务。
我们再为 QQNT 编写服务:
/etc/systemd/system/qq.service
[Unit]
Description=QQ daemon
Wants=network-online.target
After=network-online.target network.target
[Service]
User=<username>
ExecStart=/opt/QQ/qq
Restart=always
KillMode=process
Environment="DISPLAY=:0"
[Install]
WantedBy=graphical.target
此处需传入环境 DISPLAY=:0
。我推荐通过用户而非 root 启动 QQ,所以在 [Service]
下设置了 User
。理论上 root 启动并不影响使用。
之后同样 daemon-reload,enable,start。此时 NTQQ 应该已经成为 systemd 服务,能够被系统开机启动了。
日后需要更改设置时,可以通过先 stop 服务,再转发 X 在本地打开 NTQQ GUI。