将棋倶楽部24をUbuntu + dockerで動かす

将棋倶楽部24は強者が集まるネット将棋として有名だが、残念なことにJava製である。

UbuntuをはじめLinuxではブラウザでJavaプラグインが動作しないようになっているので、ウェブ版は動かない。

アプリ版ももうかなり古くなったJava 8(しかもOpenJDKではなくOracle)を要求するので、そのために古いJavaを今の環境に入れたくない。

なのでdockerでコンテナにして動くようにしてみた。

結論

東京道場限定だが、後述の手順を使って作ったDockerイメージをDocker Hubにアップロードしているので、すぐ使いたい方は以下でOK。

xhost local:
docker run -it --rm -e DISPLAY -e QT_X11_NO_MITSHM=1 -e _JAVA_OPTIONS="-Duser.language=ja -Duser.country=JP" \
  -v /tmp/.X11-unix:/tmp/.X11-unix 330k/shogi24

※音を出す方法は未確認

Dockerイメージ作成

GUIでの操作が必要となったため、Dockerfile化できなかったが、以下の手順で同様のDockerイメージを作成できる。

現在はwebupd8teリポジトリが変わっており、同じDockerfileを使ってもOracle Java 8をインストールできないので、 過去に作られたOracle Java 8をインストール済みのイメージを起動。

xhost local:
docker run -it --rm -e DISPLAY -e QT_X11_NO_MITSHM=1 -v /tmp/.X11-unix:/tmp/.X11-unix relateiq/oracle-java8

以下はコンテナ内で作業。

# GUIの表示に必要なパッケージと日本語フォントをインストール
apt-get update
apt-get install libxtst6 libxi6 libxrender1 fonts-takao-pgothic -y
# 日本語フォントをJavaで使えるようにシンボリックリンクを作成
mkdir /usr/lib/jvm/java-8-oracle/jre/lib/fonts/fallback/
ln -s /usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf /usr/lib/jvm/java-8-oracle/jre/lib/fonts/fallback/
# 東京道場のjnlpファイルをダウンロード(他の道場を使いたい場合は変更)
cd /root
wget http://internet2.shogidojo.net/dojo/24TokyoDojo.jnlp

# 一度起動を試みる
javaws 24TokyoDojo.jnlp

すると、

Disabling Java as it is too old and likely to be out of date. To reenable use jcontrol utility

というメッセージが出るので、指示に従ってjcontrolを起動する。

jcontrol

Javaの設定画面が表示されるので、「Enable Java content in the browser」にチェックを入れて「OK」。

これで将棋倶楽部24が起動できるようになる。

もう一度起動。

javaws 24TokyoDojo.jnlp

最初の起動時だけ、起動を許可するか、ショートカットを作成するかどうかを聞かれるので回答しておく。

起動できたら一旦将棋倶楽部24を終了。

次に起動スクリプトを用意。

vi /entrypoint.sh
#!/bin/bash

/usr/bin/javaws /root/24TokyoDojo.jnlp

while :
do
  sleep 1
  PID=$(/bin/ps | /bin/grep java | /bin/sed -E 's/ *([0-9]+).+/\1/g')
  if [ "$PID" == "" ]; then
    break
  fi
done
chomd +x /entrypoint.sh

これで作業は完了なので、別ターミナルを立ち上げてDockerイメージにcommitする。 CONTAINER IDはdocker psで調べる。

docker commit --change='ENTRYPOINT [ "/entrypoint.sh" ]' (コンテナのCONTAINER ID)  (好きな名前)

コミットが出来たらコンテナに戻って終了する。

以降は起動したいときに、以下を入力すれば起動できる。

xhost local:
docker run -it --rm -e DISPLAY -e QT_X11_NO_MITSHM=1 -e _JAVA_OPTIONS="-Duser.language=ja -Duser.country=JP" \
  -v /tmp/.X11-unix:/tmp/.X11-unix (上で付けた名前)