備忘録的なもの

Arch Linux で Steam Play ( Proton ) を試す

Arch Linux に Steam をインストールした際の作業メモ。

正月に実家に戻っていてやることがあんまりなかったのと、 日本でも最近発売された Steam Deck が ArchLinux ベースの OS かつ互換レイヤー( Proton )でゲームを動かしている、 という話も思い出したので自分でも試してみようと思った次第。

実家に持ち帰っていたノート PC は元々ゲームをやるつもりで買ってなかったが、 Linux の Steam で不自由なくゲームできる感じであれば、 次買い換えるときにゲーム想定したスペックにしても良いかもと思ったのもある。

事前確認

ArchWiki に記事があったので参考にした(ホントに何でもあるなと思っている)。

記事の最初の方に Steam 実行の要件がまとまっている。

multilib リポジトリを有効にして、steam パッケージをインストールします。

Arch Linux で Steam を実行するには、以下の要件を満たす必要があります。

  • 32 ビット版の OpenGL graphics driver をインストールします。
  • en_US.UTF-8 ロケールを生成して、無効なポインタエラーを防ぎます。
  • GUI は Arial フォントを多用しています。MS フォント を参照してください。別の方法は、代替として ttf-liberation や Steam が提供するフォント を使うこともできます。
  • アジア言語のサポートを追加するには、wqy-zenhei をインストールしてください。
  • ネットワーク管理に systemd-networkd を使用している場合は、Steam がサーバーに接続できるようにするために lib32-systemd をインストールしてください。

自分の環境に照らしてみると

  • steam は 32bit 版のみなので multilib リポジトリにあるが、自分のマシンでは multilib リポジトリは有効化してなかったのでまずこれが必要
  • 32bit版の OpenGL graphics driver ( lib32-mesa )はインストールしてないのでこれも必要
    • とはいえ steam パッケージの依存関係に入っているので別個作業は要らなかった
  • en_US.UTF-8 ロケールは元々 OS インストール時に生成済だったので不要
  • Google Chrome の依存関係で ttf-liberation がインストール済だったのでフォントのインストールは不要
  • 一応日本語にするので wqy-zenhei のインストールは要る
  • ネットワーク管理には NetworkManager を使っているので lib32-systemd は不要

という感じ。

インストールと設定

実際にインストールと設定作業としてやったことのメモ。

multilib の有効化

今回は Arch Linux の公式リポジトリからインストールするが、 steam が 32bit アプリケーションのため、まず multilib リポジトリを有効化してインストールできるようにする。

pacman の設定ファイルをこんな感じで修正。

❯ diff -u /etc/pacman.conf.orig /etc/pacman.conf
--- /etc/pacman.conf.orig	2022-12-24 05:37:01.990854545 +0900
+++ /etc/pacman.conf	2023-01-14 07:57:55.408805885 +0900
@@ -90,8 +90,8 @@
 #[multilib-testing]
 #Include = /etc/pacman.d/mirrorlist
 
-#[multilib]
-#Include = /etc/pacman.d/mirrorlist
+[multilib]
+Include = /etc/pacman.d/mirrorlist
 
 # An example of a custom package repository.  See the pacman manpage for
 # tips on creating your own repositories.

リポジトリ DB を同期する。(自分の環境では AUR のパッケージも色々使ってる関係で pacman じゃなくて yay だが)

❯ yay -Sy
:: Synchronizing package databases...
 core is up to date
 extra                                                  1740.2 KiB  5.43 MiB/s 00:00 [################################################] 100%
 community                                                 7.2 MiB  13.9 MiB/s 00:01 [################################################] 100%
 multilib                                                163.4 KiB   961 KiB/s 00:00 [################################################] 100%

各種パッケージインストール

必要なものを一式インストールする。

一式とはいえ、本体である steam パッケージの依存関係にほぼほぼ含まれていたので、 あれこれ指定する必要は無く steam パッケージ以外は日本語化のための wqy-zenhei を指定するくらい。

インストール中に出てくる Vulkan ドライバーとしてどれを使うかは環境に応じて適宜選ぶ。
(今回作業しているマシンは Intel CPU + 内蔵GPUという構成なので vulkan-intel lib32-vulkanintel で進めている)

❯ yay -S steam wqy-zenhei
resolving dependencies...
:: There are 6 providers available for vulkan-driver:
:: Repository extra
   1) amdvlk  2) nvidia-utils  3) vulkan-intel  4) vulkan-radeon  5) vulkan-swrast  6) vulkan-virtio

Enter a number (default=1): 3
:: There are 5 providers available for lib32-vulkan-driver:
:: Repository multilib
   1) lib32-amdvlk  2) lib32-nvidia-utils  3) lib32-vulkan-intel  4) lib32-vulkan-radeon  5) lib32-vulkan-virtio

