黑色幸存者! 启动!
欧洲人复活了黑色幸存者1, 但是电脑已经没有 windows 了, 私服又用的是 discord 的 game sdk 怎么办呢?
一些方案
水一水
qmeu
之前用 qmeu 起过 tiny11, 主要用来腾讯会议和编辑 word. 于是直接把 BS 装在里边, 玩是能玩, 但是问题在于, qmeu 图形性能太拉胯了 (虽然 BS 是个文字游戏, 但是他简直是屎山一坨, 用 unity 写的, 以前老电脑集显跑起来都卡). virtio-win 有个 viogpu3d 的 PR, 它尝试使用 host 的 vulkan (还是 opengl 来着? 忘记了) 来虚拟加速虚拟 gpu. 经过一系列尝试, 它在我的环境上不可用, 遂放弃.
今天看好像又活跃了起来, 已经测试得差不多了, 甚至一个 reviewer approve 了.
virtualbox
图形性能一样拉胯
vmware
不愧是商业软件, 图形加速确实做的不错. 但是他的问题是网络. 即使换成了 e1000, 还是有时候会断个半分钟, 这对打游戏来说完全无法忍受! 不过当时没搞出其他办法, 愣是用 vmware 打了两三次测试. PVE 也是在 vmware 里打的, 可惜没看见公告没把账号迁移成功, 白打了.
wine + discord rpc-bridge
之前其实有试过 wine, 但是是在一个 wine 下运行 discord 和游戏, 游戏需要 discrod 接口登陆, 始终无法找到. 一番搜索也不知道如何是好, 遂放弃.
proton
最近看到 wine 10 支持 native wayland 了, 正巧 BS 又开始测试, 于是花了点时间, 成功搞起来了.
经过测试, 用 proton 的 wine 才可以成功运行游戏. 这就不得不提伟大的 gentoo 了, wine 的版本直接有 proton 修改版 app-emulation/wine-proton, 并且依然有 wine, winecfg 等程序, 而不是和 steam 的 proton 那样藏得老深了不知道咋运行 (当时搞两个程序就是在 steam 那里搞的). 不过可惜的是, proton 现在还没用上 wine 10, 还得跑在 xwayland 下 (已经向 xwayland 妥协了, 不用他打不了 pygame 的游戏题).
还有一点小问题是, ProjectLumia 的安装程序会卡住 (wine 10 则是闪退), 不过直接从虚拟机里拷出来下载好的游戏就行了. 以及这个 wine 好像没装字体, 游戏里汉字有些显示不出来, 不过这也无所谓了, 英文也能玩.
discord
discord 才是最头痛的部分. 因为 BS 私服用的他的 sdk 去登陆, 而我又不知道这个接口是咋调用的. 一番搜索只有说如何让 linux discord 的 rich presence 显示 wine 运行的游戏, 基本原理就是打通一个 rpc 调用. 在询问 chatgpt 后, 觉得登陆游戏什么的应该也是通过 rpc, 没有必要用两种通信方式吧. 抱着试一试的心态, 决定使用搜到的能够正确显示 rich presence 的 rpc bridge.
discord on linxu
总所周知, discord 是 electron 写的狗屎产物, 还得依赖 gtk+. 而我压根就没有其他 gtk 程序, 没有折腾过 gtk 的 wayland, 更没折腾过 electron 的 wayland 环境. 所以如果能运行起来, 也只能用 xwayland. 不过, 他直接跑不起来…
遇到的第一个问题是, 找不到 libatk-bridge-2.0.so.0. 搜了一大圈, 其他发行版直接有 libatk-bridge2 包, 但是 gentoo 没有, 我还不知道他是哪里来的. 经过询问 chatgpt 以及一系列搜索, 终于在 pkgs 上 确定了是由 at-spi2-core 提供的. gentoo 确实有这个包. 但是, 安装以后他居然啥也没给我! 没有 so 文件! 又经历了一系列的询问 chatgpt, 了解到他是通过 dbus 来提供什么什么支持, 然后一看 USEFLAG, 诶嘿, 没开. 开启 dbus 后 emerge 了总算有这个 so 了.
不出意外的话就要出意外了, emerge 了 discord 之后, 启动时的小窗口能够正常显示, 并且安装资源什么的, 但是一到主界面就闪退了. 报错 render-process-gone { reason: 'abnormal-exit', exitCode: 32512 }
. 能够找到一些 issues, 比如 这个 和 这个, 但是没有什么解决方案. 而且 manatainer 说这不是 flatpck 的 discord 问题, 叫大家不要到这里提, 而是去找 discord 官方. appimage 的版本会直接说 gtk 无法连接到显示环境, 叫你检查 DISPLAY 变量. 然而设置 GDK_BACKEND=wayland,x11 和 DISPLAY 变量都没有用. 另外一个第三方客户端 vesktop 也是报相同的错. 最后无奈只能尝试 flatpck 了. 结果您猜怎么着, 真的可以. 看来还是环境设置的有一些问题. 再说吧.
根据 README, 可以使用 flatpak override --user --socket=wayland com.discordapp.Discord
使用 wayland 运行. flatpck 是隔离的环境, 再根据 Wiki 使用 ln -sf $XDG_RUNTIME_DIR/{app/com.discordapp.Discord,}/discord-ipc-0
将 rpc 接口暴露出来.
rpc bridge
最近在维护的比较好的看了看是这个: EnderIce2/rpc-bridge: Enable Rich Presence between your Wine applications and the native Discord client on Linux and macOS., 使用也非常方便, wine 程序只需要运行他的安装程序即可.
最后终于成功运行了! 还有一点点小小的问题是, BS 得运行两次, 第一次无论如何他都会说 discord 没有运行. 不知道为什么.
(第二天又不用了, 一次就行)

后记
为了玩个游戏, 往电脑里塞 flatpak, electron, gtk 这些本不应该出现在我的电脑里的东西 😭.
不过玩起来确实爽. 回家以后连香港的机子玩延迟不超过 40ms, 白天 RTT 也在 80ms, 100ms 左右浮动. 不过晚上高峰就有点寄, 丢包率比较高, RTT 经常飘到 200ms.
下一步就劫持 rpc 了, 直接干掉 discord, 还我干净的系统! 小菜鸡的幻想罢了, 不知道什么时候能有这个水平.
以及私服应该没有反外挂吧 😈
终于赢了一把, 一定是原来的设备限制了我的操作 (确信)