コーディング風景をリアルタイムで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をお楽しみ下さい。