Enter a number (default=1): 3
looking for conflicting packages...
warning: dependency cycle detected:
warning: lib32-mesa will be installed before its lib32-libglvnd dependency
warning: dependency cycle detected:
warning: lib32-keyutils will be installed before its lib32-krb5 dependency

Package (72)                      New Version              Net Change  Download Size

extra/bubblewrap                  0.7.0-1                    0.08 MiB       0.04 MiB
extra/harfbuzz-icu                6.0.0-1                    0.02 MiB       0.01 MiB
extra/hyphen                      2.8.8-5                    0.03 MiB       0.02 MiB
multilib/lib32-alsa-lib           1.2.8-1                    1.10 MiB       0.38 MiB
multilib/lib32-alsa-plugins       1.2.7.1-1                  0.30 MiB       0.07 MiB
multilib/lib32-brotli             1.0.9-5                    0.80 MiB       0.31 MiB
multilib/lib32-bzip2              1.0.8-3                    0.07 MiB       0.03 MiB
multilib/lib32-curl               7.87.0-1                   0.67 MiB       0.29 MiB
multilib/lib32-e2fsprogs          1.46.5-1                   0.56 MiB       0.23 MiB
multilib/lib32-expat              2.5.0-2                    0.18 MiB       0.07 MiB
core/lib32-gcc-libs               12.2.0-1                 107.52 MiB      29.78 MiB
core/lib32-glibc                  2.36-6                    18.01 MiB       3.38 MiB
multilib/lib32-icu                72.1-2                    35.50 MiB      10.31 MiB
multilib/lib32-keyutils           1.6.3-1                    0.02 MiB       0.01 MiB
multilib/lib32-krb5               1.20.1-1                   2.40 MiB       0.83 MiB
multilib/lib32-libcap             2.66-1                     0.07 MiB       0.03 MiB
multilib/lib32-libdrm             2.4.114-1                  0.38 MiB       0.14 MiB
multilib/lib32-libelf             0.188-1                    2.43 MiB       0.55 MiB
multilib/lib32-libffi             3.4.4-1                    0.04 MiB       0.02 MiB
multilib/lib32-libgcrypt          1.10.1-2                   0.98 MiB       0.43 MiB
multilib/lib32-libglvnd           1.6.0-1                    1.33 MiB       0.20 MiB
multilib/lib32-libgpg-error       1.46-1                     0.14 MiB       0.06 MiB
multilib/lib32-libidn2            2.3.4-2                    0.12 MiB       0.05 MiB
multilib/lib32-libldap            2.6.3-3                    0.45 MiB       0.17 MiB
multilib/lib32-libpciaccess       0.17-1                     0.04 MiB       0.02 MiB
multilib/lib32-libpsl             0.21.1-3                   0.07 MiB       0.06 MiB
multilib/lib32-libssh2            1.10.0-2                   0.28 MiB       0.10 MiB
multilib/lib32-libtasn1           4.19.0-1                   0.09 MiB       0.04 MiB
multilib/lib32-libtirpc           1.3.3-2                    0.20 MiB       0.08 MiB
multilib/lib32-libunistring       1.1-1                      1.71 MiB       0.51 MiB
multilib/lib32-libunwind          1.6.2-2                    0.17 MiB       0.05 MiB
multilib/lib32-libx11             1.8.3-1                    1.33 MiB       0.62 MiB
multilib/lib32-libxau             1.0.11-1                   0.01 MiB       0.01 MiB
multilib/lib32-libxcb             1.15-2                     1.01 MiB       0.19 MiB
multilib/lib32-libxcrypt          4.4.33-1                   0.16 MiB       0.07 MiB
multilib/lib32-libxdamage         1.1.6-1                    0.01 MiB       0.01 MiB
multilib/lib32-libxdmcp           1.1.4-1                    0.02 MiB       0.01 MiB
multilib/lib32-libxext            1.3.5-1                    0.08 MiB       0.03 MiB
multilib/lib32-libxfixes          6.0.0-2                    0.02 MiB       0.01 MiB
multilib/lib32-libxml2            2.10.3-2                   1.48 MiB       0.56 MiB
multilib/lib32-libxshmfence       1.3.2-1                    0.01 MiB       0.00 MiB
multilib/lib32-libxss             1.2.3-2                    0.01 MiB       0.01 MiB
multilib/lib32-libxxf86vm         1.1.5-1                    0.02 MiB       0.01 MiB
multilib/lib32-llvm-libs          14.0.6-3                 121.49 MiB      30.60 MiB
multilib/lib32-lm_sensors         1:3.6.0.r41.g31d1f125-2    0.06 MiB       0.02 MiB
multilib/lib32-mesa               22.3.3-1                  67.84 MiB      10.21 MiB
multilib/lib32-ncurses            6.4-1                      0.59 MiB       0.22 MiB
multilib/lib32-nspr               4.35-1                     0.29 MiB       0.11 MiB
multilib/lib32-nss                3.87-1                     3.07 MiB       1.12 MiB
multilib/lib32-openssl            1:3.0.7-1                  4.90 MiB       1.76 MiB
multilib/lib32-p11-kit            0.24.1-1                   2.44 MiB       0.34 MiB
multilib/lib32-pam                1.5.2-1                    0.80 MiB       0.16 MiB
multilib/lib32-sqlite             3.40.1-1                   1.39 MiB       0.65 MiB
multilib/lib32-systemd            252.4-1                    1.95 MiB       0.64 MiB
multilib/lib32-vulkan-icd-loader  1.3.235-1                  0.55 MiB       0.14 MiB
multilib/lib32-vulkan-intel       22.3.3-1                  18.25 MiB       2.94 MiB
multilib/lib32-wayland            1.21.0-1                   0.16 MiB       0.05 MiB
multilib/lib32-xz                 5.4.1-1                    0.22 MiB       0.10 MiB
multilib/lib32-zlib               1.2.13-2                   0.09 MiB       0.05 MiB
multilib/lib32-zstd               1.5.2-1                    0.63 MiB       0.24 MiB
community/libmanette              0.2.6-3                    0.38 MiB       0.05 MiB
extra/libwpe                      1.14.0-1                   0.30 MiB       0.05 MiB
community/lsb-release             2.0.r48.3cf5103-1          0.02 MiB       0.01 MiB
core/usbutils                     015-2                      0.31 MiB       0.09 MiB
extra/vulkan-intel                22.3.3-1                  17.29 MiB       2.80 MiB
extra/webkit2gtk-4.1              2.38.3-1                  82.65 MiB      23.96 MiB
extra/woff2                       1.0.2-4                    0.17 MiB       0.06 MiB
extra/wpebackend-fdo              1.14.0-1                   0.13 MiB       0.04 MiB
extra/xdg-dbus-proxy              0.1.4-1                    0.05 MiB       0.02 MiB
extra/zenity                      3.43.0-1                  10.53 MiB       2.97 MiB
multilib/steam                    1.0.0.75-1                 3.62 MiB       3.43 MiB
community/wqy-zenhei              0.9.45-9                  16.02 MiB       7.54 MiB

