Fedora安装踩坑记录
这篇记录一下最近安装 Fedora 时遇到的几个问题:安装器里连接校园网、装完后无线网卡因为缺少固件而消失,以及使用 greetd、tuigreet 启动 niri 时需要注意的登录链路。
AIGC:这篇文章由AI生成
安装时连接校园网
安装 Fedora 时最先遇到的问题是联网。普通家庭 Wi-Fi 通常只需要输入一个共享密码,但校园网往往不是这种模式,而是需要使用学号、工号或者统一身份认证账号登录。因此在安装器里选择 Wi-Fi 时,不能只看 SSID 名字,还要看这个网络使用的安全协议和认证方式。
我这里需要选择 WPA 系列里的 WPA2 Enterprise,并且认证方式选择 PEAP。只填 Wi-Fi 密码的 WPA/WPA2 Personal 是连不上的,因为它的认证模型和校园网完全不同。
常见 Wi-Fi 安全协议
大致可以把常见 Wi-Fi 分成下面几类:
| 类型 | 常见场景 | 认证方式 | 特点 |
|---|---|---|---|
| Open | 公共开放热点 | 不需要密码 | 接入简单,但链路本身不加密,安全性依赖 HTTPS、VPN 等上层保护 |
| WEP | 很老的设备 | 静态密钥 | 已经过时,不建议继续使用 |
| WPA Personal | 早期家用网络 | 预共享密钥 PSK | 比 WEP 强,但早期实现多使用 TKIP,现在也不推荐作为首选 |
| WPA2 Personal | 家用路由器、手机热点 | 预共享密钥 PSK | 最常见的家用 Wi-Fi 模式,大家共用同一个 Wi-Fi 密码 |
| WPA3 Personal | 较新的家用路由器 | SAE | 替代 PSK,能更好地抵抗离线字典攻击 |
| WPA/WPA2 Enterprise | 校园网、企业网 | 802.1X + EAP | 每个用户使用自己的账号、密码或证书认证 |
这里最容易混淆的是 Personal 和 Enterprise。
Personal 的核心是“这张网有一个共享密码”。路由器和客户端都知道这个密码,客户端证明自己知道密码之后就能接入。家里的 Wi-Fi 和手机热点基本都是这种。
Enterprise 的核心是“这张网背后有认证服务器”。客户端不是只输入一个共享密码,而是通过 802.1X/EAP 把用户身份交给学校或公司的认证系统验证。换句话说,Enterprise 模式下 Wi-Fi 密码本身不是重点,真正的凭证是用户名、密码、证书等身份材料。
校园网通常会使用 WPA2 Enterprise,因为它可以做到每个人一个账号,方便统一认证、撤销权限和记录网络行为。如果在安装器里把它当成 WPA2 Personal,只会得到一个“请输入密码”的界面,自然没地方填写用户名,也就无法完成认证。
常见 EAP 认证方式
选择 WPA2 Enterprise 之后,还需要选择 EAP 方法。EAP 可以理解为“在 802.1X 这套框架里,具体怎么证明你是你”。
| EAP 方法 | 凭证 | 特点 |
|---|---|---|
| PEAP | 用户名 + 密码 | 最常见的校园网方案之一,先建立 TLS 隧道,再在隧道内提交账号密码 |
| TTLS | 用户名 + 密码 | 也是先建立 TLS 隧道,内部认证方式更灵活,可以是 PAP、MSCHAP、MSCHAPv2 等 |
| TLS | 客户端证书 + 私钥 | 安全性强,但需要给每台设备签发和管理证书 |
| FAST | PAC 或其他受保护凭证 | 部署相对少见,常见于特定企业网络 |
| PWD | 密码 | 基于密码的 EAP 方法,实际校园网中不如 PEAP 常见 |
| LEAP | 用户名 + 密码 | 旧方案,安全性已经不适合新环境 |
我这里选择的是 PEAP。如果安装器继续要求选择内部认证方式,一般可以选择 MSCHAPv2。完整填写项通常是:
1 | Security: WPA & WPA2 Enterprise |
CA 证书这一项容易被忽略。严格来说,客户端应该验证认证服务器证书,避免把账号密码交给伪造的同名热点。如果学校提供了 CA 证书,最好导入并选择它。如果只是为了安装系统临时联网,又没有学校提供的证书,安装器里可能可以选择“不需要 CA 证书”之类的选项,但这属于安全性妥协,不应该作为长期配置。
安装后无线网卡缺少固件
第二个问题出现在系统安装完成之后:重启进入新系统,无线网卡不见了。
表现大概是这样:
1 | ip a |
这两个命令里只看到 lo 和有线网卡,没有 wlp... 之类的无线网卡接口。但是内核模块又不是完全不存在:
1 | lsmod | grep iwlwifi |
iwlwifi 模块确实存在,也可以尝试加载。这里的关键点是:驱动模块存在,不代表无线网卡就能工作。Intel 无线网卡除了内核驱动以外,还需要对应的 firmware。驱动负责和内核网络栈对接,firmware 则是加载到无线芯片上的二进制固件。两者缺一不可。
最后通过 dmesg 查到了真正的问题:
1 | dmesg | grep -i iwlwifi |
报错里有类似内容:
1 | iwlwifi no suitable firmware found |
这说明内核已经识别到需要 iwlwifi,但是在系统里找不到对应固件,所以无线网卡没有完成初始化。由于设备没有成功初始化,内核也就不会注册出 wlp... 这样的网络接口,因此 ip a 和 ip link 看不到它。
解决方式是安装缺失的 firmware 包:
1 | sudo dnf install iwlwifi-mvm-firmware |
如果正在使用 Fedora Atomic / Silverblue 这类系统,则使用:
1 | rpm-ostree install iwlwifi-mvm-firmware |
普通 Fedora Workstation 安装完成后,可以重启,也可以尝试重新加载模块:
1 | sudo modprobe -r iwlmvm iwlwifi |
如果当时已经没有 Wi-Fi,可以临时用有线网络、手机 USB 共享网络,或者用 Live ISO 进入系统修复。后一种方法我会单独开一篇继续写。
使用 greetd 和 tuigreet 启动 niri
第三个问题是安装后配置 greetd 和 tuigreet,让登录后直接进入 niri。
我的 /etc/greetd/config.toml 最后需要写成下面这样:
1 | [terminal] |
这里真正重要的是这一行:
1 | command = "tuigreet --cmd \"dbus-run-session niri\"" |
表面上看只是启动了 niri,但从开机到进入桌面,中间其实有一条完整链路:
1 | GRUB -> Linux kernel -> systemd -> greetd -> tuigreet -> PAM认证 -> dbus-run-session -> niri |
从 GRUB 到 systemd
开机后,固件会把控制权交给 GRUB。GRUB 根据启动项加载 Linux kernel 和 initramfs,并把内核参数一起传过去。
内核启动后会初始化 CPU、内存、磁盘、显卡、网卡等硬件,随后挂载根文件系统,并启动用户空间的第一个进程,也就是 PID 1。Fedora 默认的 PID 1 是 systemd。
systemd 继续拉起各种 system service。启用 greetd 后,greetd.service 会在合适的 target 下启动,负责接管一个虚拟终端。
greetd 做什么
greetd 本身是 display manager。传统桌面环境里常见的是 GDM、SDDM、LightDM,而 greetd 更轻量,也更适合配合 Wayland compositor 和文本 greeter 使用。
配置中的:
1 | [terminal] |
表示让 greeter 运行在第 1 个虚拟终端上。也就是说,系统启动后看到的登录界面不是 GDM 那种图形界面,而是 tuigreet 提供的 TUI 登录界面。
default_session 里的:
1 | user = "greetd" |
表示 greetd 先用 greetd 这个低权限用户运行 greeter。这样登录界面本身不需要以 root 身份运行,权限边界更清晰。
tuigreet 做什么
tuigreet 是一个文本界面的 greeter。它负责显示登录提示、读取用户名和密码,并通过 PAM 完成认证。
PAM 可以理解为 Linux 上统一的认证框架。你输入用户名和密码之后,tuigreet 不会自己判断密码对不对,而是把认证交给 PAM。PAM 再根据系统配置去检查本地密码、指纹、密钥环或者其他认证模块。
认证通过之后,tuigreet 会根据 --cmd 指定的命令请求 greetd 启动用户会话。这里指定的是:
1 | dbus-run-session niri |
为什么需要 dbus-run-session
niri 是 Wayland compositor。它启动之后会创建 Wayland 显示服务器,普通图形程序再通过 WAYLAND_DISPLAY 连接到它。
但是现代 Linux 桌面不只有 Wayland socket。通知、portal、密钥环、文件选择器、截图、屏幕共享、权限弹窗等组件经常还需要一个用户会话级别的 D-Bus。
dbus-run-session niri 的作用就是先创建一个新的 session bus,再在这个 D-Bus 会话里启动 niri。它会设置好类似 DBUS_SESSION_BUS_ADDRESS 的环境变量。这样从 niri 里启动的程序都能找到同一个会话总线。
如果只写:
1 | tuigreet --cmd niri |
niri 本身可能能起来,但后续很多桌面组件可能会因为没有正常的 D-Bus session 而表现异常。把 dbus-run-session 放进登录命令里,相当于把“启动桌面”和“创建桌面会话总线”绑在一起,链路更完整。
所以最终链路可以理解为:
1 | greetd 在 VT1 启动 tuigreet |
配置完成后启用服务:
1 | sudo systemctl enable greetd.service |
如果之前启用了 GDM、SDDM 之类的 display manager,需要避免它们和 greetd 抢登录界面。调试阶段最好保留一个可用 TTY,万一登录命令写错,可以用 Ctrl+Alt+F2 切到其他虚拟终端修配置。
结语
这三个问题本质上都不是“系统坏了”,而是安装阶段经常被省略掉的底层细节:校园网不是普通 Wi-Fi,驱动模块不等于 firmware 已经齐全,display manager 也不只是启动一个窗口管理器那么简单。
记录下来之后,下次再装 Fedora 至少不用从零开始查了。
