Featured image of post 在 GNU/Linux 和 Windows 間共享 Steam 遊戲庫

在 GNU/Linux 和 Windows 間共享 Steam 遊戲庫

終於不用一份遊戲裝兩遍了。

得益於與 Steam Deck 一同而來的 Proton,在常見的 GNU/Linux(以下簡稱 Linux)發行版上暢玩各類原本在 Windows 上才有的 3A 大作成為完全可行的選擇,最近我也進行了這方面的嘗試,效果已經較為理想,但隨之而來的是一個問題,我總不可能把動輒上百G的遊戲全都重新裝一遍吧?硬盤沒空間了不說,這麼麻煩還不如切回 Windows 玩呢。

出現$代表是終端命令,下面跟著的是命令執行後的輸出。

掛載 Steam 庫所在的分區

起初我試圖直接在 GUI 上掛載分區,但這樣會遇到莫名其妙的問題,有這個想法的朋友請不要跳過這一部分。

找到目標分區的 UUID

1
2
3
4
5
6
$ sudo blkid
/dev/nvme1n1p8: UUID="421a3d00-81a8-4112-a2df-4d234c674a24" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="84e56276-a585-412c-9bf5-0071b2b4d4da"
/dev/loop1: TYPE="squashfs"
/dev/nvme0n1p1: PARTLABEL="Microsoft reserved partition" PARTUUID="bbdb2720-6722-42b3-80f5-385332da77c3"
/dev/nvme0n1p2: LABEL="Vault" BLOCK_SIZE="512" UUID="DC64DA2064D9FCE8" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="f884fe24-1c4d-4650-9847-d2f83b9a93ba"
......

如果你能在類似「磁盤管理」的應用裡查到目標分區的 UUID,也可以直接使用。

能查到 UUID 就行

查詢用戶 ID 和組 ID

1
2
3
4
$ id -u
1000
$ id -g
1000

默認狀態下,這兩個值都是1000

創建掛載點並修改 fstab

1
2
$ sudo mkdir /media/gamedisk
$ sudo nano /etc/fstab

這裡也可以使用任何你喜歡的編輯器。

在文件的末尾加上:

UUID=DC64DA2064D9FCE8 /media/gamedisk lowntfs-3g uid=1000,gid=1000,rw,user,exec,umask=000 0 0

如果你之前已經掛載過這個硬盤,請刪除之前掛載產生的那一行。

大小寫敏感可能會導致問題,這裡使用的是lowntfs-3g,掛載後的 NTFS 卷將不會大小寫敏感,以免出現因大小寫敏感而找不到遊戲文件的問題。1

防止出現 NTFS Read Error

⚠️注意:有報告稱這樣操作可能會造成數據丟失,請自行斟酌並承擔風險。

由於 NTFS 的特性,如果創建在 Windows 上無效名稱的文件/文件夾將導致 Read Error,進而導致遊戲無法啟動。最常見的問題是文件名中包含:字符,而 Proton 在 NTFS 磁盤上創建的文件名中就包含了這個字符。

修復這個問題相當簡單:在掛載的 NTFS 磁盤上創建一個/compatdata文件夾,並將其 symlink 到 Linux 分區上的文件夾。

創建 symlink:

1
2
$ mkdir -p ~/.steam/steam/steamapps/compatdata
$ ln -s ~/.steam/steam/steamapps/compatdata /media/gamedisk/Steam/steamapps/

如果提示/compatdata已經存在,刪除它並重新 symlink 即可。

最後,添加 Steam 庫吧

操作完成後,重啟電腦,目標磁盤就會在 Linux 上自動掛載,這時進入 Steam 正常添加遊戲庫即可

正常添加遊戲庫

操作完成後,可以正常遊玩 Steam 庫裡所有的 Windows 遊戲,並且可以在任何一邊向庫內添加遊戲。

本文參考:Using a NTFS disk with Linux and Windows