说起跑酷游戏,大多数人脑子里浮现的是手机里那些花里胡哨的横版动作游戏,很难把它和一片黑底白字的终端联系起来。但只要你用过几天 Linux,大概率会听说过 moon-buggy 这个名字——一个完全运行在字符终端里的月面跑酷游戏。这个开源小游戏的历史可以追溯到上世纪九十年代,1.0.51-13 这个打包版本在 KeyarchOS(KOS,一款国产服务器 Linux 发行版)上可以直接通过软件源安装,装完就能玩,整个流程实测不到两分钟,是典型的"开箱即用"。这篇文章把我实际操作的完整过程写出来,包括环境检查、两种安装方法、游戏玩法说明,以及我踩过的几个终端相关的坑。新手可以照着做,老手也能拿来当一份排查参考。
1. 终端也能跑酷:moon-buggy 到底是个什么游戏
1.1 一个用 ASCII 字符画出来的月面赛车
moon-buggy 是一款致敬 1982 年街机游戏 Moon Patrol 的自由软件。街机版里,玩家驾驶一辆月面探测车,在自动卷轴的崎岖地形上躲避环形山和岩石;moon-buggy 把整套玩法搬进了字符终端:地面是下划线、连字符拼出来的,环形山是大写字母 O 和小写字母 o 勾勒的,车辆本身由好几行字符叠加而成。跑起来之后屏幕快速向左滚动,配合字符拼出的尘土和爆炸效果,还真能感受到一点速度感。
1.0.51-13 这个版本号需要拆开理解:1.0.51 是游戏上游源代码的版本,-13 则代表这个源代码在某个 RPM 系发行版里经历了 13 轮打包修订。这种"上游版本+打包版本"的写法在 Linux 生态里很常见,它的含义是:核心代码来自 1.0.51,而打包者额外修过 13 次,比如打补丁、调整安装路径、修正许可证声明等。看到这个版本号,就意味着你拿到的不是随手编译的试验品,而是经过发行版维护者验证过的组合。
1.2 为什么值得在服务器操作系统上装一个游戏
很多人听到"在服务器上装游戏"第一反应是不正经。但从工程角度讲,这恰恰是一个非常廉价的系统自检手段:
- 验证软件源和包管理器链路是否健康。如果 dnf 能顺利搜索、下载、安装并处理完依赖,说明系统最基础的软件管理通道没问题。
- 验证终端兼容性。游戏对终端尺寸、TERM 环境变量、颜色能力的敏感度远高于普通命令,画面正常说明终端链路是通的。
- 验证 SSH 交互能力。远程会话能流畅显示动画并且按键跟手,说明网络延迟、伪终端分配、键盘映射都在正常范围。
- 提供情绪价值。运维调试到半夜,在终端里开车蹦几个环形山,比刷短视频解压多了。
而且 moon-buggy 依赖极轻,基本上就是主程序加 curses 文本界面库,安装后占用可以忽略不计,不会给服务器带来任何负担。把它当作"服务器趣味自检工具"来看,一切都变得合理了。
2. 环境准备与安装方案选型
2.1 先搞清楚 KeyarchOS 是什么
KeyarchOS 是一款面向服务器和数据中心场景的 Linux 发行版,开发代号 KOS,整体定位偏向企业级稳定性,而不是追逐最新软件版本。它采用 RPM 包管理体系,命令行包管理工具是 dnf/yum,和常见的 RPM 系企业发行版操作习惯非常接近。这意味着,你在其他主流企业级 Linux 上积累的经验,在这里大部分能直接复用。
我这台测试机是最小化安装,装完之后只有一个纯命令行环境,这正好是最能说明问题的场景:一个最精简的系统,能不能轻松装上一个终端游戏?安装前我做了一次快速环境检查:
cat /etc/os-release uname -a which dnf dnf --version输出确认这是一套基于 RPM 体系的系统,dnf 可用,网络能访问软件源,接下来就可以继续了。这一步千万别跳,很多奇怪的问题其实从这儿就能看出端倪。
2.2 为什么优先选择软件源安装
moon-buggy 的安装有两条典型路线:软件源安装和源码编译。我强烈建议优先走软件源,理由有三个。
第一,依赖自动处理。moon-buggy 运行时需要 curses 文本界面库,软件源安装时 dnf 会自动拉取合适的底层库,不用自己折腾编译参数。打个比方,软件源安装就像去便利店买速冻水饺,拆开包装丢进锅里就行;源码编译则是从面粉、水和肉馅开始自己包,过程能掌控,但费时费力。第二,卸载干净。dnf remove moon-buggy一条命令能把主程序和自动装上的依赖都清理掉,而源码编译安装的二进制散落在系统各个目录,清理全靠手动。第三,版本可追溯。源里的版本号就是你看到的 1.0.51-13,这是经过发行版打包者验证过的组合,踩坑概率远低于自己编译。
当然,源码编译也绝不是没用。当软件源里找不到这个包,或者你想自定义编译选项的时候,它就是不可或缺的兜底方案。后面我会把两条路线都讲清楚。
3. 开箱实操:把 moon-buggy 1.0.51-13 装起来
3.1 第一步:更新软件源缓存
不管用什么包管理器,装新软件前我都习惯先同步一下源里的元数据,防止索引过期导致检索不到新包:
sudo dnf makecache如果系统提示有可用升级,也可以顺手执行sudo dnf check-update看看有没有安全更新。这一步不是强制要求,但能避免后面出现"包列表过期"之类的无谓报错。镜像源如果配置得当,这个操作通常几秒就结束了。
3.2 第二步:搜索软件包
直接用 dnf 搜一遍,确认软件源里有没有这个包,以及确切的包名:
dnf search moon-buggy正常会看到类似这样的结果:
==================== Name & Summary Matched: moon-buggy ==================== moon-buggy.x86_64 : Drive a buggy around the moon如果没搜到,多半是默认软件源里没有收录这个游戏。常见做法是启用 EPEL——面向企业级 Linux 的扩展软件仓库,里面有大量默认源不收录的软件包:
sudo dnf install epel-release sudo dnf makecache之后重新执行dnf search moon-buggy通常就能看到了。如果正在用的发行版自带了额外的应用仓库,也可以检查一下相关的 repo 配置文件,原理完全一样。
3.3 第三步:安装并验证
确认包名之后,直接装:
sudo dnf install moon-buggy安装过程会列出需要下载的包和依赖。我这次看到的是 moon-buggy 本体加一个库依赖,体积都很小,下载基本是秒级完成。装完做三件事来验证:
rpm -qi moon-buggy which moon-buggy moon-buggy --versionrpm -qi能看到包的版本、架构、安装日期和详细描述,看到 Version 显示 1.0.51 且 Release 显示 13,就说明装的是标题里那个版本。which确认可执行文件的落位,--version验证程序能不能正常启动。到这一步,"开箱即玩"的前半段已经完成。
3.4 备用方案:当软件源里没有时走源码编译
如果因为某种原因源里就是找不到这个包,或者你想验证上游最新代码,可以走源码编译。moon-buggy 的源码托管在 SourceForge 的 moon-buggy 项目页,1.0.51 是它最后发布的稳定版。具体步骤:
sudo dnf install gcc make ncurses-devel wget https://downloads.sourceforge.net/project/moon-buggy/moon-buggy/1.0.51/moon-buggy-1.0.51.tar.gz tar xzf moon-buggy-1.0.51.tar.gz cd moon-buggy-1.0.51 ./configure make sudo make install几个注意点:
ncurses-devel是编译必需的开发包,缺失时 configure 会在检查 curses 库那一步直接报错退出。- 编译时间极短,这台机器上几秒就完成了。
make install默认把可执行文件装到/usr/local/bin/moon-buggy,和源安装的/usr/bin/moon-buggy并存也不冲突。直接敲moon-buggy时具体调用哪个取决于 PATH 的搜索顺序,建议用which moon-buggy确认。- 卸载时没有统一命令,得手动删除安装生成的文件。这也是我反复强调优先用源安装的原因——省心。
4. 开箱体验:玩法、键位与终端调优
4.1 启动游戏与基本操作
安装完成后,在终端里直接输入:
moon-buggy屏幕会立刻变成月面场景,你的车位于左侧,地形从右向左滚动。游戏的核心操作只有一个:跳跃。具体键位如下:
| 按键 | 功能 |
|---|---|
| 空格键 | 跳跃 |
| p | 暂停/继续 |
| h | 查看帮助 |
| s | 开关音效(如果终端支持) |
| q | 退出游戏 |
新手最常见的问题是一看到地形就狂按空格。其实跳跃高度是固定的,关键在于车接近环形山边缘的前一刻起跳,早跳晚跳都会炸。多死几次,节奏感自然就有了。
4.2 游戏机制与难度曲线
moon-buggy 的计分逻辑很直白:跑得越远分数越高,屏幕上方会实时显示距离和得分。随着距离增加,地形会越来越崎岖,环形山越来越大,滚动速度也会逐渐加快。撞上环形山或者岩石,车辆会爆炸并损失一条命,命用完游戏结束。整体节奏和现代跑酷游戏如出一辙,但它发生在字符终端里,反而有种独特的克制感。
游戏对终端的基本要求是至少 80x24 的字符网格。窗口太小,画面会被裁剪或者错位,这是后面要提到的常见问题之一。
4.3 让终端显示更舒服的小调整
- 设置终端类型。登录后执行
echo $TERM,如果输出是xterm或xterm-256color,moon-buggy 通常能拿到正确颜色。如果显示dumb或unknown,游戏可能连画面都渲染不出来,可以执行export TERM=xterm-256color临时修正。 - 调整配色。大多数现代终端支持自定义调色板,把背景调成深色,对比度提升后游戏画面会清晰不少。
- 使用等宽字体。这是必须项,否则字符间距不一致,地形看起来会歪歪扭扭。
- 注意备用屏幕。moon-buggy 运行时会自己切换到备用屏幕,退出时恢复原状。如果终端配置强制关闭了相关控制序列支持,退出后画面可能会残留。
4.4 通过 SSH 远程游玩
服务器装了游戏,最自然的场景就是 SSH 过去玩。实测完全没问题:
ssh 用户名@服务器地址 moon-buggy在网络延迟几十毫秒的普通内网环境下,按键跟手性依然很好。唯一要注意的是,某些终端模拟器在 SSH 会话里会把终端类型传递成奇怪的值,所以远程玩之前同样先确认echo $TERM。另外,如果使用了多级 SSH 跳转,每一级都要确保分配了伪终端,否则会提示没有可用的终端设备,游戏根本启动不了。
5. 踩坑实录:常见问题与排查速查表
5.1 安装阶段的典型问题
| 现象 | 可能原因 | 解决方式 |
|---|---|---|
command not found: moon-buggy | 没有实际安装成功 | 执行dnf list installed | grep moon确认 |
No match for argument: moon-buggy | 软件源里没有这个包 | 安装 epel-release 后重新 makecache |
| 下载速度很慢 | 镜像源延迟或配置不当 | 更换为可用镜像源,或用代理加速 |
| 依赖冲突 | 系统里混用了多个第三方源 | 检查 repo 配置文件,按需禁用冲突源 |
我遇到过一次奇怪的情况:安装命令执行成功,但运行时提示命令找不到。排查后才发现是源码编译时make install装到了/usr/local/bin,而当前用户的 PATH 里没包含这个目录。所以装完一定要用which验证路径,这个习惯能省掉大量排查时间。
5.2 运行阶段最影响体验的显示问题
| 现象 | 可能原因 | 解决方式 |
|---|---|---|
Error opening terminal: unknown. | TERM 变量异常 | export TERM=xterm-256color后再启动 |
| 画面乱码、错位 | 终端窗口小于 80x24 | 拉大窗口或降低显示缩放 |
| 颜色全部丢失 | 终端模拟器不支持颜色 | 换用支持 256 色的现代终端 |
| 退出后屏幕残留游戏画面 | 备用屏幕切换失效 | 检查终端是否支持 smcup/rmcup 控制序列 |
其中Error opening terminal是我见过最多的问题。它本质上不是游戏坏了,而是系统不知道该按什么终端类型去处理光标和颜色控制。把 TERM 改成终端实际支持的型号,问题立刻消失。
5.3 容易被忽略的细节
- 按键大小写。游戏内按键都是小写 p、h、s、q,如果输入法处于全角状态,或者大写锁定开启,按键会被忽略,游戏就像卡住了一样。
- 音效问题。moon-buggy 的"音效"通过终端响铃实现,许多 SSH 会话默认禁用 bell,听不到声音是正常的,不代表程序有问题。
- 精简系统缺库。如果系统被裁剪得比较狠,可能连基础系统库都不全。遇到
error while loading shared libraries时,用ldd /usr/bin/moon-buggy看缺哪个库,再补装对应的系统库包。 - 退出方式。不要在游戏过程中用
Ctrl+Z或Ctrl+C强退,宁可按 q 让它正常恢复终端状态。否则备用屏幕可能无法恢复,需要执行reset命令重置终端。
6. 延伸玩法与个人体会
6.1 装了 moon-buggy 之后还能玩什么
如果你喜欢这种终端里的小惊喜,同类的经典游戏还有不少。nsnake 是字符界面的贪吃蛇,bsdgames 合集里包含了二十多个从 BSD 时代流传下来的小游戏,从推箱子到字符赛车一应俱全。在 KeyarchOS 上装它们的方式和 moon-buggy 完全一致:
sudo dnf install nsnake bsdgames装完之后,你的系统里就集齐了一套"命令行摸鱼全家桶"。这类老游戏的好处是资源占用可以忽略不计,哪怕是在只有 1G 内存的云主机上也跑得飞起。
6.2 几句实在的心得
把这次经历总结一下,我最大的体会是:看似不务正业的事情,往往是最快验证系统健康程度的手段。一次简单的游戏安装,覆盖了软件源、包管理器、依赖处理、终端兼容性、远程会话能力,这些恰恰是日常运维里最常用到的环节。哪一步出了问题,反而能顺藤摸瓜发现系统配置里隐藏的隐患。
我还试过把 moon-buggy 的源码拿下来,改跳跃力度和地形生成参数,重新编译运行后完全是另一番体验。这种开源游戏随手改的乐趣,是商业游戏给不了的。
最后再分享一个小技巧:玩腻了原版之后,可以试试在 SSH 会话里同时开一个 tmux,把游戏窗口放在其中一个小窗格,另一个窗格跑htop或者vmstat实时监控。一边开着月面车躲避环形山,一边看系统负载曲线起起伏伏,那种感觉还挺奇妙。这个玩法我实测过,一个终端窗口里同时跑游戏和监控,稳定不卡顿,唯一要提醒的是游戏窗格别切得太小,否则字符画面会被压变形。