简介:由安德烈与马里乌斯合作完成的Java版Pacman项目,是一款面向Java初学者和游戏开发入门者的完整可运行示例。项目围绕经典吃豆人玩法,展示了图形用户界面设计、游戏主循环、碰撞检测、鬼魂行为模拟、键盘事件处理和动画刷新等核心知识点,帮助读者将理论与实践结合起来。资源包中共有12个文件,以5个Java源代码文件为主,另有3个已编译类文件、1个Markdown说明文件和几个工程配置辅助文件,压缩后整体大小仅12KB,体积轻巧,便于下载和快速阅读。工程结构采用标准布局,可以直接导入常用IDE中运行和调试,边看代码边体验效果。目前已有151人学习,具备一定参考意义。通过分析代码,可以学会迷宫的存储与渲染、吃豆与分数更新逻辑、鬼魂简单追击路径的实现,同时了解双人合作开发时模块划分与文件组织方式,对后续独立完成小游戏或深入Java桌面开发具有启发价值。 最近在梳理 pacman-andreimarius 这个项目,这是 Andrei 和 Marius 两个人整理的 pacman 使用项目。先说清楚,这里说的 pacman 不是那个吃豆人游戏,而是 Arch Linux 生态里的包管理器。他们做的就是把 pacman 从镜像源配置、日常命令、系统升级,到最后用 pacman 安装 sddm 和 sddm-kcm 搭建图形登录环境,这一整套流程沉淀成可以照着做的方案。我结合自己的实操经验把这套内容重新拆了一遍,尽量把容易踩的坑也一并写出来,给刚接触 Arch 系发行版的朋友一个少走弯路的参考。
1. pacman-andreimarius 项目到底在做什么
1.1 不是吃豆人,是 Arch 的包管理核心
很多人第一次听到 pacman 这个词,第一反应都是那个吃豆豆的游戏。但 Andrei 和 Marius 这个项目里的 pacman,是 Arch Linux 环境下最核心的包管理工具。看名字能猜出来,这个项目就是围绕 pacman 命令、pacman 配置、以及用它安装软件展开的一系列实践总结。
为什么要专门整理这样一个项目?因为 pacman 本身虽然命令不多,但真正用顺手需要理解它的运行机制。Arch 是滚动发行版,所有软件包都通过 pacman 从远程仓库拉取。它不像 Debian 系那么“保守”,很多包更新很快,所以你必须知道怎么正确设置源、怎么升级、怎么处理升级过程中出现的冲突。Andrei 和 Marius 这个项目的好处就是,把这些原本散落在文档、论坛和个人笔记里的操作,整理成了一条清晰的路径。
1.2 项目沉淀下来的一套标准工作流
我参考这个项目时,最有价值的不是单个命令,而是它给出了一套可以复用的工作流。对于一台刚装好的 Arch 系统,一般按照下面这个顺序操作:
- 配置镜像源,也就是修改
/etc/pacman.d/mirrorlist。 - 执行一次完整的系统升级,
sudo pacman -Syu。 - 按需安装软件包,比如桌面环境、显示管理器、常用工具。
- 启用系统服务,让图形登录界面能正常启动。
这套流程看起来简单,但每一步都有细节。比如源配置不好,后面所有安装都会很慢;直接运行pacman -Sy而不是pacman -Syu,又可能把系统带进“部分升级”的危险状态。所以这个项目最核心的价值,就是把这些细节提前帮你排掉了。下面我从命令本身开始拆。
2. pacman 核心命令拆解:安装、卸载、升级与查询
2.1 安装软件的四种常见姿势
pacman 安装软件最常用的命令是:
sudo pacman -S 软件包名-S是从仓库同步并安装。可以一次装多个,用空格隔开。比如:
sudo pacman -S firefox vim git如果是搜索某个包叫什么名字,用-Ss:
pacman -Ss 关键词这个命令会搜索远程仓库里的包名和描述,非常实用。想看某个包的详细信息,比如版本、依赖、大小,可以用:
pacman -Si 软件包名如果你想安装一个本地已经下载好的.pkg.tar.zst文件,用-U:
sudo pacman -U /path/to/package.pkg.tar.zst这几种姿势覆盖了绝大多数安装场景。需要刻意记住的是,-S和-U都需要 root 权限,而-Ss和-Si只需要读权限,普通用户就能跑。
2.2 升级系统的正确姿势:pacman -Syu
升级系统是 pacman 操作里最容易被忽视、也最容易出问题的一步。正确的命令是:
sudo pacman -Syu这个命令拆开看:
-S:同步相关操作。-y:从镜像源刷新本地包数据库。-u:升级所有可升级的软件包。
之所以必须用-Syu,是因为先刷新数据库再升级所有包,系统里包和包之间的依赖关系才能保持一致。很多人图省事,只运行pacman -Sy firefox,想着先刷新数据库,再单独装一个软件。这个操作非常危险,因为你的本地数据库已经刷新到较新版本,但系统里大部分包还是旧版本,新安装的 firefox 可能依赖某个新版动态库,而系统里那个库还是旧的,运行起来就会报错。这种状态在 Arch 社区里叫“部分升级”,一旦出现,后续升级会非常痛苦。
所以我在这套工作流里唯一的建议就是:不要单独使用-Sy,除非你马上接着执行完整的-Syu。另外,长时间没有更新系统时,优先跑一次全量升级,再安装新软件。
2.3 查询和清理:pacman -Q、-Sc 的日常用法
除了安装和升级,日常用得最多的就是查询和清理。查询当前系统里是否装了某个包:
pacman -Q 软件包名如果已经安装,会输出版本号;没有安装,会返回错误。列出某个已安装包带的文件列表:
pacman -Ql 软件包名反过来,你想知道某个文件是哪个包安装的,用:
pacman -Qo /路径/到/文件这个命令排查来源特别有用,尤其是遇到文件冲突的时候。
卸载软件也有讲究。直接卸载目标包:
sudo pacman -R 软件包名同时删除不再被其他包依赖的依赖库:
sudo pacman -Rs 软件包名如果连配置文件也想一起清理掉,用:
sudo pacman -Rns 软件包名清理缓存方面,pacman 下载的包都会缓存在/var/cache/pacman/pkg/,时间长了会占用不少磁盘空间。清理未使用缓存:
sudo pacman -Sc清空所有旧版本缓存:
sudo pacman -Scc上面这些命令组合起来,基本覆盖了日常 all day 的操作。下面进入真正影响体验的一步:源配置。
3. pacman 设置源的完整实操:从 mirrorlist 到第三方源
3.1 源配置的核心文件
pacman 的源配置主要在两个文件里:/etc/pacman.conf和/etc/pacman.d/mirrorlist。
/etc/pacman.conf是主配置文件,里面定义了仓库段,比如[core]、[extra]、[multilib]。每个段下面会写Include = /etc/pacman.d/mirrorlist,意思是从 mirrorlist 里读取这个仓库的镜像源地址。
/etc/pacman.d/mirrorlist则维护着一长串镜像地址,每条长这样:
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch这里$repo表示仓库名,$arch表示系统架构。配置源的核心任务,就是把速度最快的镜像放到这个文件最前面,或者把不常用的镜像用#注释掉。
3.2 用 reflector 自动选源,手动微调镜像源顺序
如果你是国内用户,或者有更近的节点,手动选择源是必然的。不过 pacman 本身没有测速工具,我一般推荐先用 reflector 自动生成一份镜像列表,再手动调整。
如果系统里还没装 reflector,先确保默认源能连上,然后安装:
sudo pacman -S reflector接着运行:
sudo reflector --country China --age 12 --protocol https --sort rate --save /etc/pacman.d/mirrorlist这条命令的参数含义:
--country China:只选择中国地区的镜像。--age 12:只保留 12 天内同步过的镜像,避免选到僵尸节点。--protocol https:只使用 HTTPS 协议,避免运营商劫持。--sort rate:按测速结果从快到慢排序。--save:直接把结果写回 mirrorlist。
不过 reflector 测速是基于当前网络的瞬时状态,结果不一定永远准确。我建议生成完以后,再手动打开 mirrorlist 看一眼,把最稳定的镜像放在最上面。比如清华、阿里云、中科大这几个,通常对国内用户都很快。
手动配置时要注意,$repo和$arch这两个变量不能写死。像有些人图方便,直接写成固定路径,比如https://mirrors.tuna.tsinghua.edu.cn/archlinux/core/os/x86_64,那其他仓库段也会跑到这个固定路径下,最终导致仓库找不到软件包。
3.3 添加 archlinuxcn 源的注意事项
官方源里的软件数量已经不少,但有些社区软件和 AUR 里的热门包,不一定在官方源及时出现。国内很多用户会选择添加 archlinuxcn 这个第三方源。
在/etc/pacman.conf末尾追加:
[archlinuxcn] Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch保存后刷新数据库并安装密钥环:
sudo pacman -Syu archlinuxcn-keyring这里有一个坑:archlinuxcn 源的 keyring 依赖官方 keyring 初始化正常。如果你刚装完系统,最好先执行一次:
sudo pacman-key --init sudo pacman-key --populate archlinux然后再添加第三方源,否则后面验证签名时会一直报 GPG 错误。另外,第三方源不是官方承诺的版本兼容性,加入后如果升级出现奇怪依赖问题,优先检查是不是第三方源引入了和官方源冲突的包。
4. 用 pacman 安装 sddm 和 sddm-kcm:搭建图形登录环境
4.1 sddm 和 sddm-kcm 是什么,为什么这么装
当你装好一个桌面环境后,还需要一个显示管理器来负责图形登录界面。sddm(Simple Desktop Display Manager)就是这样一个轻量级显示管理器,和 KDE Plasma 的匹配度很高,当然它也能配其他桌面。
sddm-kcm 则是 KDE 系统设置里的模块,提供一个图形化界面来配置 sddm 的主题、用户、自动登录等。安装时我喜欢两个一起装:
sudo pacman -S sddm sddm-kcm只装 sddm 也能用,但所有配置都要手动改配置文件,对新手不友好。sddm-kcm 装好后,在 KDE 的系统设置里会多出一个“开机和登录”入口,很多选项都能直接点选,省心很多。
4.2 安装、启用与切换显示管理器
装完后需要把 sddm 设置为默认显示管理器,并立即启动:
sudo systemctl enable sddm --now如果你机器上之前装过其他显示管理器,比如 lightdm 或 gdm,要先禁用旧的,否则两个服务同时存在,重启后很可能登录界面花掉,或者直接进不了图形界面。
禁用旧服务的示例:
sudo systemctl disable lightdm --now之后可以再启用 sddm。重启系统时,sddm 就会自动接管登录界面。这里建议不要只enable不start,因为很多人在enable后直接重启测试,如果配置有问题,会误以为没生效。用--now可以立刻看到反馈。
4.3 配置自动登录和主题
sddm 的全局配置文件默认是/etc/sddm.conf。如果没有这个文件,系统会读取/usr/lib/sddm/sddm.conf.d/default.conf,这个是出厂默认配置,一般不要直接改。
我更推荐在/etc/sddm.conf.d/下新建配置文件,比如autologin.conf。需要自动登录时,内容可以写成:
[Autologin] User=你的用户名 Session=plasma这里Session=plasma对应 KDE Plasma 桌面会话。如果用的是其他桌面,需要改成对应的 desktop 文件名称,比如xfce。
主题文件一般存放在/usr/share/sddm/themes/目录,你也可以通过 sddm-kcm 图形界面切换到不同主题。修改主题后建议重启一次 sddm 服务验证:
sudo systemctl restart sddm如果重启后卡在黑色屏幕,大概率是主题文件不兼容或者显卡驱动没装好,可以从日志里查,这个放到下一节说。
5. 常见问题与排查技巧实录
5.1 密钥环初始化失败
我最早用 pacman 时遇到过安装任何包都报签名错误,例如error: GPGME error: No data。这通常是 pacman 的密钥环没有初始化成功,或者密钥过期。
解决办法很直接:
sudo pacman-key --init sudo pacman-key --populate archlinux然后更新密钥环包:
sudo pacman -S archlinux-keyring需要注意的是,pacman-key --init会等待系统熵充足,如果新机器刚刚开机,初始化可能卡住,多等一会儿就行。另外,某些第三方源有自己的 keyring,也要安装对应的 keyring 包,否则签名验证过不了。
5.2 数据库锁和文件冲突
pacman 如果在更新中途被强制关闭,比如断电、Ctrl+C,下次执行命令时会提示:
unable to lock database这说明/var/lib/pacman/db.lck文件残留了。先确认没有 pacman 进程在跑:
ps aux | grep pacman确认真没有进程后,再删除锁文件:
sudo rm /var/lib/pacman/db.lck不要一看到锁文件就删,万一是后台还在跑,删掉锁会导致另一个 pacman 事务同时操作数据库,损坏包数据库,这就不好收拾了。
文件冲突也是常见问题。升级时报类似:
error: failed to commit transaction (conflicting files)这时候先查冲突文件属于谁:
pacman -Qo /路径/到/冲突文件如果确实是自己装过的第三方包和官方包冲突,优先考虑卸载旧包,而不是强制覆盖。实在需要覆盖时,可以这样:
sudo pacman -Syu --overwrite "/路径/到/冲突文件"但全局--overwrite "*"一定慎用,这会让 pacman 跳过所有冲突检查,一旦覆盖掉系统关键文件,系统可能直接起不来。
5.3 升级后桌面起不来怎么办
升级内核或者显卡驱动后,重启发现 sddm 起不来,这是很典型的滚动发行版问题。先看服务状态:
systemctl status sddm再看日志:
journalctl -u sddm -b -p err如果日志里出现内核模块加载失败,多半是内核更新后没重启。滚动发行版里,内核更新只是把新文件放到磁盘,必须重启后才会加载新内核模块。你可以在重启前先确认当前运行的版本和已安装的内核版本:
uname -r pacman -Q linux如果已安装版本比运行版本新,先重启,通常能解决。
NVIDIA 显卡用户还要特别注意,驱动和内核模块版本要匹配。实在起不来图形界面时,可以先用Ctrl+Alt+F3切到 tty 终端,登录后重装驱动或者回滚内核包,再重启测试。
最后分享一个我自己的习惯
每次跑sudo pacman -Syu之前,我会习惯性花半分钟看一眼 Arch 官网首页的更新公告,尤其是内核、glibc、systemd 这类底层包有更新时,提前知道有没有手动步骤。另外我会把更新命令写成一个简单别名或者脚本,内容就是sudo pacman -Syu,每次更新前先查一下磁盘剩余空间,因为升级过程中如果空间不够,很容易中途失败。Andrei 和 Marius 这个项目里也有很多类似的细节,我在整理时把它们加入了日常流程。别人踩过的坑,自己能不踩就尽量不踩,这才是 pacman 项目留给我们的最大价值。
本文还有配套的精品资源,点击获取