2022/08/18

LinuxやmacOSでEpic Games公式クライアントを使わずにEpic Gamesのゲームで遊ぶ

  1. Windows版Epic GamesクライアントをWineで動かせる環境を作るのは容易だがメモリを多く消費する
  2. 非公式なEpic Games対応ゲーム用のランチャ/管理ツールLegendary
  3. Legendaryのインストール
    1. 本体
    2. Linuxにおける依存パッケージ
  4. Legendaryの操作
    1. Epic Gamesアカウントの認証(ログイン)
    2. 所有ゲーム一覧の表示
    3. インストールと更新
    4. ゲームの起動
  5. Legendaryの設定ファイル
    1. 設定ファイルのセクション
      1. Legendary
      2. default
      3. default.env
      4. ゲーム固有の設定
  6. LegendaryでProtonを使う
    1. Protonを使うメリット
    2. Protonを使う上での注意点
    3. Protonを起動するラッパーを用意する
    4. 設定ファイルの記述例

Windows版Epic GamesクライアントをWineで動かせる環境を作るのは容易だがメモリを多く消費する

SteamのWindows用ゲームは、Linux版Steamクライアントを使用しているx86_64 Linux環境では、Protonを用いることでWindows版Steamクライアントを用いずに簡単に動かせる。

その一方で、期間限定で特定の商用ゲームを無料で入手(アカウントに追加)できることで知られるEpic Gamesで配布・販売されているゲームを動かすための “Epic Gamesクライアント” のソフトは、2022年夏時点ではLinux版がない。

LutrisやBottlesなどのツールを用いると、Windows版Epic GamesクライアントをWineで動かせる環境を楽に作ることができるのだが、手元の低スペック環境(メモリは8GBでその中の1GBを内蔵グラフィックで使用)では同クライアントのメモリ使用量が多くて肝心のゲーム自体に割り当てられず、ゲームの動作速度低下の一因となってしまっている。

非公式なEpic Games対応ゲーム用のランチャ/管理ツールLegendary

https://github.com/derrod/legendary で開発されている “Legendary” と呼ばれる小さなPythonパッケージは、Epic GamesのWeb APIを利用しており、Epic Gamesアカウントの認証からゲームのインストール、Wine(Proton含む)を用いた実行などを行うことができる。対応OSにはLinuxやmacOSが含まれているが、WindowsでもPowerShellなどの端末環境で動作可能となっている。

手元の環境では、WineでWindows版のEpic Gamesクライアントを動かしてそこからゲームを起動するのに比べて大幅にメモリ使用量を削減できている上、管理の操作もコマンドで詳細に制御できるので便利に感じる。

更に、ゲームごとに詳細に環境変数やWineの実行環境の場所などを設定ファイルの形でカスタマイズできるのも非常に便利で、Windows版ランチャを動かす形にはもう戻れなくなった。

Legendaryのインストール

本体

PyPI(pipを用いてディストリに関係なくPythonスクリプトのパッケージがインストールできる公開場所)で公開されている本体パッケージを入れるのが最も簡単だが、最近取り込まれた変更は反映されていない場合がある。

(PyPIで公開されている本体のインストール)
$ python3 -m pip install legendary-gl[webview]

コマンド名はlegendaryとなるが、[ホームディレクトリ]/.local/bin/以下が環境変数PATHに含まれていない場合は追加しておく必要がある。

開発リポジトリからインストールする方法についてはそちらに記載されているため、ここでは扱わない。

Linuxにおける依存パッケージ

本体とは別に、PythonからCairoライブラリを用いるためのOS(ディストリ)のパッケージも必要で、Debian/Ubuntuではpython3-gi-cairoの名前のパッケージを指定してインストールする。

(Debian系ディストリでPythonからCairoを用いるパッケージをインストール)
$ sudo apt install python3-gi-cairo

Legendaryの操作

Epic Gamesアカウントの認証(ログイン)

(ログイン)
$ legendary auth

を実行するとEpic Gamesのログイン画面(2022年夏時点ではログイン方法の一覧からたどる形)がWebページに表示されるので、ログイン情報を入力して進める。

Webページ表示に必要なパッケージのインストール状況や--disable-webviewオプションの使用によっては既定のWebブラウザでログインページが開くが、うまく先に進まないことがある。

以降の操作のためには、このログイン情報の保存が必須となる。

