けさらんぱの自由帳

とあるFF14プレイヤーがFF14のこととか関係ないことを書いていく予定のブログです。記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

FF14をLinuxの仮想環境で動かす話・その1

今から1年ほど前、PS4FF14をしていたのですが、自宅サーバーとしても動かしているLinux PCと2台並んでいるのは結構邪魔なので、なんとか1台にしようとしていました。そこでWindowsLinuxデュアルブートのPCに切り換えようとしたのですが、デュアルブートも面倒なところがあるので、ふと仮想環境で動いちゃったりはしないだろうか、と思って試してみました。普通はWindows上でHyper-VとかVirtualBoxLinux環境を動かすものだと思うのですが、Windowsに個人的に不信感があって、PCの根っこを握られるのはできれば避けたい、という理由から、LinuxKVMWindowsFF14を動かそうとしたら結構動いてしまいました。

ただ、日本ではあまりデスクトップPCでLinux使う人が少ないし、Arch Linuxの記事を除くと、日本語ではLinuxの仮想環境でゲームをするという具体的な情報があまりありません。この記事では、誰かの役に立つのかどうかはわかりませんが、Arch Linuxの記事に従いながら、LinuxKVMFF14を動かしているうちの環境と設定を紹介していきます。

ちなみに、ベンチマークはこのくらいになります。ベアメタル環境で動かしたときから10%くらい性能劣化していると思います。

f:id:KesaranPa:20171030023559j:plain

準備

規約の確認

まずは規約の確認です。技術的に可能でも規約で禁止されていたらできません。ファイナルファンタジー® XIV ソフトウェア使用許諾契約を見ると

あなたのコンピュータ又は家庭用ゲーム機(本ソフトウェアによって適宜)にインストールして使用することができ

という書き方になっていて、仮想環境を禁止している雰囲気はなさそうです。

まあ…

(a) 本ソフトウェアを改変、リバースエンジニアリングによる解析、逆コンパイル、「ハッキング」又は逆アセンブルすること、 (中略) すべて禁止されています。

ってあるから、アレとかソレとかアウトのはずなんだけど、黙認されている現状だとねぇ…

とはいえ、規約の解釈は個人で行わないといけないものなので、この記事の内容は鵜呑みにせず各自で判断してください。

ハードウェア構成

うちのPCのハードウェア構成です。単純な仮想環境だと当然ゲームができる性能にはならないので、PCIパススルーというものを利用してGPUをパススルーします。PCIパススルーを利用する関係で、IntelのCPUの場合は システムがVT-x/VT-dに対応していることが必要 となります。

ホストOSソフトウェア環境

仮想環境を実現するためのソフトウェアの構成です。

基本的に現在の最新ですが、ovmfのみqemuの最新バージョンとの相性が悪いので、Testingから持ってきています。カーネルはRTパッチを当てなくてもいい、というかむしろ自力コンパイルも必要ないと思います(ほとんど趣味です)。

仮想環境構成

  • Machine: Q35
  • CPU: Intel Core i7-6700K(3コアのみパススルー)
  • RAM: 8GB
  • dGPU: GeForce GTX 1080(PCIパススルー)
  • xHCI: ASM1142(PCIパススルー)

iGPU(Intel CPU内蔵のGPU)、xHCIのうちSunrise Point-HはホストOS側で使用します。

次回から、具体的な話に入っていきます。

【FF14】エオルゼア時間とUNIX時間

以前エッダちゃんの撮影に成功したとき、もしかしたら出現条件にエオルゼアの暦が関係あるのではと思って、撮影時刻からエオルゼア時間を出すために地球時間とエオルゼア時間の対応を調べたことがあります。

現在時刻とエオルゼア時間の対応を見るだけであれば、FF14俺tools:エオルゼアカレンダーでわかります。自分で計算するときに役立つ情報も書いてあるので非常に助かりました。

俺toolsに書いてあることと一部被りますが、エオルゼア時間と地球時間の対応はこうなっています。

