- Windows版Epic GamesクライアントをWineで動かせる環境を作るのは容易だがメモリを多く消費する
- 非公式なEpic Games対応ゲーム用のランチャ/管理ツールLegendary
- Legendaryのインストール
- Legendaryの操作
- Legendaryの設定ファイル
- LegendaryでProtonを使う
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