服务器上的 daemon

在没有桌面的服务器或开发机上运行 Kettu:一行命令装好,开机就启动,再配对你的设备,用 kettu update 升级。

daemon 就是没有窗口的 Kettu:运行 Agent 和会话的还是同一套 host,适合服务器,或者你经 SSH 登录的开发机。你的其他设备连它,和连桌面应用一样,直接经你自己的网络,端到端加密;daemon 自己也提供 Web 客户端。

它能在 Linux 上运行,x64 或 Arm,glibc 2.28 及以上,比如 Ubuntu 20.04、Debian 10、RHEL 8 及更新的版本;也能在 Apple 芯片的 Mac 上运行。Alpine 这类基于 musl 的系统和 Windows 暂不支持。

安装

curl -fsSL https://kettu.sh/install | sh

运行前可以先打开这个脚本看看。它会:

  • 从最新的发布下载你这个系统的包,和发布里的校验和对不上就什么都不装;
  • 解到 ~/.local/share/kettu/versions/<版本>,包里自带 Node.js,机器上不用装;
  • 把 ~/.local/bin/kettu 链接过去,不需要 root。~/.local/bin 不在 PATH 上时,它打印要加进 shell 配置的那一行,不会改你的文件;
  • 把 daemon 装成开机启动的系统服务:Linux 上是 systemd 的用户服务,并打开 linger,退出登录后照样运行;macOS 上是 LaunchAgent。

选项写在 sh -s -- 后面:

curl -fsSL https://kettu.sh/install | sh -s -- --version 0.1.0 --no-service
选项作用
--version <版本>装指定的版本,而不是最新版
--no-service不装系统服务,比如在容器里;用 kettu run 启动 daemon

macOS 上

launchd 只在有人登录这台 Mac 的桌面时运行服务。如果你只经 SSH 登录这台 Mac,先在它的桌面上登录一次,或者打开自动登录,再运行 kettu service install。

连上你的设备

kettu pair 显示一个给手机扫的码和一个给浏览器打开的链接,然后让你确认回应的那台设备。经 SSH 登录时,它还会打印要在你自己电脑上运行的端口转发命令,以及在那里打开的链接。码五分钟后失效。配对的设备连到 kettu direct 显示的端口和地址,在同一网络里,或者通过 Tailscale 之类的 VPN;怎么连进来见远程访问。

命令

命令作用
kettu statusdaemon 是否在运行,以及它的 host、在线设备和端口
kettu pair添加设备
kettu devices列出配对的设备;kettu devices remove <id> 移除一台
kettu direct显示端口和地址;direct port、direct add 和 direct remove 修改它们
kettu terminal on、kettu terminal off允许设备使用这台机器的终端,或者不再允许
kettu service install、kettu service uninstall装好系统服务,或者停掉并移除它
kettu update升到最新版本
kettu run在前台运行 daemon,不用系统服务

kettu --help 会列出所有命令和选项。

升级

kettu update 查最新的发布,比现在的新就照安装命令的方式装上:对照校验和检查,链接到 ~/.local/bin/kettu,让系统服务改跑新版本并重启。上一个版本留在 ~/.local/share/kettu/versions 里,可以退回去;更早的会被删掉。

卸载

kettu service uninstall
rm -rf ~/.local/share/kettu/versions ~/.local/bin/kettu

daemon 的数据,也就是它的身份、配对的设备和会话,会留下来:Linux 上在 ~/.local/share/kettu,macOS 上在 ~/Library/Application Support/Kettu Daemon。要连这些一起清掉,把那个文件夹也删掉。