要約
macでgnubgのGUIを使いたかった。
Homebrewにはいないし、MacPortsはbrewと同居させたくないので、上の記事のような方法は取れなかった。
また、MacPortsで入るgnubgはバージョンが古く、Sequoiaにも対応していなさそうであった。
とりあえずmac上でビルドしてみたが動かなかった。XQuartzとの相性が悪そうである。
次にDocker上のUbuntuでビルドして実行。
CLIでは動くものの、やっぱりGUIを見たかったのでブラウザから見られるようにした。
追記
一通りビルドなどを試したのちに、そういえばrepoにあるだろうとgnubgをインストールしてみるとすんなり動いた。
新しめなUIになっているのはGTK3に対応させたかららしい。
さらに、Debianのunstableで最新版のgnubgをインストールし起動したら、XQuartz経由でGUIが動いた。
文字入力も可能であった。数マッチ行い解析も動かしてみたが、ほぼ問題なく(音声出力周りがエラー、ボードを3D表示にすると落ちるが)動作していた。これが一番手っ取り早そうだ。
環境
macOS: Sonoma 15.3.2
$ docker --version
Docker version 28.0.1, build 068a01e
以下で使用しているイメージはUbuntu24.04。
gnubgをビルドする
以下では、Docker上のUbuntuで作業している。
ライブラリとか。
apt install -U automake libtool bison flex libc6 pkg-config python-dev-is-python3 libglib2.0-dev libxml2-dev libfreetype6-dev libgtk2.0-dev libgtkglext1 libgtkglext1-dev libgstreamer1.0-dev libsqlite3-dev libreadline-dev
ソースをgnubgのリポジトリから落としてきて解凍してビルド。
./autogen.sh
./configure
make -j
ビルドが終わればmake install
してもよい。
以下のように、そのままの場所で使うときはデータの場所を--datadir
と--pkgdatadir
で指定する必要がある。
GUI環境ではまだ動かせないので--tty
を使いCLIで動くようにしておく。
./gnubg -D . -P . -t
これでCLI版が動く。
GUIの起動
gnubg→xvfb→x11nvc→novnc→ブラウザと色々経由して画面を出力する。
- xvfb: GUI出力をX11で仮想バッファに出力
- x11vnc: X11の出力をVNCで出力
- novnc: ブラウザ上で実行できるVNCクライアントを提供するwebサーバー
- websockify: websocketをTCPに変換
apt install xvfb x11vnc novnc
Xauthorityファイルを生成。
xauth -f ./Xauthority add :10 MIT-MAGIC-COOKIE-1 $(openssl rand -hex 16)
上から順番に以下を別々のターミナルで起動。
Xauthorityファイルの位置が間違っているとx11vncが起動しないので生成した場所に合わせる。
xvfb-run -f ./Xauthority -n 10 ./gnubg -D . -P . --display=:10 -s "-screen 10 1920x1080x24"
x11vnc -auth ./Xauthority -display :10 -rfbport 5910 -forever -localhost
websockify --web=/usr/share/novnc 8010 localhost:5910
docker側で8010番ポートを転送しておく。
これでhttp://localhost:8010/vnc.html
にアクセスすればVNCクライアントが開き、GUIで操作ができるようになる。
微妙な点
文字入力ができない。OS側で入力辺りのことを何もしてないからだろうか。
微妙に使いにくいウィンドウサイズになってしまっている。
参考文献
gdk_gl_window_impl_x11_make_context_current crash · Issue #273 · XQuartz/XQuartz
GNU Backgammon, Building gnubg from source on Ubuntu
gnubg.git, INSTALL
changelogs.ubuntu.com/changelogs/pool/universe/g/gnubg/gnubg_1.07.001-3build6/changelog