Total Download Size:   140.16 MiB
Total Installed Size:  536.12 MiB

:: Proceed with installation? [Y/n] 

ということで依存関係含めると色々あるがインストールする。

インストールが完了したら /usr/share/applications/ にエントリが作成されるので、 各種デスクトップ環境のランチャーから起動できるようになるはず。

❯ ls -lh /usr/share/applications/steam.desktop
-rw-r--r-- 1 root root 7.4K Aug 30 06:12 /usr/share/applications/steam.desktop

Xfce の Application Finder の場合

Xfce の Application Finder の場合

で、起動すると Steam クライアントのアップデートチェック等で少し待った後サインイン画面になるので、自分のアカウントでログインする。

起動後のSteamクライアントのサインイン画面
隠す必要あるのか謎だがQRコードは一応ぼかし

ということで Steam のインストール作業自体は完了。

ちなみにアップデートが完了したあたりのタイミングで ~/Desktop/ にエントリが作成される。 (中身は先に作成されたものと同じ)

❯ ls -lh ~/Desktop/steam.desktop
-rwx--x--x 1 shida shida 7.4K Jan 14 08:14 /home/shida/Desktop/steam.desktop

Steam Play (Proton) の有効化

ここまでで Linux 版 Steam として Linux にネイティブ対応しているゲームはインストールしてプレイできるようになったが、 Linux 非対応のゲームの場合こんな感じで「AVAILABLE FOR WINDOWS」とかになってインストールボタンが無効化されているのでインストールできない。

ライブラリのLinux非対応のゲーム

なので Steam Play ( Proton )を有効化 1 して Linux 非対応のゲームもインストール、起動できるようにする。 有効化は Steam クライアントの設定画面からできる。

Steam Play (Proton) の有効化

上が Steam で検証済のタイトルを実際に Steam Play で動かすかどうか、下が未検証のものも試せるようにするかどうか。今回は両方有効化した。

未検証のゲームを動かすときに使う Proton のバージョンとしては古いものも含め色々選べるが、基本的には標準版( Proton x.x-x みたいなやつ)の最新バージョンを選んでおけば良いだろうと思う。 まぁ Proton のバージョン切り替えに時間かかるとかでも無いので、あんまり深く考えず適当に選んで何か不都合でたら切り替えながら試す、くらいで良さそうではあるが。

