树莓派中文显示配置:中文字体、locale与换源避坑
简介这份面向树莓派初学者的docx文档聚焦系统界面中文化这一常见需求适合刚接触Linux、希望减少英文界面障碍并改善国内网络环境下软件更新体验的用户参考。压缩包内仅含1个docx文件整体约732KB篇幅集中便于在电脑端快速查阅和对照练习。文档以步骤化方式组织内容覆盖更换国内镜像源、安装文泉驿正黑字体、使用raspi-config调整区域与键盘设置、重启生效及效果核对等关键环节并附有相应命令、配置片段和最终效果图可帮助读者理解各步骤的作用与先后关系排查源地址失效、中文字体缺失等常见问题。目前已有231人学习下载可作为树莓派中文环境配置、课程实验或社团教学的入门参考。1. 树莓派改中文显示先把「满屏方块」的锅分清楚插上 HDMI、通电、进桌面菜单里一半是英文另一半是方块——这不是屏幕坏了是系统里根本没有中文字体也没开中文 locale。很多人第一反应是「装个字体就完事」结果apt install卡在下载上因为默认源在海外几十 KB 的包能转半天。更常见的翻车是照着几年前的老帖把jessie的源整段贴进新系统apt update刷出一屏 404连带原来的源也被覆盖没了。这一套流程换源、装文泉驿正黑、raspi-config选 locale、重启验证本身不复杂但它对版本极其敏感代号和菜单名一错后面每一步都会歪。下面按我实际走通的顺序记录适合刚拿到板子、系统装在 SD 卡上的开发者照着复现。2. 换源与前置检查raspi.list 里哪几个字段不能照抄换源的目的是把软件包索引和安装流量拉到更近的镜像上让apt-get update和后面的字体安装能在几十秒内完成而不是等超时。但这件事有个前提源地址里带着发行版代号代号必须和当前系统一致否则镜像站上没有对应的目录服务器直接给你 404。老帖子里写死的jessie属于 Debian 8 那一代现在手上的卡大概率不是这个版本所以第一步不是编辑文件是先把系统版本和现有源摸清楚。2.1 先确认系统代号再决定源怎么写插好网线或连上 WiFi打开终端先把三件事查出来发行版、代号、当前生效的源文件清单。# 一次性看清发行版和代号VERSION_CODENAME 就是源地址里要用的那个词 cat /etc/os-release # 列出 sources.list.d 下所有源文件raspi.list 只是其中之一 ls -l /etc/apt/sources.list.d/ # 看当前 raspi.list 到底写了什么编辑前一定要先看 cat /etc/apt/sources.list.d/raspi.list/etc/os-release是 systemd 系发行版的标准元数据文件VERSION_CODENAME这一行就是我要的答案比如jessie、stretch、buster、bullseye、bookworm。ls -l那一步的意义在于确认系统用的是「单文件」还是「分文件」布局——新版 Raspberry Pi OS 把主源放在/etc/apt/sources.list把厂商源放在sources.list.d/raspi.list两条链路是叠加生效的改错文件等于白改。如果lsb_release -a提示 command not found不用专门去装os-release的信息已经够了。常见做法是对照一下原料里给的jessie只适用于 Debian 8 时代的镜像目录stretch、buster各自换名字路径结构不变到了bullseye及以后的版本raspbian/raspbian这条路径基本不再作为主源使用官方已并到 Debian 的 armhf 仓库这时强行沿用老写法只会得到空目录。所以后面代码块里的两条地址请把jessie这个位置替换成你自己查出来的代号其余字段原样保留。2.2 备份、注释、写入nano 的三个动作别做错编辑之前先复制一份原文件这是唯一一颗后悔药出问题直接cp回去就能恢复。# 备份原文件带 .bak 后缀出问题时一条 cp 就能还原 sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak # 用 nano 打开编辑 sudo nano /etc/apt/sources.list.d/raspi.list进入 nano 后把文件里原有的源地址在行首加#注释掉注意是「注释」不是「删除」——留着它日后排查时能一眼看出原始配置长什么样。然后在下方补两条国内镜像地址原料给的写法如下其中jessie按 2.1 查到的代号替换# 原地址保留注释出问题便于对照回滚 # deb http://archive.raspbian.org/raspbian/ jessie main contrib non-free rpi # 第一条国内镜像字段顺序类型 地址 代号 组件 deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ jessie main contrib non-free rpi # 第二条作为备份镜像第一条不可用时 apt 会尝试它 deb http://mirrors.neusoft.edu.cn/raspbian/raspbian/ jessie main contrib non-free rpi每一行拆开看是四段deb表示二进制包源源码包是deb-src中间是镜像站的目录地址末尾的raspbian/raspbian/双层路径不是手滑是镜像站的目录结构第三段是发行版代号这一项写错就是 404最后main contrib non-free rpi是组件列表main是官方自由软件contrib和non-free放的是依赖非自由组件的包rpi是树莓派专有组件删掉rpi会导致部分硬件相关包找不到。保存这一步是新手最容易栽的地方nano 的CtrlX是「退出」不是「保存」。按下去之后屏幕底部会问Save modified buffer?此时按Y再按回车确认文件名才算真正落盘。如果直接连按几下回车跳过文件根本没改回头apt update用的还是老源人会以为镜像站挂了。2.3 apt-get update 之后从输出里读三个信号改完文件立刻刷新索引# 刷新软件包索引只更新列表不安装任何东西 sudo apt-get update输出里每一行前缀有含义Hit表示索引没变化、直接复用本地缓存Get表示真的从镜像下载了新索引Ign表示这一行被忽略通常是组件名写错或该镜像没有这个目录Err是失败后面会跟 HTTP 状态码。我要看的是有没有Err和404。全部Hit或Get才算通如果刷出一堆404 Not Found并带着jessie字样那就是代号和系统不匹配回到 2.1 重查。最后一行通常是Reading package lists... Done出现这行说明索引构建完成可以往下走。2.4 sources.list 与 sources.list.d 是叠加关系有个容易误判的现象明明raspi.list改对了apt update还是报某些地址连不上。原因往往在另一个文件——/etc/apt/sources.list里还留着老的海外主源或者sources.list.d/下还有别的.list文件在生效。apt 会把sources.list和sources.list.d/*.list全部读进来合并成一张索引表任何一条坏源都会在输出里冒出来虽然不致命但会拖慢整个 update。排查方式是临时把可疑文件改名加.disabled后缀apt 只认.list结尾再跑一次 update 对比输出# 临时停用某个源文件apt 只读取 .list 结尾的文件 sudo mv /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.disabled # 验证是哪个文件在报错确认后再改回来 sudo apt-get update sudo mv /etc/apt/sources.list.d/raspi.list.disabled /etc/apt/sources.list.d/raspi.list这个手法我在排查多源冲突时用得最多比逐行注释快得多。确认全部源都健康之后换源这一步就算收尾可以进入字体安装了。3. 安装中文字体ttf-wqy-zenhei 这条命令装了什么换源解决的是「下得动」装字体解决的是「画得出」。Linux 桌面渲染文字靠 fontconfig 找字体找不到对应字形的字符就画成方块——业内叫豆腐块。树莓派官方镜像出于体积考虑默认只带少量西文字体中日韩字形基本缺席所以中文文件名、网页中文、终端里的中文都会变成方块。原料里选的是ttf-wqy-zenhei文泉驿正黑一个覆盖常用汉字、体积不大、在低配设备上渲染速度可以接受的开源黑体。3.1 装之前先看清这个包的信息# 查看包描述、版本、依赖和安装后占用空间确认镜像里确实有它 apt-cache show ttf-wqy-zenhei输出里重点看三行Version是镜像提供的版本号不同代号的系统版本号会不一样这不影响使用Installed-Size是解包后占用的 KB 数一般几 MB 到十几 MBSD 卡剩余空间只要不是个位数 MB 都没问题Depends是依赖项字体包通常只依赖fontconfig之类的渲染基础库这些在桌面版里本来就有。如果这条命令返回E: No packages found说明索引没刷新或者源里没有这个包回第 2 章重跑apt-get update。3.2 安装与第一轮验证# -y 表示不交互确认适合脚本化平时手动装可以不加看清确认信息 sudo apt-get install -y ttf-wqy-zenhei # 列出系统当前能识别的中文字体正常情况下应该能看到 WenQuanYi Zen Hei fc-list :langzhfc-list :langzh里的:langzh是 fontconfig 的过滤语法意思是「列出所有声明支持中文的字体」。装成功的话输出会带一行形如/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc: WenQuanYi Zen Hei:styleRegular的记录。这个路径值得记一下字体文件实际落在/usr/share/fonts/truetype/wqy/目录下后面排查「装了但没生效」时要来这里确认文件是不是真的在。如果这条命令没有任何输出先别急着怀疑镜像跑一次字体缓存重建# -f 强制重建-v 输出详细过程能看到扫描到哪些字体目录 sudo fc-cache -fvfc-cache干的事是扫描字体目录并生成缓存索引某些精简系统装完包不会自动触发。-f忽略时间戳强制重扫-v打印每个被扫描的目录。输出里如果出现/usr/share/fonts/truetype/wqy说明字体目录被认到了再跑一次fc-list :langzh基本就出来了。3.3 字体不够用时的兜底方案文泉驿正黑覆盖的是常用汉字遇到生僻字、部分繁体异体字或者 emoji 时仍可能缺字形。桌面环境下我一般再加一个思源黑体的包兜底# 思源黑体字重更全、覆盖更广体积比文泉驿大不少空间紧张时二选一 sudo apt-get install -y fonts-noto-cjk # 装完确认两个字体族都在 fc-list :langzh | wc -lfonts-noto-cjk是 Noto 系列的中日韩合集字形完整度高代价是包体积几十 MB 起步SD 卡容量小或者跑 Lite 版纯命令行的机器上没必要装。wc -l是数行数装之前可能只有个位数甚至 0装完应该变成两位数。这一步不是必需项属于「装了文泉驿之后某些界面还是有个别方块」时的补丁。3.4 字体存在不等于界面会用它有个认知差要提前纠正装字体和系统语言是两件独立的事。字体决定「有字形可画」locale 决定「系统该不该用中文渲染、用什么编码解析文本」。只装字体不改 locale桌面菜单依然显示英文只是原来那些方块变成了正常的中文——多见于文件名、网页标题这类内容文本。反过来只改 locale 不装字体界面文字会切到中文但一个都画不出来满屏方块。所以这两步的顺序不能省先把字体铺好再去raspi-config里动 locale。另外装完字体后已经开着的应用不会自动重载字体列表某些程序需要关掉重开才认新字体这是正常现象不用当成安装失败。4. raspi-config 设置 locale菜单名和勾选方式都以当前版本为准raspi-config是树莓派官方的系统配置工具一个基于终端的菜单程序locale、时区、键盘布局都从这里进。它的坑集中在两点菜单层级在版本迭代中改过名字以及勾选界面用的是空格键而不是回车。这两点原料里也提到了——「空格选中」这是关键操作提示很多人卡在这一步按回车直接跳回上级菜单以为工具坏了。4.1 菜单路径随版本变了先认准当前层级# 需要 root 权限进入后是方向键导航、Tab 在按钮间切换 sudo raspi-config进去之后老版本里的入口叫Internationalisation Options新版改成了Localisation Options再下一级才是Change Locale、Change Timezone、Change Keyboard Layout、Change Wi-Fi Country。如果你按老教程找Internationalisation Options翻遍整页都没有不是你按错了键是菜单改名了直接找Localisation Options即可。这一步的判断依据很简单主菜单里带 I18n 或 Localisation 字样的那个条目就是。进去后先选Change Locale。屏幕会列出几百个 locale光标停在列表上此时的操作是方向键移动、空格打星号标记、Tab切到Ok再回车确认。只按回车不按空格等于什么都没选退出后会提示「没有变化」。4.2 en_US.UTF-8 和 zh_CN.UTF-8 必须同时存在这是整篇里最值得强调的一个取舍。列表里往下翻找到en_US.UTF-8 UTF-8和zh_CN.UTF-8 UTF-8两个都用空格标记上然后确认。原因在于zh_CN.UTF-8提供中文界面和中文排序规则但一旦系统里只有它很多命令行工具输出的报错信息、帮助文本也会被翻译成中文在 SSH 终端里遇到编码不一致时反而更难搜保留en_US.UTF-8作为默认可以让底层工具保持英文输出桌面层再单独切中文兼容性最好。配置工具退出后用命令行确认生成结果# 生成 locale 数据某些版本 raspi-config 已自动调用手动跑一遍不会有副作用 sudo locale-gen # 查看当前生效的 locale 设置重点看 LANG 和 LC_ALL localelocale输出里的LANG是全局默认语言LC_ALL是最高优先级覆盖项如果LC_ALL有值它会盖掉其他所有LC_*。常见问题是LC_ALL被设成了某个不存在的 locale导致所有程序回落到C界面又变英文。这时用sudo update-locale LANGzh_CN.UTF-8显式写一次或者手动清空/etc/default/locale里的LC_ALL行再重新登录。4.3 时区、键盘与 WiFi 国家码一起配掉同一层菜单里剩下三项建议一次配完避免反复重启。时区用命令更直接# 设置时区时区标识符可以从 timedatectl list-timezones 里查 sudo timedatectl set-timezone Asia/Shanghai # 确认结果输出里 Time zone 一行应显示设置值 timedatectltimedatectl是 systemd 提供的统一时间管理入口比dpkg-reconfigure tzdata的交互界面更快写进脚本也方便。键盘布局在Change Keyboard Layout里选国内常见的 104 键布局选Generic 104-key PC键盘型号一栏一般选Generic PC Keyboard后面的组合键映射保持默认。WiFi 国家码决定了允许使用的信道范围选错会出现「能搜到热点但连不上」的玄学问题在Change Wi-Fi Country里选对应项即可。4.4 重启之前先做一次配置快照sudo reboot之前把这次改过的文件位置记下来下次重装系统或者换卡能省一半时间/etc/apt/sources.list.d/raspi.list源、/etc/default/locale语言、/etc/timezone时区。三条cat拼一条命令就能存档# 把关键配置打成一份快照方便换卡后对照恢复 { cat /etc/apt/sources.list.d/raspi.list; \ cat /etc/default/locale; \ cat /etc/timezone; } ~/sys-config-snapshot.txt这个习惯救过我几次——换卡重装后不记得当时 locale 是怎么勾的翻出快照一眼就对上了。快照存到用户目录下注意别存到/tmp重启就没了。5. 避坑与排查换源装字体最常翻的五次车下面五条都是我在真机上遇到过、并且有明确现象和对应解法的。每条按「现象 → 原因 → 解决」记录遇到问题时可以直接对号入座。5.1 apt-get update 刷出一屏 404全是 jessie 字样现象改完源执行更新输出里连续出现Err ... 404 Not FoundURL 里带着jessie最后提示Some index files failed to download。原因镜像站的目录结构跟发行版代号绑定系统实际不是 jessie却照抄了老帖的代号镜像上根本没有对应目录。解决cat /etc/os-release看VERSION_CODENAME把 raspi.list 里第三段代号换成查到的值重新sudo apt-get update。如果新版系统上raspbian/raspbian路径本身就不可用就保留原文件注释掉的内容改回官方源结构或者用备份文件cp /etc/apt/sources.list.d/raspi.list.bak还原后再研究。5.2 nano 改完保存了可文件内容一点没变现象编辑、按CtrlX、以为保存成功再cat一遍发现还是老内容。原因CtrlX只是退出动作nano 会在底部追问Save modified buffer?需要按Y再回车确认文件名直接回车等于放弃修改。解决重新打开文件改完按CtrlX→Y→Enter三步走完然后用cat回读一次确认。养成「改完必回读」的习惯比事后怀疑镜像站靠谱得多。5.3 按老教程找不到 Internationalisation Options现象sudo raspi-config进主菜单翻遍所有条目都没有Internationalisation Options以为自己进错了工具。原因新版本把这一项改名为Localisation Options功能不变只是措辞调整。解决认功能不认名字找带「本地化/国际化」含义的那一项进去子菜单里的Change Locale、Change Timezone是关键入口。不确定版本时用raspi-config --version或者dpkg -l raspi-config看版本号再对着该版本的菜单结构操作。5.4 字体装了、locale 也选了桌面还是方块现象fc-list :langzh能列出文泉驿正黑locale里LANGzh_CN.UTF-8可桌面上依然方块。原因三种可能——字体缓存没重建系统是 Lite 版根本没有图形界面看到的「桌面」其实是远程终端或者改完 locale 没重启正在跑的桌面会话还持有旧的 locale 环境变量。解决先sudo fc-cache -fv重建缓存再确认系统是不是桌面版ls /usr/bin/startx或者看有没有图形会话进程最后老老实实sudo reboot会话级的环境变量只在新会话里生效。三条挨个排基本能定位。5.5 中文文件名在桌面正常SSH 终端里全是乱码现象本地显示器上中文文件名显示正常从另一台机器 SSH 连上去ls中文变成问号或乱码。原因SSH 客户端和服务端的字符编码不一致服务端 locale 是zh_CN.UTF-8而客户端终端模拟器按 GBK 或者C解析字节流。解决优先统一成 UTF-8。客户端终端模拟器的编码设置为 UTF-8服务端确认locale输出里LANG和LC_CTYPE都是*.UTF-8如果临时要用可以在会话里export LANGen_US.UTF-8让输出先回到英文便于读报错。别去改zh_CN.GBK那是给自己挖坑。6. 重启之后怎么验证中文是真的跑通了sudo reboot之后别急着看桌面截图就下结论。判断一套中文环境是否真的生效我一般分三层验证字符层、环境层、应用层。三层都过才算装完缺一层都可能在某次操作里突然冒出方块。第一层看字体命令层面的证据最硬# 数一下系统认到的中文字体数量0 就是没装上 fc-list :langzh | wc -l # 看具体字体族名确认 WenQuanYi Zen Hei 在里面 fc-list :langzh | head -5数量为 0 说明字体包没装成或者缓存没建回到第 3 章。能列出WenQuanYi Zen Hei且数量大于等于 1字符层就算过。第二层看环境变量这决定了系统「想不想」用中文# 只挑关键变量看LANG 是默认语言LC_ALL 是最高优先级覆盖 locale | grep -E LANG|LC_ALL|LC_CTYPE # 确认系统识别到的编码是 UTF-8 而不是 ANSI_X3.4 或 GBK echo $LANG期望结果是LANGzh_CN.UTF-8且LC_ALL为空或同为 UTF-8。如果LANG是en_US.UTF-8界面会保持英文但中文能正常显示——这其实是很多人的最优解不算失败。真正要警惕的是LANG显示成C或POSIX那说明 locale 根本没生成回第 4 章重跑locale-gen。第三层最简单也最有说服力直接用中文文件名做一次端到端测试# 建一个纯中文文件名若有乱码会在这一步暴露 touch ~/中文测试文件.txt # 列目录确认字节能被正确解析不是问号也不是方块 ls ~ | grep 中文如果ls能正常回显「中文测试文件.txt」说明从文件系统到终端渲染这条链路是通的。接着打开桌面文件管理器看一眼中文文件名和菜单项打开浏览器访问任意中文页面看字形是否完整右键菜单是不是中文——这几处覆盖了 GTK 渲染、菜单翻译和网页字体回退三条路径能一次暴露大部分残留问题。验证层命令或动作通过标准不通过时回看字符层fc-list :langzh | wc -l输出大于 0第 3 章安装与缓存重建环境层locale | grep LANG值为*.UTF-8非C第 4 章 locale 生成应用层touch ~/中文测试文件.txt后ls文件名完整回显第 5.5 条编码排查界面层打开文件管理器与右键菜单菜单为中文、无方块第 5.4 条会话未刷新有个小技巧值得单独说改完 locale 后如果不想立即重启可以先注销再登录图形会话会重新读取/etc/default/locale效果和重启接近省一次开机等待。但如果同时还换了源和字体还是建议完整重启一次避免缓存和索引处于中间状态回头排查时分不清是哪一步没生效。从那以后我每次动完 locale 和字体都强制走一遍「fc-list 数一遍、locale 看一眼、中文文件名建一个」这三步再截图存档。踩过的坑告诉我中文显示这类问题很少是一次性配错的多半是某一层看起来好了、另一层还没跟上等真正用到的时候才爆出来。希望帮到你。本文还有配套的精品资源点击获取