Chrome 扩展程序可以托管终端模拟器吗?

上周,作者在博客中介绍了将浏览器用作终端模拟器,该帖子在lobster.rs上引起了很多关注,并收到了一些有趣的反馈。
最常见的批评是从浏览器标签运行终端本质上不安全,还有一些关于设置复杂性的担忧,以及它需要始终运行服务器这一事实。
作者很高兴地宣布有了解决方案:Tweety现在作为 Chrome 扩展分发!展示了 Tweety 扩展在侧边栏的截图。
Chrome 扩展有很多有趣的 API 可利用,除了在浏览器标签中放置终端,还可以创建为侧边栏或开发工具面板!
由于 Chrome 扩展页面有一个 URL,可以利用查询参数打开特定视图,如chrome-extension://<your-extension-id>/term.html?app=ssh&arg=vps打开 SSH 模式的终端并连接到vps主机,chrome-extension://<your-extension-id>/term.html?app=nvim&file=/home/pomdtr/.bashrc在 neovim 中打开.bashrc文件。
如果要为特定应用创建 URL,可以在~/.config/tweety/apps中创建脚本,如创建~/.config/tweety/apps/htop脚本,内容为#!/bin/sh; exec /usr/local/bin/htop,就会得到 htop 的新 URL:chrome-extension://<your-extension-id>/term.html?app=htop

The most underrated extension API: Native Messaging

Native Messaging API允许 Chrome 扩展与在用户计算机上运行的本机消息主机通信。在本例中,本机消息主机将是tweetycli,可以使用 Homebrew 安装:brew install pomdtr/tap/tweety; tweety install --extension-id <your-extension-id>(目前需要手动安装扩展,因为尚未在 Chrome 网上应用店发布)。安装扩展后,浏览器每次启动时都会查找扩展注册的本机消息主机,如果主机未运行,浏览器将启动它(注意:本机消息主机必须单独安装)。主机通过标准输入和输出(stdin/stdout)与扩展通信。打开新的 Tweety 标签时,扩展将向本机主机发送消息,本机主机将启动终端模拟器会话并返回 WebSocket URL 给扩展,扩展然后使用此 URL 连接到终端模拟器并在标签中显示终端。

Proxying the chrome extension api through the tweety cli

除了 WebSocket 服务器,tweety 服务器还将开始在 Unix 套接字上监听 JSON-RPC 命令。可以从tweetyCLI 利用此 Unix 套接字从 shell 访问扩展 API。如截图中tweety tabs query映射到chrome.tabs.queryAPI。可以使用 cli 工具jq组合这些 tweety 命令,并立即构建自己的脚本。例如,一个生成当前标签的 Markdown 链接的脚本:#!/bin/sh; CURRENT_TAB=$(tweety tabs get); URL=$(echo "$CURRENT_TAB" | jq -r.url); TITLE=$(echo "$CURRENT_TAB" | jq -r.title); printf "[%s](%s)" "$TITLE" "$URL" | pbcopy,将此脚本存储在~/.config/commands/copy-markdown-link中,它将作为tweetyCLI 的子命令添加。还有用mods总结当前博客文章的截图。

阅读 13
0 条评论