Proton は GitHub にリポジトリがあるが、パッチ毎のリリースノートを見ると「個別タイトルの〇〇を修正しました」みたいなこともいろいろ書いてるので、こっちも眺めてみると面白いかもしれない。

ここを見た感じ、だいたい数ヶ月くらいの間隔でリリースされているが、 Proton の新しいバージョンが出たときに設定がどうなるのか謎(今の設定が維持されるのか勝手に新しいバージョンになるのか)なので、時々見てみると良いかもしれない。

互換ツールということでタイトルによって動いたり動かなかったりバグったりするが、個々のタイトルがどの程度動くかは ProtonDB というサイトが参考になる。

また、 FAQ によると複雑なアンチチートシステムや DRM (コピープロテクトとか)を使ってるゲームは難しいかもとのこと。 競技色の強いオンラインゲームの類や、すごい金のかかったタイトルに関しては上手く動かないケースが多くなるのかもしれない。

引用 : Steam :: Steam for Linux :: Introducing a new version of Steam Play

Q: Are there any games that will never work with Proton?

It’s likely that some games using complex DRM or anti-cheat systems will be difficult, or even impossible to support.

日本語化

Steam クライアントの日本語化もしておく。

Steam クライアントでの言語設定は、Steam アカウントの設定や OS のロケールを参照するわけでなく、アプリケーションの設定として持っているらしい。 Steam クライアントメニューバーの Steam > Settings > Interface から設定できる。

Steamクライアントの言語設定

余談だが、インストール時に日本語化のために入れた wqy-heizen パッケージを削除してみたところ、 日本語化自体はできるが、タスクバー部分の日本語が豆腐になっていた。 そこ以外(クライアント画面とか設定画面とか)は豆腐になってたり文字化けしている部分は見つけられなかったので、 正直無くても困りはしなさそうだったが、必要は必要っぽい。

スケーリング解像度の無効化

これは使っているモニターに依ると思う 2 のだが、デフォルトで拡大設定がされていて個人的に見辛い。

具体的には27インチ4Kのモニターでこんな感じで見える。(Chrome やタスクバーと比較するとかなり拡大されてるのが分かる)

スケーリング解像度の無効化前

この機能も人によっては有効にしておきたい場合もあると思うのだが、個人的には要らないので無効化する。 (拡大したいなら Steam クライアントではなくデスクトップ環境あたりの設定でやると思う)

これも同じくインターフェースの設定から無効にできる。

Steamクライアントのスケーリング設定

ここがデフォルトでチェックついているので、チェックを外して Steam クライアントを再起動すると期待した通りになる。

スケーリング解像度の無効化後

動かした感じ

怒首領蜂大復活と Little Witch Nobeta を軽く動かした感じ、音がおかしかったり体感できる遅延があったりということも無く普通に動いた。 (今回試したマシンのスペックが i5-7260U +内蔵GPUとかいうゲームを全く想定してないモノだったので Little Witch Nobeta に関してはまぁまぁカクカクだったが)

LittleWitchNobeta を動かした様子
Steam クライアントの方で「Steam Play を経由してこのコンピュータで実行」と出てるので、 Proton で動いているのが分かる。

あとがき

何のゲームだったかは忘れたが10年くらい前に前に Windows 用のゲームを Wine で動かしたことがあって、 その時は結構苦労した記憶があるのだが、それに比べるとインストールから起動まで面倒な設定もなければ特に詰まることもなくスムーズに進んだ。

プレイに関してもちょっと動かした限りでは不具合も違和感もなく普通に遊べている。 (改めて考えたら Steam Deck みたいなハード出せるくらいなのでそりゃ商品になるくらいの完成度だよな、という気もする)

という感じで、(自分のPCのスペックがアレだったことを除けば)ほんとに普通にプレイできる感じだったので次ノートPC買う時はある程度ゲーム想定のスペックを検討しようかなと思う。

また、記事の途中で複雑な DRM やアンチチートシステムを使っていると Proton でも上手く動かないケースが多くなるかもとは書いたが Steam Deck の影響もあってかこういった動きもあるらしい。 将来的にどうなるかはまだ分からないが、上手く行って欲しいと切に思う。


  1. Steam Play はゲーム側で非対応の OS で互換ツールを使ってプレイ(テスト)できるようにする仕組みで、Proton はその互換ツールの内の一つ、という理解が正しそう。 ↩︎

  2. 13.3インチのフルHDモニターのノートPCでやったら特に拡大されていなかったので、解像度を認識してよしなにやってるんだろうと思う。 ↩︎