NakanoMiku39
Articles5
Tags12
Categories0

Archive

Fedora安装踩坑记录

Fedora安装踩坑记录

这篇记录一下最近安装 Fedora 时遇到的几个问题:安装器里连接校园网、装完后无线网卡因为缺少固件而消失,以及使用 greetdtuigreet 启动 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
2
3
4
5
6
7
Security: WPA & WPA2 Enterprise
Authentication: Protected EAP (PEAP)
Inner authentication: MSCHAPv2
Username: 校园网账号
Password: 校园网密码
Anonymous identity: 可留空,除非学校文档要求填写
CA certificate: 优先使用学校提供的 CA 证书

CA 证书这一项容易被忽略。严格来说,客户端应该验证认证服务器证书,避免把账号密码交给伪造的同名热点。如果学校提供了 CA 证书,最好导入并选择它。如果只是为了安装系统临时联网,又没有学校提供的证书,安装器里可能可以选择“不需要 CA 证书”之类的选项,但这属于安全性妥协,不应该作为长期配置。

安装后无线网卡缺少固件

第二个问题出现在系统安装完成之后:重启进入新系统,无线网卡不见了。

表现大概是这样:

1
2
ip a
ip link

这两个命令里只看到 lo 和有线网卡,没有 wlp... 之类的无线网卡接口。但是内核模块又不是完全不存在:

1
2
lsmod | grep iwlwifi
sudo modprobe iwlwifi

iwlwifi 模块确实存在,也可以尝试加载。这里的关键点是:驱动模块存在,不代表无线网卡就能工作。Intel 无线网卡除了内核驱动以外,还需要对应的 firmware。驱动负责和内核网络栈对接,firmware 则是加载到无线芯片上的二进制固件。两者缺一不可。

最后通过 dmesg 查到了真正的问题:

1
dmesg | grep -i iwlwifi

报错里有类似内容:

1
2
iwlwifi no suitable firmware found
iwlwifi-QuZ-a0-hr-b0-77 is required

这说明内核已经识别到需要 iwlwifi,但是在系统里找不到对应固件,所以无线网卡没有完成初始化。由于设备没有成功初始化,内核也就不会注册出 wlp... 这样的网络接口,因此 ip aip link 看不到它。

解决方式是安装缺失的 firmware 包:

1
sudo dnf install iwlwifi-mvm-firmware

如果正在使用 Fedora Atomic / Silverblue 这类系统,则使用:

1
2
rpm-ostree install iwlwifi-mvm-firmware
systemctl reboot

普通 Fedora Workstation 安装完成后,可以重启,也可以尝试重新加载模块:

1
2
sudo modprobe -r iwlmvm iwlwifi
sudo modprobe iwlwifi

如果当时已经没有 Wi-Fi,可以临时用有线网络、手机 USB 共享网络,或者用 Live ISO 进入系统修复。后一种方法我会单独开一篇继续写。

使用 greetd 和 tuigreet 启动 niri

第三个问题是安装后配置 greetdtuigreet,让登录后直接进入 niri

我的 /etc/greetd/config.toml 最后需要写成下面这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[terminal]
# The VT to run the greeter on. Can be "next", "current" or a number
# designating the VT.
vt = 1

# The default session, also known as the greeter.
[default_session]

# `agreety` is the bundled agetty/login-lookalike. You can replace `/bin/sh`
# with whatever you want started, such as `sway`.
# command = "tuigreet --cmd bash"
command = "tuigreet --cmd \"dbus-run-session niri\""

# The user to run the command as. The privileges this user must have depends
# on the greeter. A graphical greeter may for example require the user to be
# in the `video` group.
user = "greetd"

这里真正重要的是这一行:

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
2
[terminal]
vt = 1

表示让 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
2
3
4
5
6
greetd 在 VT1 启动 tuigreet
tuigreet 读取账号密码
PAM 验证用户身份
认证通过后启动 dbus-run-session
dbus-run-session 创建用户会话 D-Bus
niri 在这个 D-Bus 会话里启动并接管 Wayland 桌面

配置完成后启用服务:

1
sudo systemctl enable greetd.service

如果之前启用了 GDM、SDDM 之类的 display manager,需要避免它们和 greetd 抢登录界面。调试阶段最好保留一个可用 TTY,万一登录命令写错,可以用 Ctrl+Alt+F2 切到其他虚拟终端修配置。

结语

这三个问题本质上都不是“系统坏了”,而是安装阶段经常被省略掉的底层细节:校园网不是普通 Wi-Fi,驱动模块不等于 firmware 已经齐全,display manager 也不只是启动一个窗口管理器那么简单。

记录下来之后,下次再装 Fedora 至少不用从零开始查了。

Author:NakanoMiku39
Link:http://nakanomiku39.github.io/2026/06/17/Fedora%E5%AE%89%E8%A3%85%E8%B8%A9%E5%9D%91%E8%AE%B0%E5%BD%95/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可