背景
今年の4月ごろ、SLコマンドをEmscriptenでJavaScriptに変換してWeb上で動かすことに成功した。その時点からずっと、この逆にWebで動くJavaScriptを黒い画面(ターミナル)で動かしてみたいを思っていた。
フツーにnode.jsでtmlib.jsを動かすと
まず、canvasが必要になるが、これはnode-canvasが用意されている。
ansi-canvasを使えば、canvasへの描画を黒い画面に表示できる
node-canvasを黒い画面で動かすansi-canvasがある
エラーが出て動きませんでした。
ansi-vncとDockerを使えば
- ansi-vncという、前述のansi-canvasを応用して作ったコマンドラインベースのVNCクライアントがあった。
- DockerでVNCサーバーを動かし、Firefoxを動かすコンテナが公開されてる
この二つでtmlib.jsを黒い画面で動かせそうです!
ansi-vncのビルド
npmコマンドでインストールする前に、PKG_CONFIG_PATHを以下のように設定しないと手元のOSXの環境ではNGだった。
export PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig npm install -g ansi-vnc
ansi-vncとfirefox-vncの思わぬ落とし穴
firefox-vncはパスワードを1234と分かりやすい設定にしてくれているが、この数字だけというのが仇になっているansi-vncのコマンドラインのパースで数字のみのパスワードだと文字列として認識してくれません。
git clone https://github.com/creack/docker-firefox.git
firefox-vncで指定しているUbuntuが古い
パスワードをa1234と文字を含むように変更後、docker buildで完成!と行きたかったのですが、現在Ubuntu12.04だとビルドエラーとなってしまいました。
そこで、14.04に変更して、ビルドして無事、イメージを作ることが出来ました。
# Firefox over VNC # # VERSION 0.1 # DOCKER-VERSION 0.2 from ubuntu:14.04 # make sure the package repository is up to date #run echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list run apt-get update # Install vnc, xvfb in order to create a 'fake' display and firefox run apt-get install -y x11vnc xvfb firefox run mkdir /.vnc # Setup a password run x11vnc -storepasswd a1234 ~/.vnc/passwd # Autostart firefox (might not be the best way to do it, but it does the trick) run bash -c 'echo "firefox" >> /.bashrc'
黒い画面でTmlib.jsを動かし録画してみる
コンテナの起動
VNCクライアントの起動
OSXなら、ターミナルで、boot2docker ipしてDockerのIPアドレスを覚えます。
FinderでComamnd+Kでvnc://(ipアドレス):5900
結果
tmlib.jsの公式エディタのrunstantを黒い画面で動かしました。
ttyrec2gifだと残念な結果(□表示になってしまう)だったので、ttygifで録画したものを貼り付けました。
まとめ
今回紹介した、ansi-vncとDockerを使えば、X11で動くものは何でも黒い画面で動かすことが出来るようになります。
参考資料
関連投稿
- Dockerでninix-ayaを動かそうとしている中での気付き(その3)
- Dockerでninix-ayaを動かそうとしている中での気付き(その2)
- Dockerでninix-ayaを動かそうとしている中での気付き(その1)
- OSXでDocker使っていてssh接続で怒られる時に対処法
関連記事
- mrubyでWebカメラを黒い画面にそのまま表示できるようにした
- Dockerの画面をiPhoneに表示する
- Dockerで音を鳴らす
- OSXでDocker入れるとTimeMachineが遅くなるかも #solved
- Dockerやって色々勉強になってる件
- Docker入れてからのVirtualBoxのアップデート
- アメッシュの画像を表示するslackのボットをbotkitを使ってDockerイメージにしてherokuで動かした