艦これをiPhoneから快適にできるようにしようと思っていろいろやっているのだけれど、なかなか実用レベルにならない。すでに手段が目的化している感はありつつ、これから何回かにわたってやったことを書こうと思う。

艦これをiPhoneでやりたくて、FreeBSDに艦メモを入れてみたりしたんだけど、flashplayerが常駐していると無駄にCPUがぶん回るのと、スクリーンショットが取れないのが嫌だったので、やはりMacをサーバにしたい。
そのためには、出先からMacにアクセスする必要があるのだが、ノート型のMacは蓋が閉まっているとWake On Demandが使えない。
いろいろ調べたり試したりしたんけど、最終的にはDownload InsomniaX for Mac - Disable sleep mode on an Apple Laptop. MacUpdate.comに落ち着いた。
こいつを常駐させて「Disable Lid Sleep」にチェックを入れておくと、蓋を閉じてもsleepしなくなるので、出先からアクセスできるわけだ。
ちなみに、「CPU Safety」と言う設定があって、これにチェックが入っているとCPU温度が80℃を超えるとsleepするようになるんだけど、あっと言う間に80℃を超えてしまって使い物にならなかった。
なので、冬の間だけと割りきって運用することにする。(やはり母艦としてのMac miniが欲しいかな・・・)

さて、これで出先でiPhoneからiSSHとかで繋げるようになったのだけれど、OS Xの画面共有のサーバは8bit colorのクライアントから接続しようとすると切ってしまう。
また、MacBook Proは解像度もそれなりなので、VNCでの転送量が多く 3G 回線ではあまり快適にプレイできない。iPhoneの場合は通信量がある程度行くと速度制限がかかる問題もあり、通信量を減らしたい。
となると、OSの画面共有を使うのではなく、ゲーム画面だけを8bit color で転送できれば良いのだ。
艦メモはQtのQWebView上に艦これのページを表示しているけれど、画面キャプチャを取る機能がある。と言うことは、Qtでゲーム画面がキャプチャできると言うことなので、ならばそのままクライアントに転送することもできるはず、と考えた。
VNCのプロトコルとかもちょっと読んだりしたんだけど、自分で一から実装したらそれなりに大変そうである。QtにVNC Serverの機能がないかと思って調べてみたところ、Qt Embedded にはそんな機能があったっぽいが、今の最新のQtのデスクトップ版には見当たらない。QPAにあっても良いのに。
さらに調べていくと、LibVNCServer/LibVNCClient と言うものを発見。
C/C++から使えるVNC Serverの実装があるじゃないですか。
と、言うわけでこいつを使って艦メモの画面が飛ばせているわけだけど、まだ公開できるところまで行っていないので、前段としてLibVNCServerのMacへのインストールについて。

MacPortsを使う場合
MacPortsにはLibVNCServerのportがあるので、port install LibVNCServer 一発で・・・入らない。
エラーログを見ると、libintl.la が見つからない的なエラー。libintl.laについて調べると、gettextに入っているらしい。
と思って良く見ると、gettextはインストール済みだし、/opt/local/lib/libintl.dylibは存在している。
さらに調べていくと、delete_la_files yes for Mavericksから始まるスレッドを発見。
イマイチどう言うことだか理解していないんだけど、MacPortsのdelete_la_filesと言うオプションがデフォルトでyesになって、laファイルが消されるようになったように見える。
しょうがないので、/opt/local/etc/macports/macports.conf の最後に delete_la_files no と書いて、gettextを再インストールしてみたところ、今度はlibiconv.laがないと言われたので、iconvも入れなおした。
これで、LibVNCServerが入った。

