<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>tsl0922 (tsl0922)</title>
    <link>https://ruby-china.org/tsl0922</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>ttyd 1.3.1 发布，终端分享工具</title>
      <description>&lt;p&gt;ttyd 1.3.1 发布了。这个版本修复了一个严重的 bug，&lt;strong&gt;如果你在使用 http basic auth 功能，请尽快升级&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;该版本主要的更新内容如下：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;添加 alpine docker 镜像，体积仅有 28M&lt;/li&gt;
&lt;li&gt;修复 windows 下浏览器可能会显示非等宽字体问题 (V2EX 网友反馈）&lt;/li&gt;
&lt;li&gt;网页终端添加边距，文字看起来不会紧贴着边框了 (V2EX 网友反馈）&lt;/li&gt;
&lt;li&gt;升级到 xterm.js 2.4.0 版本，终端里的链接支持点击了&lt;/li&gt;
&lt;li&gt;添加 OpenBSD 支持，修复编译问题&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;修复一个可以绕过 http basic auth 的 bug&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;修复特定情况下不停刷新网页可能会导致服务 CRASH 的问题&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/tsl0922/ttyd" rel="nofollow" target="_blank" title=""&gt;ttyd&lt;/a&gt; 是一个 C 语言编写的命令行程序，可以把任意命令行程序分享到网页上操作，可以看做是个网页版的远程终端，支持 Linux、macOS 等 *nix 类和 Windows 系统，还可以运行在 OpenWrt/LEDE 之类的嵌入式系统上。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;项目主页：&lt;/strong&gt;&lt;a href="https://tsl0922.github.io/ttyd" rel="nofollow" target="_blank"&gt;https://tsl0922.github.io/ttyd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://dn-coding-net-production-pp.qbox.me/e4e04e32-6d05-4d9c-a6de-1d15d02ad0ef.gif" title="" alt="screenshot"&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;更新历史：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ruby-china.org/topics/32345" title=""&gt;ttyd 1.3.0 发布 - 终端分享工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ruby-china.org/topics/31593" title=""&gt;终端分享工具 ttyd 1.2.0 发布，添加了中文输入支持&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ruby-china.org/topics/31175" title=""&gt;终端分享工具 ttyd 发布首个正式版本 1.0.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>tsl0922</author>
      <pubDate>Thu, 16 Mar 2017 21:02:00 +0800</pubDate>
      <link>https://ruby-china.org/topics/32553</link>
      <guid>https://ruby-china.org/topics/32553</guid>
    </item>
    <item>
      <title>ttyd 1.3.0 发布 - 终端分享工具</title>
      <description>&lt;p&gt;ttyd 1.3.0 发布了。这个版本添加了一些新的功能还有一些 bug 修复，升级了网页终端模拟器，前端终端模拟器性能有了很大的提升。&lt;/p&gt;

&lt;p&gt;该版本主要更新内容如下：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--index&lt;/code&gt; 选项：自定义 &lt;code&gt;index.html&lt;/code&gt; 文件路径&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--browser&lt;/code&gt; 选项：启动 ttyd 后在系统默认浏览器里打开终端&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--signal-list&lt;/code&gt; 选项：列出支持的停止进程信号&lt;/li&gt;
&lt;li&gt;缩小了 docker 镜像的占用的磁盘空间&lt;/li&gt;
&lt;li&gt;支持监听 UNIX 套接字&lt;/li&gt;
&lt;li&gt;改进了客户端的 base64 解码和 utf8 支持&lt;/li&gt;
&lt;li&gt;修复了启动命令没有在认证后执行的问题&lt;/li&gt;
&lt;li&gt;关闭浏览器窗口时给出提示&lt;/li&gt;
&lt;li&gt;更新到 xterm.js &lt;code&gt;2.3.1&lt;/code&gt;，大幅提升性能&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;小提示：&lt;/strong&gt;如果你没有使用 oh-my-zsh 作为 shell，还可以在启动 ttyd 的时候添加 &lt;code&gt;-t useFlowControl=true&lt;/code&gt; 参数开启 xterm.js 的 流量控制功能，这样可以减轻程序有大量输出时前端的卡顿，此功能和 oh-my-zsh 的快捷键冲突，所以默认没有开启。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;在这中间还有个 1.2.1 版本更新没有在这里发布，这个版本添加了 SSL 客户端认证支持。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/tsl0922/ttyd" rel="nofollow" target="_blank" title=""&gt;ttyd&lt;/a&gt; 是一个 C 语言编写的命令行程序，可以把任意命令行程序分享到网页上操作，可以看做是个网页版的远程终端，支持 Linux、macOS 系统，还可以运行在 OpenWrt 之类的嵌入式系统上。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;项目主页：&lt;/strong&gt;&lt;a href="https://tsl0922.github.io/ttyd" rel="nofollow" target="_blank"&gt;https://tsl0922.github.io/ttyd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://dn-coding-net-production-pp.qbox.me/e4e04e32-6d05-4d9c-a6de-1d15d02ad0ef.gif" title="" alt="screenshot"&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;更新历史：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ruby-china.org/topics/31593" title=""&gt;终端分享工具 ttyd 1.2.0 发布，添加了中文输入支持&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ruby-china.org/topics/31175" title=""&gt;终端分享工具 ttyd 发布首个正式版本 1.0.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>tsl0922</author>
      <pubDate>Mon, 20 Feb 2017 19:44:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/32345</link>
      <guid>https://ruby-china.org/topics/32345</guid>
    </item>
    <item>
      <title>终端分享工具 ttyd 1.2.0 发布，添加了中文输入支持</title>
      <description>&lt;p&gt;&lt;a href="https://github.com/tsl0922/ttyd" rel="nofollow" target="_blank" title=""&gt;ttyd&lt;/a&gt; 1.2.0 发布了。&lt;/p&gt;

&lt;p&gt;这个版本主要的改进是网页终端模拟器添加了对 CJK (Chinese, Japanese, Korean) 和 IME 的支持，也就是说&lt;strong&gt;可以输入中文了&lt;/strong&gt;。另外，ttyd 也可以在 FreeBSD 下使用了。&lt;/p&gt;
&lt;h2 id="ChangeLog"&gt;ChangeLog&lt;/h2&gt;&lt;h2 id="1.2.0"&gt;1.2.0&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fixed compile error on FreeBSD&lt;/li&gt;
&lt;li&gt;Re-implemented the base64 function without openssl&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--client-option&lt;/code&gt; option: allows setting terminal preference on the server side&lt;/li&gt;
&lt;li&gt;Moved the terminal emulator from hterm to xterm.js for CJK and IME support&lt;/li&gt;
&lt;li&gt;Show websocket connection error with overlay&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="1.1.0"&gt;1.1.0&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--once&lt;/code&gt; option: accept only one client and exit on disconnection&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--readonly&lt;/code&gt; option: do not allow clients to write to the TTY&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--check-origin&lt;/code&gt; option: do not allow websocket connection from different origin&lt;/li&gt;
&lt;li&gt;HTTP &lt;code&gt;Server&lt;/code&gt; header changed to ttyd, eg: &lt;code&gt;ttyd/1.1.0 (libwebsockets/2.0.2)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Added check for &lt;code&gt;lws_config.h&lt;/code&gt;, some version of libwebsockets may not have this header file&lt;/li&gt;
&lt;li&gt;libwebsockets : handle fragmented messages, this allows large input on the web&lt;/li&gt;
&lt;li&gt;OpenWrt Makefile: changed the &lt;code&gt;openssl&lt;/code&gt; dependency to &lt;code&gt;libopenssl&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;p&gt;ttyd 是一个 C 语言编写的命令行程序，可以把任意命令行程序分享到网页上操作，可以看做是个网页版的远程终端，支持 Linux、macOS 系统，还可以运行在 OpenWrt 之类的嵌入式系统上。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;功能特色：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C 语言编写，在速度和内存占用上相比其它实现有一些优势&lt;/li&gt;
&lt;li&gt;网页和服务器端使用 websocket 通信（基于 &lt;a href="https://libwebsockets.org" rel="nofollow" target="_blank" title=""&gt;libwebsockets&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;前端使用 chromium &lt;a href="https://chromium.googlesource.com/apps/libapps/+/HEAD/hterm" rel="nofollow" target="_blank" title=""&gt;hterm&lt;/a&gt; 实现终端模拟，功能完备（已换为对中文输入更友好的 &lt;a href="https://github.com/sourcelair/xterm.js" rel="nofollow" target="_blank" title=""&gt;Xterm.js&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;客户端和服务器端支持 SSL 加密通信（基于 &lt;a href="https://www.oschina.net/p/openssl" rel="nofollow" target="_blank" title=""&gt;OpenSSL&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;支持配置用户名密码认证（Basic Auth）&lt;/li&gt;
&lt;li&gt;可以执行任意命令行程序，不只是 bash 之类的 shell&lt;/li&gt;
&lt;li&gt;跨平台支持，可以在 Linux、macOS、&lt;a href="https://openwrt.org" rel="nofollow" target="_blank" title=""&gt;OpenWrt&lt;/a&gt; 下运行&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;运行效果：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://dn-coding-net-production-pp.qbox.me/e4e04e32-6d05-4d9c-a6de-1d15d02ad0ef.gif" title="" alt="screenshot"&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;更新历史：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ruby-china.org/topics/31175" title=""&gt;终端分享工具 ttyd 发布首个正式版本 1.0.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ruby-china.org/topics/31081" title=""&gt;ttyd -- 分享任意命令行程序到网页上&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>tsl0922</author>
      <pubDate>Mon, 14 Nov 2016 20:42:34 +0800</pubDate>
      <link>https://ruby-china.org/topics/31593</link>
      <guid>https://ruby-china.org/topics/31593</guid>
    </item>
    <item>
      <title>终端分享工具 ttyd 发布首个正式版本 1.0.0</title>
      <description>&lt;p&gt;&lt;strong&gt;上个帖子：&lt;/strong&gt; &lt;a href="https://ruby-china.org/topics/31081" title=""&gt;ttyd -- 分享任意命令行程序到网页上&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ttyd 1.0.0 发布。这是 ttyd 的首个正式版本，主要完善了一些基本功能的实现。 &lt;/p&gt;

&lt;p&gt;ttyd 首次发出后也受到了不少网友的关注和支持，不到两个星期时间 github 上 Star 数已经 100+，如果你觉得这个程序很有用，欢迎到 github 上 Star 下补刀支持！&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;项目地址：&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/tsl0922/ttyd" rel="nofollow" target="_blank"&gt;https://github.com/tsl0922/ttyd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;github 上 C 语言还是不够流行，个位数的 Star 数都可以上 &lt;a href="https://github.com/trending/c" rel="nofollow" target="_blank"&gt;https://github.com/trending/c&lt;/a&gt; 。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;安装方法：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;macOS 用户可以通过 &lt;code&gt;brew install ttyd&lt;/code&gt; 来快速安装体验，Linux、OpenWrt 下目前需要手工编译安装，具体步骤请查看项目的 &lt;a href="https://github.com/tsl0922/ttyd/blob/master/README.md" rel="nofollow" target="_blank" title=""&gt;README&lt;/a&gt;。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;ttyd 是一个 C 语言编写的命令行程序，可以把任意命令行程序分享到网页上操作，可以看做是个网页版的远程终端，支持 Linux、macOS 系统，还可以运行在 OpenWrt 之类的嵌入式系统上。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;功能特色：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C 语言编写，在速度和内存占用上相比其它实现有一些优势&lt;/li&gt;
&lt;li&gt;网页和服务器端使用 websocket 通信（基于 &lt;a href="https://libwebsockets.org" rel="nofollow" target="_blank" title=""&gt;libwebsockets&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;前端使用 chromium &lt;a href="https://chromium.googlesource.com/apps/libapps/+/HEAD/hterm" rel="nofollow" target="_blank" title=""&gt;hterm&lt;/a&gt; 实现终端模拟，功能完备&lt;/li&gt;
&lt;li&gt;客户端和服务器端支持 SSL 加密通信（基于 &lt;a href="https://www.oschina.net/p/openssl" rel="nofollow" target="_blank" title=""&gt;OpenSSL&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;支持配置用户名密码认证（Basic Auth）&lt;/li&gt;
&lt;li&gt;可以执行任意命令行程序，不只是 bash 之类的 shell&lt;/li&gt;
&lt;li&gt;跨平台支持，可以在 Linux、macOS、&lt;a href="https://openwrt.org" rel="nofollow" target="_blank" title=""&gt;OpenWrt&lt;/a&gt; 下运行&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;运行效果：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://dn-coding-net-production-pp.qbox.me/e4e04e32-6d05-4d9c-a6de-1d15d02ad0ef.gif" title="" alt="screenshot"&gt;&lt;/p&gt;</description>
      <author>tsl0922</author>
      <pubDate>Mon, 26 Sep 2016 21:04:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/31175</link>
      <guid>https://ruby-china.org/topics/31175</guid>
    </item>
    <item>
      <title>ttyd -- 分享任意命令行程序到网页上</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;ttyd 是一个 C 语言编写的命令行程序，可以把任意命令行程序分享到网页上操作，可以看做是个网页版的远程终端。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;这个项目最初的灵感来源于平时操作无线路由器时想在网页上执行一些命令，但是目前的开源的路由器系统（&lt;a href="https://openwrt.org/" rel="nofollow" target="_blank" title=""&gt;openwrt&lt;/a&gt;）没有一个很好的网页终端模拟器，最多也只是支持执行一个命令然后把结果显示到网页上，完全没有交互。有些路由器还不限制 &lt;code&gt;top&lt;/code&gt; 之类的命令执行，一执行就可能会直接卡住网页界面。&lt;/p&gt;

&lt;p&gt;找了一下类似的程序，发现了 &lt;a href="https://github.com/krishnasrinivas/wetty" rel="nofollow" target="_blank" title=""&gt;Wetty&lt;/a&gt; 和 &lt;a href="https://github.com/yudai/gotty" rel="nofollow" target="_blank" title=""&gt;GoTTY&lt;/a&gt;，但是 Wetty 需要 node 运行环境，GoTTY 编译后的二进制文件太大，多数路由器的 flash 都比较小，不适合集成到路由器固件里。&lt;/p&gt;

&lt;p&gt;一直想自己写一个，上周末终于有时间开工，现在算是可以用了，但是目前只实现了基本的 PTY 转发和网页上的显示交互，还不够完善（在这里发文的时候已经完善了许多 &lt;img title=":smile:" alt="😄" src="https://twemoji.ruby-china.com/2/svg/1f604.svg" class="twemoji"&gt; ）。&lt;/p&gt;
&lt;h3 id="项目地址"&gt;项目地址&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/tsl0922/ttyd" rel="nofollow" target="_blank"&gt;https://github.com/tsl0922/ttyd&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="安装方法"&gt;安装方法&lt;/h3&gt;
&lt;p&gt;mac 用户可以直接用 homebrew 安装：&lt;code&gt;brew install ttyd&lt;/code&gt;，linux 下目前只能手工编译安装，具体步骤请查看项目的 &lt;a href="https://github.com/tsl0922/ttyd" rel="nofollow" target="_blank" title=""&gt;README&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id="命令行参数"&gt;命令行参数&lt;/h3&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;ttyd is a tool &lt;span class="k"&gt;for &lt;/span&gt;sharing terminal over the web

USAGE: ttyd &lt;span class="o"&gt;[&lt;/span&gt;options] &amp;lt;&lt;span class="nb"&gt;command&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&amp;lt;arguments...&amp;gt;]

OPTIONS:
    &lt;span class="nt"&gt;--port&lt;/span&gt;, &lt;span class="nt"&gt;-p&lt;/span&gt;              Port to listen &lt;span class="o"&gt;(&lt;/span&gt;default: 7681&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="nt"&gt;--interface&lt;/span&gt;, &lt;span class="nt"&gt;-i&lt;/span&gt;         Network interface to &lt;span class="nb"&gt;bind&lt;/span&gt;
    &lt;span class="nt"&gt;--credential&lt;/span&gt;, &lt;span class="nt"&gt;-c&lt;/span&gt;        Credential &lt;span class="k"&gt;for &lt;/span&gt;Basic Authentication &lt;span class="o"&gt;(&lt;/span&gt;format: username:password&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="nt"&gt;--uid&lt;/span&gt;, &lt;span class="nt"&gt;-u&lt;/span&gt;               User &lt;span class="nb"&gt;id &lt;/span&gt;to run with
    &lt;span class="nt"&gt;--gid&lt;/span&gt;, &lt;span class="nt"&gt;-g&lt;/span&gt;               Group &lt;span class="nb"&gt;id &lt;/span&gt;to run with
    &lt;span class="nt"&gt;--signal&lt;/span&gt;, &lt;span class="nt"&gt;-s&lt;/span&gt;            Signal to send to the &lt;span class="nb"&gt;command &lt;/span&gt;when &lt;span class="nb"&gt;exit &lt;/span&gt;it &lt;span class="o"&gt;(&lt;/span&gt;default: SIGHUP&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="nt"&gt;--reconnect&lt;/span&gt;, &lt;span class="nt"&gt;-r&lt;/span&gt;         Time to reconnect &lt;span class="k"&gt;for &lt;/span&gt;the client &lt;span class="k"&gt;in &lt;/span&gt;seconds &lt;span class="o"&gt;(&lt;/span&gt;default: 10&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="nt"&gt;--ssl&lt;/span&gt;, &lt;span class="nt"&gt;-S&lt;/span&gt;               Enable ssl
    &lt;span class="nt"&gt;--ssl-cert&lt;/span&gt;, &lt;span class="nt"&gt;-C&lt;/span&gt;          Ssl certificate file path
    &lt;span class="nt"&gt;--ssl-key&lt;/span&gt;, &lt;span class="nt"&gt;-K&lt;/span&gt;           Ssl key file path
    &lt;span class="nt"&gt;--ssl-ca&lt;/span&gt;, &lt;span class="nt"&gt;-A&lt;/span&gt;            Ssl ca file path
    &lt;span class="nt"&gt;--debug&lt;/span&gt;, &lt;span class="nt"&gt;-d&lt;/span&gt;             Set log level &lt;span class="o"&gt;(&lt;/span&gt;0-9, default: 7&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="nt"&gt;--help&lt;/span&gt;, &lt;span class="nt"&gt;-h&lt;/span&gt;              Print this text and &lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="运行效果"&gt;运行效果&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://dn-coding-net-production-pp.qbox.me/e4e04e32-6d05-4d9c-a6de-1d15d02ad0ef.gif" title="" alt="screenshot"&gt;&lt;/p&gt;

&lt;p&gt;截图里执行的命令是 &lt;code&gt;bash&lt;/code&gt;，如果想要登陆后才能使用可以执行 &lt;code&gt;login&lt;/code&gt;，这样网页上就和 ssh 登陆一样了。&lt;/p&gt;
&lt;h3 id="其它玩法"&gt;其它玩法&lt;/h3&gt;
&lt;p&gt;除了直接运行 shell 外，ttyd 还可以有很多有趣的玩法，例如：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果你想给网页上的每个人开个 docker 容器玩，可以用下面的命令启动 ttyd，这样每次打开网页都会进入 docker 容器内的 shell：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ttyd docker run &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--rm&lt;/span&gt; ubuntu bash
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你想一打开网页就能直接 ssh 到另一个机器上（省去进入 bash 再执行 ssh），可以这样启动 ttyd：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ttyd ssh root@192.168.1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;你甚至还可以直接执行一个 vim，这样打开进入网页后就只有一个 vim 编辑器可以操作：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ttyd vim
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ttyd 基本上是 GoTTY 到 C 语言的移植，所以有一些可以共用的部分是直接使用 GoTTY 里的代码的。&lt;/p&gt;

&lt;p&gt;ttyd 的开发主要在 Mac 下进行，支持 macOS 和 Linux 系统，还提供了一个可以给 OpenWrt 编译出二进制文件的 &lt;a href="https://github.com/tsl0922/ttyd/tree/master/openwrt" rel="nofollow" target="_blank" title=""&gt;Makefile&lt;/a&gt;，但是我还没空在真机上测试，有兴趣的可以自己编译出 ipk 包传到路由器运行试试。&lt;/p&gt;</description>
      <author>tsl0922</author>
      <pubDate>Sat, 17 Sep 2016 21:52:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/31081</link>
      <guid>https://ruby-china.org/topics/31081</guid>
    </item>
    <item>
      <title>Hydra - Hack your OS X desktop environment</title>
      <description>&lt;p&gt;Hydra 提供一系列方便的 Lua API，允许以编程的方式 Hack OS X 桌面并注册到快捷键，尤其在窗口管理上特别方便。&lt;/p&gt;

&lt;p&gt;它还提供了一个命令行的 REPL：&lt;a href="https://github.com/sdegutis/hydra-cli" rel="nofollow" target="_blank" title=""&gt;hydra-cli&lt;/a&gt;，可以执行 Lua 代码，实时查看结果。&lt;/p&gt;
&lt;h3 id="主页"&gt;主页&lt;/h3&gt;
&lt;p&gt;github：&lt;a href="https://github.com/sdegutis/hydra" rel="nofollow" target="_blank"&gt;https://github.com/sdegutis/hydra&lt;/a&gt;
homepage：&lt;a href="http://hackhydra.com" rel="nofollow" target="_blank"&gt;http://hackhydra.com&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="截图"&gt;截图&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://raw.githubusercontent.com/sdegutis/hydra/master/screenshots/grid.gif" title="" alt="grid.gif"&gt;&lt;/p&gt;

&lt;p&gt;我是从 beta 时期就开始使用的，现在终于出了 1.0 版本，期间 API 也变了不少，下面分享的配置也是基于最新版本的，旧版本下可能不能正常工作。beta 时期软件是免费的，现在似乎加了个 license 机制，但是可以无限期试用，全功能。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;分享我的配置：&lt;/strong&gt; &lt;a href="https://github.com/tsl0922/dotfiles" rel="nofollow" target="_blank"&gt;https://github.com/tsl0922/dotfiles&lt;/a&gt;&lt;/p&gt;</description>
      <author>tsl0922</author>
      <pubDate>Sat, 26 Jul 2014 12:04:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/20687</link>
      <guid>https://ruby-china.org/topics/20687</guid>
    </item>
    <item>
      <title>淘宝的一个 CDN 节点挂了？</title>
      <description>&lt;p&gt;g.tbcdn.cn 似乎已经挂了，无法完整加载首页：
&lt;img src="https://l.ruby-china.com/photo/2014/36db73579d4875166e84b43881be25f1.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;访问 &lt;a href="http://g.tbcdn.cn/kissy/k/1.4.0/seed-min.js?t=20140528" rel="nofollow" target="_blank"&gt;http://g.tbcdn.cn/kissy/k/1.4.0/seed-min.js?t=20140528&lt;/a&gt; 得到的结果为：&lt;code&gt;OK cache1.l2cn201&lt;/code&gt;，很多人遇到这个问题，确定应该是这个 CDN 节点挂了，翻墙访问还是正常的。&lt;/p&gt;

&lt;p&gt;如果有淘宝的人在的话，可以通知处理下。 &lt;a href="/huacnlee" class="user-mention" title="@huacnlee"&gt;&lt;i&gt;@&lt;/i&gt;huacnlee&lt;/a&gt; &lt;a href="/lgn21st" class="user-mention" title="@lgn21st"&gt;&lt;i&gt;@&lt;/i&gt;lgn21st&lt;/a&gt;&lt;/p&gt;</description>
      <author>tsl0922</author>
      <pubDate>Thu, 29 May 2014 21:58:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/19631</link>
      <guid>https://ruby-china.org/topics/19631</guid>
    </item>
    <item>
      <title>Devise 登录后返回之前页面问题</title>
      <description>&lt;p&gt;看了&lt;a href="https://github.com/plataformatec/devise/wiki/How-To:-Redirect-back-to-current-page-after-sign-in,-sign-out,-sign-up,-update" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;的做法，是通过 session 保存之前页面路径的，可以实现返回之前页面。&lt;/p&gt;

&lt;p&gt;我想要的效果是：&lt;a href="http://ruby-china.org/login?return_to=xxx" rel="nofollow" target="_blank"&gt;http://ruby-china.org/login?return_to=xxx&lt;/a&gt; 这种形式的登录 URL，登录成功后返回 return_to 指定的地址。对 devise 不是很熟，不知道有没有这方面的支持？&lt;/p&gt;

&lt;p&gt;目前想到的一个办法是：修改 devise 的登录页面，使用 ajax 方式登录，登录成功后直接用 JS 修改 location。&lt;/p&gt;</description>
      <author>tsl0922</author>
      <pubDate>Sun, 03 Feb 2013 11:01:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/8575</link>
      <guid>https://ruby-china.org/topics/8575</guid>
    </item>
  </channel>
</rss>
