WindowsのSteamゲームをProtonでプレイする【Ubuntu, Windowsデュアルブート】

UbuntuWindowsデュアルブートをしている場合、Windows側に入っているゲームをUbuntuから遊びたいときがあるかと思います。
今の時代は便利なもので、それが可能です。

では手順を紹介します。
基本的に下記サイトの日本語訳になります。

anthonyvadala.me

前提として必要なもの

NVIDIAGPUのドライバーが必要です。 これはすでにいれてあるものとします。

バージョンの更新は↓を参考にしてください。

NVIDIA

  sudo add-apt-repository ppa:graphics-drivers/ppa
  sudo apt install nvidia-driver-418

AMD/Intel

  sudo add-apt-repository ppa:paulo-miguel-dias/pkppa
  sudo apt dist-upgrade
  sudo apt install mesa-vulkan-drivers mesa-vulkan-drivers:i386

Radeon R9 200/300 series

  echo "blacklist radeon" | sudo tee --append /etc/modprobe.d/blacklist.conf
  echo "options amdgpu si_support=1 cik_support=1" | sudo tee --append /etc/modprobe.d/amdgpu.conf
  sudo update-initramfs -u

Python3とPython Minimalも必要です

aptでインストールしておきましょう。

sudo apt install python3
sudo apt install python-minimal

Steamも入れておきましょう

公式サイトから簡単にインストールできます。

store.steampowered.com

ディスクを見つける

Windowsに入っているゲームを遊ぶには、Windowsが入っているHDDもしくはSSDをマウントするという作業が必要になります。
これはファイルアプリからもできるのですが、それだと問題が生じることがある(実際に筆者はゲームが起動できなかった)のでターミナルから設定を行います。

デュアルブートを一つのHDD/SSDで管理している場合は必要ないかもしれません。)

Ubuntuでターミナル(端末)を起動してください。
Windowsの入っているHDDもしくはSSDを探してきます。

下記コマンドを実行してください。

sudo fdisk -l

すると下記のような出力がされると思います。

...
Disk /dev/sda: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 2E9F174D-53CA-42AD-9CD4-DF7CA90B0C7A

Device      Start        End    Sectors  Size Type
/dev/sda1      34     262177     262144  128M Microsoft reserved
/dev/sda2 264192 7814035455 7813771264 3.7T Microsoft basic data
...

ここで、/dev/sd**と書かれているのがディスクになります。
自分がマウントしたいディスクがどれか確認しましょう。

これはUbuntuのファイルアプリで確認することもできます。

f:id:tmls:20201125220826p:plain

ここでは/dev/sda2をマウントしたいとします。
UUIDを知るために、下記のコマンドを実行してください。

sudo blkid
このような実行結果が得られると思います。

...
/dev/sda1: UUID="0CAEEC94AEEC781A" TYPE="ntfs" PARTUUID="1e6ca286-01"
/dev/sda2: UUID="50E2054BE205372E" TYPE="ntfs" PARTUUID="1e6ca286-02"
...

今回は、sda2をマウントしたいのでUUIDは50E2054BE205372Eになります。

マウント設定

Ubuntuの起動時に自動でディスクをマウントするように設定します。

まずは、マウント先となるディレクトリを作成しましょう。

sudo mkdir /media/gamedisk

次に、自分のユーザーIDとグループIDを知っておく必要があります。
これは下記コマンドで確認できます。

ユーザーID

id -u

グループID

id -g

基本的にデフォルトでどちらも1000が設定されていると思いますが、一応確認しておいてください。

FSTAB

続いてマウントするために、/etc/fstabを編集します。
お好きなエディタで開いてください。

sudo vim /etc/fstab

ファイルの最後に下記の1行を追加してください。(UUIDやUID, GIDは自分のものに置き換えてください)

...
UUID=38CE9483CE943AD8 /media/gamedisk ntfs uid=1000,gid=1000,rw,user,exec,umask=000 0 0

保存したら、一度再起動を行います。

reboot

NTFS読み込みエラーへの対処

(筆者はここは飛ばしてしまったのですが... 今のところは問題ないです...)

Windowsが読み込めない文字はディスクエラーを引き起こす可能性があります。(ゲームが起動できない原因になります)
多くの場合自動で生成されるファイルに含まれる ; が問題になりやすいです。

この修正はシンプルで、Ubuntu/compatdataフォルダからマウントしたディスクにシンボリックリンクを作成します。

ln -s ~/.steam/steam/steamapps/compatdata /media/gamedisk/Games/Steam/steamapps/

もしマウントしたディスクに 既に/compatdataが存在するなら、シンボリックリンクを作る前に削除しておいてください!

Steam Protonを有効化

Steamを開いてください。 左上のSteam > 設定 > Steam Play をクリック。

下記の項目にチェックが入っていることを確認してください。

  • サポートされたタイトルでSteam Playを有効化
  • 他のすべてのタイトルでSteam Playを有効化

Steamライブラリフォルダを追加

既にWindowsに入っているゲームを参照できるようにします。
Steam > 設定 > ダウンロード > STEAMライブラリフォルダ をクリックしてください。

続いて、ライブラリフォルダを追加します。
自分のSteamフォルダを指定してください、私の場合は/media/gamedisk/Program Files (x86)/Steam/でした。
そのまま、今追加したフォルダを右クリックしてデフォルトフォルダに設定しておいてください。

OKを押して、Steamを再起動すると全ゲームで多少のダウンロードが始まります。
ダウンロードが完了するとついに、Windowsでインストールしていたゲームが遊べるようになります!

どのゲームが動くのか

↓のウェブサイトでは、ゲームがどれくらい正しく動作するかが募られています。

www.protondb.com

もし自分の手を汚すのを気にしないなら、バグを修正したりパフォーマンスを出せる設定が書かれていたりしますよ。