保存されたログイン情報はauth--deleteを付けて実行することで破棄できる。

(ログイン情報の破棄・ログアウト)
$ legendary auth --delete

所有ゲーム一覧の表示

listを付けて実行すると、購入や無料配布でEpic Gamesアカウントに追加済みのゲームのタイトルと内部名(App name)、最新バージョン情報の一覧が取得できる。

$ legendary list

(注:以下は実際にはログインしたアカウントに追加済みのものが表示される)
Available games:
 * A Game Of Thrones: The Board Game Digital Edition (App name: 06b8b80d89c24a28a7e91127fcbd9542 | Version: 1.0.1.1377)
 * Amnesia: Rebirth (App name: f59de18db4dc445f88ffeff24d081234 | Version: 1.42)

 ...

 * Control (App name: Calluna | Version: 01.13)
 * Cook, Serve, Delicious! 3?! (App name: 680599141dc14accb456887a2be3ac0c | Version: 1.1)

 ...

 * Yooka-Laylee and the Impossible Lair (App name: Duckbill | Version: 1.0.28131)
 * ショップタイタン (App name: 329064225aaf4df29c4658f141173905 | Version: 4405)

Total: 68

インストールと更新

installを付けて実行すると、--base-pathオプションで指定した基本パス(省略時は~/Games/)または後述の設定ファイルの[Legendary]セクションにおいてinstall_dirで指定されている階層の下にゲームごとのディレクトリを自動的に作成してその中にデータをダウンロードしてインストールする。

引数にはゲーム名とApp nameのどちらも指定できるため、指定しやすいほうを指定する。ゲーム名はしばしば半角スペースを含むため、以降紹介する操作も含め、クォートで囲む必要がある。

(ゲーム名を指定する例)
$ legendary install "Cook, Serve, Delicious! 3?!"

(App nameを指定する例)
$ legendary install "Duckbill"

--game-folderで具体的なインストール先を指定する方法もあるが、ここでは扱わない。

installの代わりにupdateで更新、repairで修復の操作もできる。

既にゲーム本体がEpic Gamesのクライアントなどによりどこかにインストールされていてこれを登録したいならimportが便利。

(ゲーム本体が既にインストール済みでそれを登録して使いたい場合)
$ legendary import "Car Mechanic Simulator 2018" /path/to/already/installed/CarMechanicSim2018

importの後ろにはゲーム名と既にインストールされているゲームのディレクトリを指定する。

ゲームの起動

launchでゲーム名またはApp nameを指定することで、そのゲームをWineで実行できる。Protonを使いたい場合は別途設定ファイルを編集する必要がある。

("Cook, Serve, Delicious! 3?!" を起動)
$ legendary launch "Cook, Serve, Delicious! 3?!"

("Yooka-Laylee and the Impossible Lair" を起動)
$ legendary launch "Duckbill"

Legendaryの設定ファイル

設定ファイルに実行環境などの定義を書き込むことで、LinuxやmacOSでWineを用いる際の挙動をカスタマイズできる。

設定ファイルは、環境変数XDG_CONFIG_HOME

  • 定義済みの場合: ${XDG_CONFIG_HOME}/legendary/
  • 未定義の場合: [ホームディレクトリ]/.config/legendary/

のディレクトリにconfig.iniというファイル名で配置する。

設定ファイルのセクション

https://github.com/derrod/legendary#config-file

にサンプル設定ファイルと各項目に対する英語の説明があるので、参考にするとよい。

以下ではその一部についてを扱う。

Legendary

Legendary本体の各種設定。

default

各ゲーム共通の設定項目。

各項目の値を既定値として設定できるが、後述するゲーム固有のセクションを作ることで特定のゲームだけそちらを優先するようにもできる。

書式は[設定項目名] = [値]形式だが、設定項目名は用意されたものの中から選ぶ。

default.env

defaultと性質は近いが、環境変数の名前と値を[名前] = [値]形式で指定する。

例えば、環境変数WINEDEBUGは、値を-allにすると端末への出力を抑制してWineのメッセージ出力による動作速度低下を防ぐのに役立つが、そういったものはここで指定するのがよい。

Direct3D 9からDirect3D 11の全てのゲームにおいてDXVKのHUDでフレームレートを表示したい場合にDXVK_HUD = fpsなどをここに記述する。

ゲーム固有の設定

