玩 Linux 这么多年,我一直觉得“装系统”这件事最容易被低估。尤其那种从空白硬盘开始的裸机安装,看起来就是插个 U 盘、点几下下一步,可真正操作起来,几乎每一台机器都能给你整点不一样的幺蛾子。我最近给一台新机器从头装 Ubuntu 26.04 LTS,原计划两个小时搞定,最后折腾了差不多一个通宵。回头复盘,踩的坑基本都集中在镜像校验、UEFI 引导、分区、网卡、驱动和中文输入法这几块,每一个单独拎出来都不复杂,但在一条流水线上连续踩的时候,就很容易让人怀疑人生。
这篇文章是我把自己真实走过的流程重新整理了一遍。目标很单纯:让一台一块空白硬盘的新机器,装完 Ubuntu 26.04 LTS 之后能真正“干活”。所谓干活,就是能正常上网、能 SSH 连上、中文输入法顺手、代码字体看着舒服、显卡驱动稳定、Docker 和常用开发环境装好,甚至接上 RK3576 这类开发板也能直接开展工作。适合刚接触 Ubuntu 的新手,也适合那些已经装过一两次但总在某个环节卡住的老朋友。
1. 装系统前先想清楚的事:镜像版本、UEFI 和安全启动
1.1 别把“LTS”和“最新”划等号
很多人一说 Ubuntu 26.04 LTS,第一反应是“版本越新越好”。实际上对裸机安装来说,版本新不新不是你最该关注的点,分支对不对才是。
下载页面里通常能看到 Desktop 和 Server 两种镜像,桌面版自带 GNOME 桌面,Server 版默认不带图形界面。如果这台机器是当开发机或日常主力机用,直接选 Desktop 版;如果是当服务器搁在机柜里,装 Server 版反而干净,省得之后还得卸一堆用不到的图形组件。这个决定要在下载前做,别看哪个体积大就下哪个,两种镜像装完后补齐对方那部分功能都很费劲。
下载完镜像后,我强烈建议用 sha256sum 校验一下,这一步真的不能跳。裸装翻车案例里,有相当大比例是镜像在下载过程中损坏,导致安装器跑到一半突然报错,或者干脆 U 盘引导不起来。校验做法很简单,在终端里执行:
sha256sum ubuntu-26.04-desktop-amd64.iso然后把输出的一长串哈希值,和镜像页面上公开的哈希值对比。只要有一处字符不一样,就说明文件不完整,要么重下,要么换一个下载源。
1.2 用看待服务器的眼光看待新硬盘
新机器拿到手,先别急着重装系统。进 BIOS 看三件事:第一,主板当前用的是 UEFI 模式还是传统 BIOS 模式;第二,安全启动是开启还是关闭状态;第三,硬盘接口是 AHCI 模式还是 RAID 模式。
Ubuntu 26.04 的安装器对 UEFI + GPT 这组合支持最好。传统 BIOS 的机器不是不能装,但有额外的分区兼容要求,麻烦很多。安全启动这个选项,建议大部分新机器先保持关闭,原因不是 Ubuntu 不支持安全启动,而是后续安装 NVIDIA 驱动和部分第三方内核模块时,如果启用安全启动,还要额外走签名流程,纯新手在这个地方被耗两个小时的案例太多了。等系统装好、驱动稳定了,再回头开安全启动也不迟。
硬盘的 AHCI 和 RAID 模式也要留意。很多品牌机出厂默认 RAID On,Ubuntu 安装器在这个模式下不一定能看到硬盘。进 BIOS 把它切成 AHCI,问题立刻消失。注意,如果这台机器原本预装了 Windows,切换模式会导致 Windows 无法启动,所以有双系统需求的,请在操作前先把 Windows 的恢复盘准备好,并且关闭 Windows 里的“快速启动”,这一步也是老生常谈但真能救命的。
2. 创建安装盘:几 KB 的偏差都可能让人废掉一个晚上
2.1 从镜像到 U 盘,不是“把文件拷进去”
U 盘制作是裸装流程里最容易出现低级错误的一环。很多人把 ISO 文件直接拖进 U 盘,然后插到机器上发现引导不了,还以为是机器有问题。
其实安装盘的工作原理和普通数据盘不一样,它是把 ISO 里的引导信息“写进”U 盘的扇区里,相当于给 U 盘做一个特殊布局。所以必须用专门的工具,或者用 dd 命令整盘写入。
Linux 环境下最直接的方式:
sudo dd if=ubuntu-26.04-desktop-amd64.iso of=/dev/sdX bs=4M status=progress oflag=sync注意,这里的of=参数一定要写 U 盘对应的设备名,比如/dev/sdb,不是/dev/sdb1。写错设备的后果非常严重,这个我多说一句:检查设备名用lsblk,它会列出所有磁盘及分区大小,通过容量对比就能确定哪个是你的 U 盘。dd 这种命令没有后悔药,写之前务必反复确认。
Windows 环境下,Rufus 和 balenaEtcher 都是可用选项。Etcher 更适合新手,界面直观,选镜像、选 U 盘、点 Flash,完事。Rufus 选项更多,适合有一定经验的用户,可以自行决定分区类型是 GPT 还是 MBR。总体原则是:引导模式跟 BIOS 保持一致,BIOS 是 UEFI 就选 GPT,传统 BIOS 就选 MBR。
2.2 为什么同一根 U 盘换一台机器就会失败
创建完安装盘,还有一个很普遍的“怪象”:同一根 U 盘,在一台机器上引导正常,换到另一台就黑屏。多数原因是主板只从 UEFI 的某个特定引导路径启动,而 U 盘制作工具没把你手上这个 ISO 的引导文件放到它期望的位置。
碰到这种情况,不要反复重写安装盘,先进 BIOS 确认两件事:
- 启动模式有没有从 Legacy 切到 UEFI,或者反过来;
- 引导菜单里能否识别到
UEFI: USB Device这样的条目。
另一个容易被忽略的点是 USB 接口。有些前置 USB 口供电不稳,U 盘引导时会中断,插到机箱背面 I/O 面板上的 USB 口(尤其是 USB 2.0 黑色口)往往最稳。这类硬件层面的玄学,排查时优先排除,免得在软件层面空转。
3. 分区不是做数学题:裸盘手动分区的取舍与我的最终方案
3.1 为什么我不用 LVM 和全盘加密
Ubuntu 安装器自带两种自动分区方案:一种是“清除整个磁盘并安装 Ubuntu”,另一种是“设置 LVM”。对于一块空白硬盘,大多数人会直接选“清除整个磁盘”,没问题,简单直接。但如果你想在同一个盘上预留双系统,或者以后想自己管理系统盘和应用数据盘,手动分区值得花几分钟研究。
手动分区时,有一个问题我必须说清楚:LVM 和全盘加密都很好,但它们会引入额外的抽象层。LVM 是逻辑卷管理,好处是以后可以动态调整分区大小,坏处是如果对 LVM 命令不熟,一旦出现卷组损坏或逻辑卷挂载失败,恢复难度比普通分区大得多。全盘加密(通过 LUKS 实现)能保护数据,但每次开机都要输入密码,而且以后换机器、挂载旧盘时也多一道环节。
我的建议是:开发机、日常主力机,优先考虑普通分区;虚拟机、服务器、需要灵活调整磁盘空间的生产环境,再考虑 LVM;对安全级别有硬性要求的场景,才用 LUKS 全盘加密。这不是说 LVM 和加密不好,而是对“从空白硬盘到能干活”这个目标来说,每一步都要想清楚收益和折腾成本。
3.2 我的裸盘手动分区方案
一块 1TB 的 NVMe 固态,我的最终布局是这样的:
| 挂载点 | 分区类型 | 大小 | 文件系统 | 作用 |
|---|---|---|---|---|
| /boot/efi | EFI 系统分区 | 512MB | FAT32 | UEFI 引导必需 |
| /boot | Linux 文件系统 | 1GB | ext4 | 内核和引导文件 |
| / | Linux 文件系统 | 剩余空间全部 | ext4 | 系统、用户数据、应用 |
Swap 没有再单独划分区,Ubuntu 26.04 默认支持交换文件,系统会自动创建/swap.img。普通桌面场景下,交换文件和交换分区的作用差异不大,但交换分区以后调整大小非常麻烦;交换文件则是纯文件,想改大改小随时可以操作,灵活性高得多。
为什么不单独分/home?这是很多台式机用户会纠结的问题。单独分/home的好处是以后重装系统不丢个人数据,但我个人的看法是,开发机上大量项目依赖文件、Docker 镜像、环境配置都散落在/home下,只靠分区保护数据并不够,真正的安全感应该来自配置管理和备份。单独分一个/home反而会让系统盘空间不好用,反而限制了以后的项目吞吐和 Docker 镜像缓存。
这个分区方案是建立在“整个盘只装 Ubuntu”的前提上的。如果要做双系统,先给 Windows 留下空间,再让 Ubuntu 安装器使用剩余未分配空间,或者自行建立分区。双系统的麻烦点在于 UEFI 引导菜单会互相覆盖,建议装完两个系统后,进入 BIOS 手动调整启动顺序,优先使用 Ubuntu 的 grub 接管引导。
3.3 手动分区时容易犯的错
手动分区里头埋着一个特别基础的坑:忘记指定 EFI 分区。
在安装器的手动分区界面里,如果你选了 GPT 分区表,但没创建/boot/efi,点“现在安装”后,安装器可能会报一段“没有为 EFI 分区指派根分区”之类的错误,或者干脆卡在引导安装那一步。遇到这种情况,不用慌,回到分区界面,确认有没有一块 FAT32 格式的分区挂载在/boot/efi,把它标记为“EFI 系统分区”即可。
另一个坑是给/boot分区留的空间太小。有些教程建议 500MB 就够,但 Ubuntu 长期更新下来,旧内核不会自动清理,/boot会慢慢被内核镜像和 initrd 文件塞满。1GB 是比较舒服的下限,留 2GB 也完全合理。如果你是 512GB 以下的小硬盘,可以考虑不单独分/boot,把引导文件和根分区放一起,安装器也支持。
4. 安装后第一步:让机器能联网、能访问远方、能更新
4.1 网络激活:什么网卡型号最让人折腾
安装完成后第一次登录系统,第一个要解决的问题是联网。桌面版安装时如果选择的网络没连上,装完系统后大概率网络也是断的。先打开终端,执行ip a(或者nmcli device status),看看有没有网卡和 IP。
如果用的是有线网络,但网卡没有自动获取到 IP,常见原因是网卡驱动没加载。以太网卡型号往往集中在 Intel 和 Realtek 两家中,Intel I219/I226 大部分情况免驱,Realtek 2.5G 网卡(比如 RTL8125)在部分新内核上偶尔要手动装固件。可以用lspci -nnk | grep -A2 -i ethernet查看网卡型号和已用的驱动模块。
有线不通的情况下,先用手机 USB 共享网络或者临时接一张免驱 USB 网卡,让机器能上网,然后补装驱动。不要尝试在完全离线的情况下编译驱动,那可真是自己给自己上刑。
如果连接的是无线网络,先确认无线网卡是不是博通那批老型号。博通无线网卡的驱动在 Linux 下常年是个尴尬话题,Ubuntu 26.04 的内核虽然默认包含线驱动,但部分芯片需要额外接受“附加驱动”里的固件许可协议。可以通过“软件与更新”里的“附加驱动”标签页安装闭源驱动,也可以通过命令行查看:
ubuntu-drivers list如果列出的是bcmwl-kernel-source这类包,就通过sudo apt install装它,装完重启再连网。
4.2 SSH 连不上?十有八九是这四件事
有很多人装完系统想从另一台电脑 SSH 进来,结果发现连不上,于是开始怀疑防火墙、怀疑路由器、怀疑 OpenSSH 版本。实际上,新装的 Ubuntu 默认根本不安装 SSH 服务端,这个问题每次都有一堆人要现查。
正确做法是这样:装好 OpenSSH 服务端并启用:
sudo apt update sudo apt install -y openssh-server sudo systemctl enable --now ssh sudo systemctl status ssh --no-pager如果服务状态是active (running)但仍然连不上,按顺序排查:
- 客户端和服务器是否在同一网段,或者服务器的 IP 是否正确,用
ip a看; - 服务器防火墙是否允许 22 端口,检查
sudo ufw status,如果状态是 active 就放行:sudo ufw allow OpenSSH sudo ufw enable ~/.ssh/authorized_keys权限是否正确。用密钥登录时,常见坑是权限过宽,SSH 会直接拒绝。执行chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys;/etc/ssh/sshd_config里的PasswordAuthentication是否被改成了no。部分镜像或安全加固脚本会默认关闭密码登录,如果还没有配好密钥,就先把密码登录打开。
这些步骤做完,SSH 基本就通了,剩下的都是网络层面的外部问题,和系统无关。
4.3 版本刚装好,先把源换成国内镜像
Ubuntu 装完后默认的软件源在国内更新速度感人,换源是必须操作。Ubuntu 26.04 使用的是新的 deb822 格式源文件,不再是一行一个源的sources.list,而是一个/etc/apt/sources.list.d/ubuntu.sources文件。
换源前先做个备份,然后替换顶级域名。这里我用阿里云镜像站举例:
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak sudo sed -i \ -e 's|http://archive.ubuntu.com/ubuntu/|https://mirrors.aliyun.com/ubuntu/|g' \ -e 's|http://security.ubuntu.com/ubuntu/|https://mirrors.aliyun.com/ubuntu/|g' \ /etc/apt/sources.list.d/ubuntu.sources sudo apt update如果你用的其它镜像站,只需要把mirrors.aliyun.com替换成对应域名。国内常见的还有网易镜像、中科大镜像等,项目主页上都有源配置说明。改完之后执行sudo apt update,能顺利刷新索引就没问题。
有一点要特别提醒:主机名的介质问题。很多教程写的 sed 命令只替换了archive.ubuntu.com,漏了security.ubuntu.com,这样安全更新还是走国外节点,还是慢。上面命令里我两个一起替换了,注意核对好你的源文件里实际的 URL 写法。
5. 让中文输入法和字体更像“顺手的工具”:输入法、fontconfig、终端字体
5.1 输入法选型:fcitx5 而不是“闭眼装搜狗”
新装的 Ubuntu 桌面版默认带 IBus 输入法框架,也内置了智能拼音。如果你只需要一个能用的中文输入法,那自带的就够了。但如果你想要更好的词库管理、更顺滑的响应,以及往后在 JetBrains 全家桶、VS Code 里都不出问题,我几乎总会推荐 fcitx5,这也成为我装完新系统后必做的步骤之一。
关于搜狗输入法,我这个观点可能要得罪一些人:它不是不能装,但 Ubuntu 每次大版本升级、输入法框架变化、依赖库更新,搜狗几乎是每次都出问题的高发区。它自带一套额外的依赖,和 fcitx5 或者 ibus 集成一冲突,症状就是无法切换、面板丢失、光标跟随异常,而你作为用户还找不道理可讲。
我的底线是装 fcitx5:
sudo apt install -y fcitx5 fcitx5-chinese-addons fcitx5-configtool im-config -n fcitx5im-config -n fcitx5这条命令会把系统默认输入法框架切换成 fcitx5,执行完之后注销重新登录,让环境变量生效。重启桌面后,使用fcitx5-configtool在配置界面里添加“拼音”,把所有快捷键记得改成自己习惯的键位。Ctrl+Space 切换中英文是默认逻辑,适应之后基本上不会再想去折腾别的。
5.2 为什么有些软件里输入法死活不出中文
输入法装好了,却在某个应用里打不出中文,这是另一个高频问题。com.yly 的核心原因是这些应用没有正确设置输入法环境变量。微信、部分 Electron 应用、某些 Java GUI 应用,在 Linux 下常见症状是不跟随输入法框架。
这套环境变量通常写在/etc/environment里:
GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx如果 fcitx5 是通过自动配置方式启动的,通常桌面环境会自动注入这些变量,不需要手动加。但当你在 terminal 里手动启动某些程序时,环境变量缺了就会失效。这时候在启动它的终端里先执行:
export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx再启动程序,一般就正常了。
Smart appearance:输入法这个问题真的很吃时机,补了很多坑,这是在装完重启之后,先用浏览器验证一遍中文输入,再去打开 IM 软件测,如果浏览器里也没问题、IM 里有问题,那就是软件自身和输入法框架的集成问题,而不是输入法本身坏了——别一上来就重装。
5.3 字体:把 Ubuntu 的观感往 macOS 方向拉一拉
写代码的人对字体的要求比普通用户高很多,这绝对不算矫情。网上有个很经典的提问:WSL Ubuntu 写代码最推荐的字体是什么,希望能接近 macOS 的体验。抛开具体字体名,这个话题背后其实藏着两个需求:一是字体渲染需要柔和不发虚,二是中英文混排时字重和宽度要协调。
Ubuntu 默认的字体渲染偏向小幅微调,在部分高清屏上看着还行,但在普通 1080P 屏上,中文颇有“毛边感”。而 macOS 的字体渲染思路是亚像素平滑配合无 hinting,看起来更圆润。要做的事有两件:装一套合适的字体,再改 fontconfig 配置。
字体层面,我推荐开源免费、仓库里直接能装的方案:
sudo apt install -y fonts-noto-cjk fonts-inter fonts-jetbrains-monoNoto Sans CJK 负责中文,Inter 负责无衬线英文,JetBrains Mono 负责等宽代码字体。这些都是开源字体,不需要处理授权问题。
渲染层面,我的/etc/fonts/local.conf做了如下设置,这个配置对高分屏和普通屏都比较友好:
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="pattern"> <test name="family"><string>sans-serif</string></test> <edit name="family" mode="prepend" binding="strong"> <string>Inter</string> <string>Noto Sans CJK SC</string> </edit> </match> <match target="pattern"> <test name="family"><string>monospace</string></test> <edit name="family" mode="prepend" binding="strong"> <string>JetBrains Mono</string> <string>Noto Sans Mono CJK SC</string> </edit> </match> <match target="font"> <edit name="hinting" mode="assign"><bool>false</bool></edit> <edit name="antialias" mode="assign"><bool>true</bool></edit> <edit name="rgba" mode="assign">rgb</edit> <edit name="lcdfilter" mode="assign">lcddefault</edit> </match> </fontconfig>写完执行:
sudo install -m 644 /tmp/local.conf /etc/fonts/local.conf fc-cache -f重启应用后,终端和编辑器的字体渲染会平滑很多。注意,这个配置是全局的,如果你在终端里已经手动指定了 JetBrains Mono,那么等宽字体匹配会优先用你的手动设置,fontconfig 只接管没有指定字体的场景。
我个人的验证方法是:打开 gedit 或者 VS Code,输入一段中英文混排的文本,看看中文和英文的基线是否对齐、字重差别是否刺眼。如果满意,进入下一步。
6. 显卡驱动:别一上来就下载官网 runfile
6.1 用 ubuntu-drivers 而不是官网安装包
如果你的机器上有 NVIDIA 显卡,系统装完很可能用的是开源驱动 nouveau,卡顿、风扇狂转是家常便饭,打游戏、跑 CUDA 更是想都不要想。这时候大多数人会去 NVIDIA 官网下载一个.run安装包,双击运行。我不建议这么做,原因有两个:
第一,官网 runfile 需要你自己构建 DKMS 模块,后续一旦升级内核,驱动模块可能不会自动重新编译,导致重启后驱动消失,落在命令行界面一脸懵。
第二,runfile 安装过程中如果启用了 Wayland,可能遇到 GNOME 桌面冲突,排错成本很高。
Ubuntu 仓库里内置了便利的工具,干净方便:
sudo apt update sudo apt install -y ubuntu-drivers-common sudo ubuntu-drivers install这条命令会自动检测显卡型号,挑选当前版本最合适的闭源驱动,并且完成 DKMS 注册。装完重启,然后用nvidia-smi验证,能显示驱动版本和显卡信息就算成功。
6.2 安全启动和内核模块签名
装完 NVIDIA 驱动,最阴间的情况出现了:重启后一切正常,再重启突然驱动没了。这种“时好时坏”的状态,基本都指向一个问题——安全启动。
前面我说过裸装时建议先关闭安全启动,就是为了这个环节。如果安全启动保持开启,Ubuntu 引导时只加载已签名的内核模块,而nvidia模块是第三方编译的,没有 MOK(Machine Owner Key)签名,直接就被拒载了。
如果你确实是先装好了驱动,后来才开启安全启动,那登录系统后第一个界面就会弹出一个 MOK 管理工具提示,让你设置一个密码给模块签名。日常使用的方法是在驱动装好后,主动执行:
sudo mokutil --disable-validation或者重新进 BIOS 把安全启动关掉,二选一,没有第三条路。对普通使用场景来说,安全启动对个人电脑的边际保护非常有限,关掉它换来驱动稳定,这个取舍是合理的。
6.3 驱动装完 UI 依然卡?去查渲染器
NVIDIA 闭源驱动装好后,GNOME 桌面还可能遇到另一个症状:菜单拖动流畅,但浏览器滚动卡顿,窗口切换有明显延迟。很多人第一反应是驱动没装好,想重装驱动。实际上去检查一下系统正在使用的 GPU 渲染器:
在终端执行:
glxinfo | grep "OpenGL renderer"如果输出是llvmpipe,说明系统在用 CPU 软渲染,NVIDIA 驱动根本没有接管图形栈。这时候检查/var/log/Xorg.0.log或者用nvidia-settings -q GpuInfo看看 GPU 是否被识别,最常见的元凶是 Xorg 配置里手动写死了 NVIDIA 总线 ID,而该 ID 和当前设备不符,或者 Wayland 会话没有调用 NVIDIA 的 EGL 后端。
如果你的显卡比较新,而 Ubuntu 26.04 带的 NVIDIA 驱动版本偏旧,也可以只升级 NVIDIA 驱动包:
sudo apt install -y nvidia-driver-570具体可用版本号,用apt search nvidia-driver查看,选最新稳定版即可。
7. 放下“只装了系统”的错觉:Docker、VS Code、Codex、conda 一次装齐
7.1 Docker:别用“官方源安装脚本”硬扛
桌面机的 Docker 安装有两条路:一条是 Docker 官方提供的get.docker.com脚本,用 curl 一键安装;另一条是使用 Ubuntu 仓库里的包。
如果你已经换好国内源,直接用 Ubuntu 仓库的包更省事:
sudo apt install -y docker.io docker-compose-v2 sudo systemctl enable --now docker装完以后把当前用户加入 docker 组,避免每条命令都 sudo:
sudo usermod -aG docker $USER newgrp docker docker run hello-world如果你需要 Docker 官方仓库里的较新版本(比如需要在 Docker 里跑实验性功能),可以在之前换好的源基础上执行官方仓库的安装说明,但要注意:官方仓库地址指向download.docker.com,国内网络拉取不一定顺畅。是否引入镜像加速,根据你实际下载 Docker 镜像的速度决定。这里我把镜像层面的事说清楚:换好 Ubuntu apt 源只解决软件包下载,Docker 镜像下载走的是另一条链路,两者不要混为一谈。
7.2 VS Code:装 deb 包胜过仓库
在 Ubuntu 上安装 VS Code,我有两条经验。能用仓库方式安装就尽量用仓库方式,方便apt upgrade统一升级。但考虑到国内下载速度,装 deb 包也完全没问题,区别只在于后续的自动升级。
官方仓库方式安装需要导入 Microsoft 的 GPG key,具体过程搜索“Visual Studio Code Linux 安装”即可,这是官方长期维护的路线。装好之后自查一个点:字体是否跟着系统 fontconfig 走了。终端里打开 VS Code,把编辑器字体设为JetBrains Mono,然后把editor.fontLigatures打开,代码观感瞬间就上去一半。
7.3 conda 和 MiniForge 的正确打开方式
Conda 在 Linux 下的安装,我建议新手直接考虑 Miniconda 或者更轻量的 MiniForge,不要装 Anaconda 全家桶,很多包根本用不到,而且默认加载 base 环境会拖慢终端启动速度。
下载对应架构的安装脚本后执行 bash 安装,安装过程中有一段初始化 shell 的提示,选择 yes,然后:
conda config --set auto_activate_base false这样每次开终端不会再自动激活 base,但需要时随时用conda activate base。另外,用 conda 的时候也要注意换国内 channel,Anaconda 官方源在国内不稳定,可以用 TUNA 或者阿里等镜像站提供的 Anaconda 源配置,方法和 apt 源类似,换掉.condarc里的 channel 地址。
如果你只是需要用 Python 做简单脚本,不建议上 conda,直接用 Ubuntu 自带的 Python 配合python3 -m venv就行。conda 是为那种需要 numpy、CUDA 工具包、编译链之间复杂依赖的项目准备的,它解决的痛点在我实际开发中通常是“编译一个包时缺少系统依赖”这种,所以不要动不动就整一套 conda 环境。
7.4 Codex CLI 的安装思路
如果你对 AI 编程助手感兴趣,想在 Ubuntu 26.04 上跑 Codex CLI,它本质是个命令行工具,安装逻辑很简单:下载官方提供的 CLI 程序、赋予执行权限、把路径放进$PATH即可。具体安装细节以官方 README 为准,我只提醒三件事。
第一,这个 CLI 通常需要 Node.js 环境。Ubuntu 自带 Node 版本可能偏老,可以通过 NodeSource 仓库安装 Node 20 LTS 或更高版本。第二,运行前先确认它依赖的系统库是否齐全,缺了什么库,跑起来以后终端会给出比较明确的报错,按提示装就行。第三,把它当测试工具,不要在生产环境里放养式使用,它生成代码的质量和你给的上下文约束强相关。
8. 给嵌入式开发板准备的交叉环境:RK3576 这类板卡怎么挂进系统
最后这部分可能受众范围小一些,但我发现越来越多人在 Ubuntu 上用开发板,搜索里也经常看到“RK3576 构建 Ubuntu 系统”“开发板挂载 Ubuntu”相关的词。我这里给一条通用路径。
如果你手里的主板是 Rockchip 的 RK3576 这类 Arm 架构开发板,在 Ubuntu 上的工作通常分两条线。一条是把 Ubuntu 本身构建成板子的固件镜像,这条线一般要用对应的 SDK 仓库,从官方地址拉取 buildroot 或 yocto 工程,然后在宿主机上安装交叉编译工具链。Rockchip 官方仓库对 Ubuntu 宿主机的依赖比较敏感,反复踩坑的地方多半是缺少某版本 python、缺少某几个 sudo apt 安装的基础库,以及repo工具的版本不对。
另一条线是调试和挂载。板子通过 USB 线连接到 Ubuntu 主机,最常见的问题是设备节点权限不够,lsusb能看到设备,但访问/dev/ttyUSB0时提示 Permission denied。这时需要添加一条 udev 规则:
SUBSYSTEM=="tty", ATTRS{idVendor}=="你的板卡VID", MODE="0666", GROUP="dialout"idVendor可以从lsusb输出里看到,比如某厂商的 USB 设备 VID 可能是2207之类,请以实际输出为准,不要照抄。保存到/etc/udev/rules.d/99-rk3576.rules,然后执行:
sudo udevadm control --reload-rules sudo udevadm trigger重新插拔 USB 线,权限就正常了。
交叉编译时,另一种更省心的方案是用 Docker 容器封装构建环境,这也是 RK3576 这类板卡比较流行的做法。在宿主机上把 SDK 装进容器,以后换机器不担心环境迁移问题,和我前面说到的 Docker 安装步骤刚好衔接上。
9. 装完以后的“体检”顺序
整个过程走完,我每次都会按下面这个顺序做一遍最终检查,顺序本身就是一个排错逻辑,从上到下,每一层都确认没问题再进到下一层。
- 重启一次,确认系统能正常从硬盘引导,U 盘拔掉也不影响;
- 打开终端执行
ip a,确认网络正常,能够ping通网关和外部域名; - 用另一台电脑 SSH 连一次,确认远程访问正常;
- 在任意输入框里切换一次中英文输入,确认输入法状态正常;
- 打开浏览器滚动半小时,确认显卡渲染没有明显卡顿;
- 执行
nvidia-smi,确认 NVIDIA 驱动在重启后依然可用; - 跑一次
docker run hello-world,确认 Docker 服务正常; - 在 VS Code 里新建文件写几行代码,确认字体和代码补全没有异常;
- 接上开发板,确认 USB 设备权限正确。
这一套下来,机器才算是从“装好了系统”变成了“能干活”。
10. 最后补一个频发的安装中途问题
安装器跑到一半没反应,或者直接跳回桌面,这在部分设备上是安装器前台线程卡死。遇到这种情况,先别急着认定镜像或 U 盘损坏,考虑一下是不是安装器内存不足。
解决办法是一次性禁用安装器的图形效果。在 grub 引导界面选中“Try or Install Ubuntu”,按下e,在linux开头那一行末尾追加:
nomodeset然后按 Ctrl+X 继续启动。nomodeset会让内核使用基础显示驱动,绕开安装器对显卡的初始化流程。这个参数只是临时给安装器用的,装完系统后的正常启动并不需要。这个参数同时也能解决一部分新手安装时遇到的黑屏问题,所以如果你在启动安装介质时就黑屏,直接用这个方法。
如果你在启动安装界面看到分辨率不对或者画面撕裂,同样可以先加一个quiet splash删除,看看是不是某些 log 信息滚动太快导致误以为卡死。另外,安装过程中拔插 U 盘的念头不要有,哪怕只是换到背面 USB 口,也等装完再动。安装器运行到一半,bootloader 写入可能会因为 U 盘变动而失败,只能从头再来。
我个人的体会是,裸装 Ubuntu 最花时间的其实不是敲那几条命令,而是某一步失败之后,你根本不知道是硬件、固件、镜像还是驱动的问题。把可变因素从一开始就一个一个排除,顺序是从下往上:镜像校验,主板引导,分区,网络源,驱动,应用,到开发环境。按这个顺序排查,就能基本走出装到半夜还在反复磨的怪圈。希望这篇流程笔记能帮你省掉那些我踩过的通宵。