Launch Steam from Case-sensitive Root Filesystem on macOS

由于一些历史原因,steam 至今仍不支持运行在大小写敏感的 apfs 或 hfs 文件系统上。但是由于 steam 仅要求 ~/Library/Application Support/Steam 路径下的文件区分大小写即可,我们借助软连接和磁盘镜像来解决这个问题。

Create Case-insensitive Disk Image

打开 Disk Utility 在菜单中选择 File->New Image->Blank Image,在打开的窗口中填写磁盘镜像的 Name,Size 和 Format,注意这里一定要选不区分大小写的文件系统(建议 APFS)。本文假设镜像保存在 /usr/local/var/Steam.dmg ,Name 是 SteamData 。建立好后双击该镜像挂载,这样该镜像会挂载在 /Volumes/<Name> 下,在这里就是 /Volumes/SteamData

Setup Symbolic Link for Steam

在终端中执行:

1
2
3
cd "~/Library/Application Support"
rm -rf Steam
ln -s /Volumes/SteamData Steam

接下来重新运行 steam.app 就可以愉快的玩耍啦。

Automatically Mount Image

这样一来虽然可以玩耍了,但是每次重新启动都要手动挂载该镜像,而且会在 Finder 侧边栏常年占据一个位置,十分不方便。我们可以新建一个 launchd 服务来帮助我们做这件事情,新建文件 ~/Library/LaunchAgents/data.steam.dmg.plist 并写入下述内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>data.steam.dmg</string>
<key>Program</key>
<string>/usr/bin/hdiutil</string>
<key>ProgramArguments</key>
<array>
<string>hdiutil</string>
<string>attach</string>
<string>-nobrowse</string>
<string>/usr/local/var/Steam.dmg</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>

该文件的作用是在当前用户登陆之后自动运行一次 hdiutil attach -nobrowse /usr/local/var/Steam.dmg 命令,其中 -nobrowse 参数的作用是不在 Finder 中显示。接下来运行下述命令向 launchd 注册该服务:

1
2
cd ~/Library/LaunchAgents
launchctl load -w data.steam.dmg.plist

至此就实现了开机自动挂载。