legendary listの出力で “App name” として表示された文字列をセクション名とすることで、ゲーム固有の設定をdefaultセクションと同様に記述できる。

同様にゲーム固有の環境変数設定を “App name” の後ろに.envの付いた名前のセクションにdefault.envと同様に記述することもできる。

[680599141dc14accb456887a2be3ac0c]
; "Cook, Serve, Delicious! 3?!" 用の設定を記述 ...

[680599141dc14accb456887a2be3ac0c.env]
; "Cook, Serve, Delicious! 3?!" 用の環境変数を記述 ...

実際に指定するものとしては

  • WINEPREFIX: ゲームごとにWineの実行環境を分けるのに使える
  • DXVK_CONFIG_FILE: DXVK用の設定ファイルを特定のゲーム向けに用意する必要がある場合に指定すると便利

などがある。

LegendaryでProtonを使う

Protonを使うメリット

  • ゲームを動かす用途にチューニングされており、動作速度で有利な可能性がある
  • 動画などのコーデックが同梱されている上にその場所も自動的に指定されるため、コーデックまわりの互換性で不具合が出にくい

などがある。

Protonを使う上での注意点

Protonは

  • STEAM_COMPAT_CLIENT_INSTALL_PATH(Steamのインストールされているディレクトリの下にあるlegacycompatディレクトリへの絶対パス)
  • STEAM_COMPAT_DATA_PATH(Proton用のWine実行環境の絶対パス)

の環境変数の指定が必須となっているが、これらを手動で指定する実行方法は公式にはサポートされておらず、実行の仕方が今後変更される可能性もある。また、Linuxのディストリのバージョンが古すぎると、ビルド済みのProton(GE版なども含む)をダウンロードした場合にバイナリ互換性の関係で正しく動作しない可能性もある。

Protonを起動するラッパーを用意する

基本的にはProtonのprotonスクリプトにwaitforexitandrunそして引数として実行ファイルの場所を指定する形のシェルスクリプトをラッパーとして用意し、実行属性も付けておく。Linux版Steamがインストールされている必要もあり、その場所の指定も必要。

[任意]ファイル名:~/.local/bin/proton-wrapper

#! /bin/sh
# GE版Protonを用いた例
# 実際の配置場所に合わせて記述する
~/.local/share/Steam/compatibilitytools.d/GE-Proton7-xx/proton waitforexitandrun "${@}"

特定のバージョンのProtonを用意して選択したい場合はラッパーのスクリプトをバージョンごとに複数作成しておく。

設定ファイルの記述例

[一部]ファイル名: ${XDG_CONFIG_HOME}/legendary/config.ini または ~/.config/legendary/config.ini

[default]
; インストールの際 "--base-path" を指定しない限り
; このディレクトリの下にゲーム名のディレクトリが配置される
install_dir = /path/to/games/epicgames
; Protonを用いるためのラッパー(スクリプト)の場所を記述
wrapper = /home/user/.local/bin/proton-wrapper
; ゲームの実行にWineコマンドを使わないようにする(代わりにラッパーを使う)
no_wine = true

[default.env]
; Protonを使うには、Linux版Steamがインストールされている場所の下にある
; "legacycompat" ディレクトリの絶対パスの指定が必要
; Protonのバージョンによらず共通して使えるため、このセクションに記述
STEAM_COMPAT_CLIENT_INSTALL_PATH = /home/user/.local/share/Steam/legacycompat

[8032b75cf0914afa87c78d6914adc165]
; 例として、特定のバージョンのProtonでバージョンを固定するために
; 専用のラッパーを用意することにする
wrapper = /home/user/.local/bin/proton-wrapper-ge-7-xx

[8032b75cf0914afa87c78d6914adc165.env]
; Proton用のWine環境をゲームごとに分けて用意して使うための記述
; 空のディレクトリをこの場所に事前に作成しておく
STEAM_COMPAT_DATA_PATH = /path/to/proton_prefix/for/car_mechanic_simulator_2018

[680599141dc14accb456887a2be3ac0c.env]
; 別のゲーム(Cook, Serve, Delicious! 3?!)専用のWine環境の場所
STEAM_COMPAT_DATA_PATH = /path/to/proton_prefix/for/cook_serve_delicious_3
使用したバージョン:
  • Python 3.10.4
  • Legendary 0.20.27