コーディング風景をリアルタイムでWeb配信する素敵ツール『ScreenX』

結構前に作った、ターミナル画面をリアルタイムで配信するツールを公開しました。
GitHub:tompng/screenx
チャット付きです。




セットアップ

RackHubを使う場合はこちらも参考に
https://gist.github.com/3547668

ビルド
$ git clone https://github.com/tompng/screenx
$ cd screenx
$ ./build.sh
サーバー起動
$ cd classes
$ nohup java ScreenX &
配信開始
$ screen -x

これで配信するスクリーンが開きます。
配信URLは http://*****:8080/screenx.html
使うポートは設定で変更できます。




怪しくも素敵な隠れ機能 Web Login

httpフォルダを開くと、3つのhtmlファイルがあります。

  • screenx.html 配信用。チャット付き。
  • sxlogin.html 配信する時用のログイン。チャット見れる。ウインドウ幅固定
  • login.html 普通にログインして作業する用。ウインドウ幅可変。

Login・・・だと・・・


なんと、ソースコードを確認した上で自己責任で次の事をすると、Webからログインする機能が使えてしまいます!

1. classes/screenx.conf の設定を変え、サーバーを再起動
EnableLogin httpsでのログインを許可します。HttpsPort,KeyStoreFile,KeyStorePasswordも設定してください
EnableHttpLogin httpでもログインできるようにします。ログインパスワード以外はPlainTextです。危険度UP
EnableCometLogin Comet(WebSocketが使えない環境での代替策)でのログインを許可します。危険度さらにUP
LoginPassword チャレンジコード風の認証に使います。
DocumentRoot ここを空にする場合、httpフォルダ内のファイルをお使いのWebサーバ(Apache等)のディレクトリにコピーしてください
2. http/sxconfig.js を編集

ポートを変えたりhttpsを使う場合に書き換えてください。
また、WebSocketの使えない環境で動かす場合はforceCometをtrueにしてください。




アーキテクチャ


サーバーでUNIXのscreenコマンドをexecしてます。
そのscreenが吐く文字列(VT100エスケープシーケンス)をWebSocketで送っているだけ。
WebSocketが無いブラウザでは代わりにCometが使われます
そして、クライアント側ではjavascriptで書いた端末エミュレータがそれを解釈して表示しています。

※screenコマンドが吐くエスケープシーケンスは種類が少ないので、
 端末エミュレータはそれだけに絞って実装しました。楽だし確実。
 ちなみにscreenの代わりにbashをexecした場合、emacsの表示は結構崩れました。
 ちょっといじったら問題無く使えるようになりました。(2012 9/3)




まとめ。

名前の由来はscreenコマンドを-x引数で起動するからScreenXです。
NHKのProjectXみたいな語感が良いね。
では、リスクを承知の上で素敵ングなTerminal Broadcastingをお楽しみ下さい。