Homebrewを使う場合
HomebrewにはLibVNCServerのFormulaがなかった。
ので、とりあえずソースからビルドすることにして、公式サイトのDonwloadから最新のソースを持ってくる。
configureすると、
==========================================================================
*** The libjpeg compression library was not found. ***
This may lead to reduced performance, especially over slow links.
If libjpeg is in a non-standard location use --with-jpeg=DIR to
indicate the header file is in DIR/include/jpeglib.h and the library
in DIR/lib/libjpeg.a.  You can also set the JPEG_LDFLAGS variable to
specify more detailed linker flags.  A copy of libjpeg-turbo may be
obtained from:  https://sourceforge.net/projects/libjpeg-turbo/files/
A copy of libjpeg may be obtained from:  http://ijg.org/files/
==========================================================================
とか言われる。(言われると言っても、ずらずらと流れるconfigureのlogの途中に出ているので、気をつけて見ていないと気が付かない)
そこで、brew install libjpegして再度configureすると、
==========================================================================
*** The libjpeg library you are building against is not libjpeg-turbo.
Performance will be reduced.  You can obtain libjpeg-turbo from:
https://sourceforge.net/projects/libjpeg-turbo/files/ ***
==========================================================================
とか言われる。そこで、brew uninstall libjpegして、brew install libjpeg-turboして、試してみると、また見つからないと言う。
そう言えば、libjpeg-turboをインストールしたときに、libjpegと喧嘩するから/usr/local/opt/jpeg-turboに入れるね♪とか言っていた気がする(ログ取ってない)
そこで、configureのオプションに--with-jpeg=/usr/local/opt/jpeg-turbo を付けて上げたら、無事に行けたような気がする。
homebrewは/usr/local/のオーナーが自分なので、sudoせずにmake installまで行ける。
ここまでやって、portsはどうなってるんだろう?と思ってみたところ、portsにはlibjpegはなくlibjpeg-turboしかない。(でもjpegとかopenjpegとかある)
そして、LibVNCServerのportの依存関係にあったのはjpegだった。
さて、せっかくビルドできたので、また野良Formulaを作ってみる。
Formula Cookbook · mxcl/homebrew Wikiに従い、brew createすると、
% brew create http://sourceforge.net/projects/libvncserver/files/libvncserver/0.9.9/LibVNCServer-0.9.9.tar.gz/download
Formula name [download]: 
Formula nameを聞かれた。これは、LibVNCServerのダウンロードURLが、ファイル名ではなくdownloadで終わっているせいだろう。そこで、LibVNCServer と入れてenterを押すと、勝手にファイルが作られてviが起動した。
後は、作られたファイルの中身とにらめっこしながら、消せって書いてあるコメントを消したり、homepageを埋めたり、依存関係を埋めたりして進めていく。
test のところが、デフォルトの実装だと受け入れないよ?とか書いてあるんだけど、ライブラリの場合に何を書けば良いのかわからなかったので放置した。本家にpull reqする度胸ないし。(良く考えたら、他のライブラリのFormulaを参考にすれば良かった)
動作確認をしたら、githubに"homebrew-"で始まるリポジトリを作り、そこにFormulaを置いておくと、brew tap で使えるようになる。
私の場合は、homebrew-local にしてみたので、false-git/homebrew-localになる。
これを他の人が使いたい場合は、以下のようにする。
% brew tap false-git/local
% brew install libvncserver

Qtのプロジェクトから使えるようにする
LibVNCServerが入ったので、こいつをQtから使えるようにする。
LibVNCServerはpkg-configに対応しているので、pkg-config --cflags libvncserver とすればコンパイル時に必要なオプションが得られるし、pkg-config --libs libvncserver とすればリンク時に必要なオプションが得られる。MacPortsで入れた人もHomebrewで入れた人も同じMakefileが使えるわけだ。
と言うわけで最初に書いたバージョン。
QMAKE_CXXFLAGS += `pkg-config --cflags libvncserver`
LIBS += `pkg-config --libs libvncserver`
これでも動くんだけど、みんながVNC Serverを使うわけでもないだろうから使うかどうかを外から指定できるようにしたくていろいろ調べていたら、そもそもQtがpkg-configに対応してそうなことがわかってきた。
そこで書いたバージョン2。
!isEmpty(WITH_VNC) {
    DEFINES += WITH_VNCSERVER
    CONFIG += link_pkgconfig
    PKGCONFIG += libvncserver
}
これで、qmakeを実行するときにqmake WITH_VNC=1とか書くと、libvncserverをリンクしてくれるはずだったんだけど、libvncserverが見つからないって言われる。
なんでだろー、と調べていくと、Using pkg-config with Qt Creator/qmake on Mac OSX - Stack Overflowと言うページを発見。OS Xの場合は、QT_CONFIGにno-pkg-configが指定されてしまっているので、わざわざそれを外してやる必要があると。
そこで最終形。
!isEmpty(WITH_VNC) {
    DEFINES += WITH_VNCSERVER
    QT_CONFIG -= no-pkg-config
    CONFIG += link_pkgconfig
    PKGCONFIG += libvncserver
    SOURCES += vncserver.cpp
    HEADERS += vncserver.h
    message("with VNCServer")
}
SOURCES += と HEADERS += については先の回で説明するとして、とりあえずこんな感じで書いて上げると、もしlibvncserverがインストールされていない状態で qmake WITH_VNC=1 すると、qmake時にエラーが出て教えてくれる。
さて、これでコマンドラインからビルドする分には困らなくなったんだけど、Qt Creatorからビルドしようとするとpkg-configが見つからなくてエラーになる。
なんでだろー、と(こればっかり)・・・。osx - Environment variables in Mac OS X - Stack Overflow
Macの場合は、DockとかSpotlightから起動するアプリはユーザのシェルじゃなくてlaunchdから起動される。このため、.zshrcとかに環境変数を書いておいても、Qt Creatorには影響しないのだ。
  • 「launchctl setenv 変数名 値」で環境変数が設定できる
  • でもログアウトしたら忘れるよ
  • ~/.launchd.conf に書いたらおk
  • 最近のOS Xだと効かないよ
  • ワークアラウンドとして、~/Library/LaunchAgents/local.launchd.conf.plist ってファイル作って、以下の内容書いとけ
みたいな流れかな。system wideのpathだったら、/etc/paths.d/ に書くって言う手もあるけど、rootに影響する環境には書きたくないのよね。

と、言うわけでここまでが準備編。次回は、LibVNCServerの使い方について触れていこうと思いますが、いつになるかわかりません。

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: 艦これをiPhoneで(1) 〜libvncserver〜

このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/3106

コメントする

このブログ記事について

このページは、falseが2013年12月 6日 21:52に書いたブログ記事です。

ひとつ前のブログ記事は「L2TP失敗」です。

次のブログ記事は「FreeBSD 9.2/amd64」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

広告

Powered by Movable Type 6.1.1