エオルゼア時間 地球時間
1時間(60分) 175秒
1日(24時間) 70分
1ヶ月(32日) 37時間20分
1年(12ヶ月) 18日16時間

俺toolsのページには日本時間1970/1/1 00:00:00がエオルゼア時間1/1/1 00:00:00に対応すると書いてありますが、日本時間は世界標準時の間違いだと思います。ちなみに世界標準時1970/1/1/ 00:00:00から経過した秒数をUNIX時間と呼び(Wikipediaの記事)、Cを始めいろいろなプログラム言語やOSで使用されているようです。

具体的に計算するのに、自分は下記のPythonスクリプトを使用しています。俺toolsのページと同じくエオルゼア時間での年が出てきますが、計算上の都合で出てくるものでそれ以上の意味はないはずです。

#!/usr/bin/python3

import sys
import time

def lt2et(lt):
    # UNIX時間を求める
    ut = time.mktime(lt)

    # エオルゼア時間1/1/1 00:00:00から経過した秒数を求める
    et_seconds = ut * 60.0 / 175.0
    # エオルゼア時間1/1/1 00:00:00から経過した時間を求める
    et_hours = ut / 175.0
    # エオルゼア時間1/1/1 00:00:00から経過した日数を求める
    et_days = et_hours / 24.0
    # エオルゼア時間1/1/1 00:00:00から経過した月数を求める
    et_months = et_days / 32.0

    # エオルゼア時間の年を計算する
    et_year = et_months / 12.0 + 1.0
    # エオルゼア時間の月を計算する
    et_month = et_months % 12.0 + 1.0
    # エオルゼア時間の日を計算する
    et_date = et_days % 32.0 + 1.0
    # エオルゼア時間の時刻を計算する
    et_hour = et_hours % 24.0
    et_minute = et_seconds % 60.0

    return et_year, et_month, et_date, et_hour, et_minute

if __name__ == "__main__":
    if len(sys.argv) < 3:
        lt = time.localtime()
    else:
        lt = time.strptime("%s %s" % (sys.argv[1], sys.argv[2]), "%Y-%m-%d %H:%M:%S")

    et_year, et_month, et_date, et_hour, et_minute = lt2et(lt)
    print("%4d-%02d-%02d %02d:%02d" % (int(et_year), int(et_month), int(et_date), int(et_hour), int(et_minute)))

【FF14】晩餐にはデューンフォークを

ララフェルがおいしいらしい という記事を見て、旧時代のことを思い出しました。

それは吉Pが来る前の話。 当時はコンテンツが少なくて、プレイヤーは毎日フルパーティ(当時は15人)でリーブをこなす、というのが普通でした。 その中でも特に報酬がおいしいと言われるリーブが3つあって、頭文字を取って「ペコ貪」と呼ばれていました。

自分もそういったリーブをやっていたのですが、ログインする時間が日本の他の人とずれていたので、外国の方が主催するパーティに参加することがありました。 そんなある日、主催の方が「D-leve」という言葉を口にしました。

「なんかかっこいい響きだけど、Dってなんだ? ペコ貪みたいに頭文字なのか?」 その時はさっぱりわからなかったので、後でクライアントを英語設定で再起動してみました。 結果的にこれは「ペコ貪」の「ペ」だった(「ペイスト狩り」だっけ?)のですが、その時に見たのがこれです。

f:id:KesaranPa:20170907124207p:plain

近年、この地域では天敵の不足により、ペイストの数が劇的に増加してしまった。 まずいことに、この甲鱗綱はぷっくりと太ったララフェルを好み、 よく丸呑みにして、その洞窟のような胃袋でゆっくりと消化し続ける。 ペイストの刺すような遠吠えは、実は喰われたばかりの犠牲者の悲鳴だとすら言われている…

ひいい! 日本語の説明にはこんなこと書いてないんですけど!? もしかして、英語を読まないララフェルの冒険者をおとりにしようとしているのでは… モモディさん!?!??

記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。