Ubuntu 20.04 解决WPS缺失Symbol、Wingdings等字体警告的完整指南
1. 问题缘起一个看似简单却影响深远的字体缺失警告如果你在Ubuntu 20.04 LTS上使用WPS Office大概率遇到过这个弹窗一打开WPS文字或表格一个醒目的提示框就跳出来告诉你“系统缺失字体 Symbol、Wingdings、Wingdings 2、Wingdings 3、MT Extra”。点击“确定”后虽然软件能正常使用但这个每次启动都出现的提示就像鞋里的一粒小石子不致命但膈应人。更关键的是当你打开一些从Windows平台传来的文档特别是那些使用了这些特殊符号字体的老文档或模板时排版可能会错乱原本精心设计的符号如项目符号、装饰元素、数学符号变成了一堆乱码或空白框直接影响文档的呈现效果和专业性。这个问题根植于操作系统间的字体生态差异。Symbol、Wingdings等字体是微软公司的核心字体集之一随着Windows和Office捆绑分发在Windows世界是“标配”。而Ubuntu等Linux发行版出于版权、打包策略和哲学差异默认不会包含这些专有字体。WPS Office为了兼容性在渲染文档时会调用这些字体名当在Linux系统里找不到时就会弹出缺失警告。解决它不仅仅是消除一个弹窗更是为了确保文档跨平台交换时的视觉保真度。下面我就结合多次在Ubuntu桌面环境部署的经验把这套“补全字体、一劳永逸”的解决方案拆解清楚。2. 核心思路拆解为何要补以及如何补面对这个提示很多人的第一反应是去网上搜索一个所谓的“WPS字体包”直接安装。这思路没错但我们需要理解其背后的逻辑才能避免踩坑。核心目标就一个让Ubuntu系统的字体目录里存在名为“Symbol.ttf”、“Wingdings.ttf”等文件并且被字体系统正确识别和索引。2.1 字体安装的两种路径与选择在Linux系统中字体安装主要有两种路径用户级和系统级。用户级安装字体文件放置在当前用户的家目录下的~/.fonts/或~/.local/share/fonts/目录。这种方式只对当前登录用户生效不需要管理员权限安全且隔离性好。适合个人临时测试或没有sudo权限的环境。系统级安装字体文件放置在/usr/share/fonts/或/usr/local/share/fonts/目录。这种方式对所有用户生效需要管理员权限。这是最彻底、最规范的解决方式尤其对于像WPS这样通常为所有用户安装的软件。对于这个“系统缺失字体”的问题我强烈推荐系统级安装。原因有三第一WPS提示的是“系统缺失”从逻辑上就应该在系统层面补齐第二如果你机器上有多个用户账户每个都装一遍太麻烦第三系统级安装更符合Linux的维护习惯便于后续管理和清理。因此接下来的操作我们将以系统级安装为主线。2.2 字体来源的可靠性与版权考量这些缺失的字体是微软的财产。虽然微软为Windows用户免费分发但其最终用户许可协议通常不允许随意再分发。因此直接从某些第三方网站下载所谓的“微软核心字体包”存在法律风险。一个合法且通行的做法是从官方或可信的渠道获取这些字体。一个经典的来源是ttf-mscorefonts-installer这个软件包。在Ubuntu的早期版本中它可以直接从官方仓库安装并引导用户接受EULA后自动下载安装这些核心字体。但在较新的Ubuntu版本包括20.04中由于证书等问题这个安装器可能无法正常工作。因此我们将采用更直接、可控的手动安装方式从一个合法拥有Windows系统或Office授权的中提取所需的字体文件。这是基于“你已从合法渠道获得这些字体文件”的假设进行操作确保了操作的合规性。3. 实操全流程从获取字体到完成配置假设你已经从一台合法的Windows 10/11电脑上提取了所需的字体文件通常位于C:\Windows\Fonts\目录下。你需要找到以下文件symbol.ttf,wingding.ttf,wingdng2.ttf,wingdng3.ttf,mt extra.ttf。请注意在Linux环境下字体名称是大小写不敏感的但为了规范我们通常使用小写文件名。3.1 步骤一准备字体文件与目标目录首先将准备好的字体文件例如symbol.ttf复制到Ubuntu系统中。你可以使用U盘、SCP命令或者任何你熟悉的文件传输方式。假设你把它们放在了用户家目录的Downloads文件夹里。打开终端我们将创建系统级的字体目录。虽然/usr/share/fonts/下已有一些子目录但为了管理清晰我们为其创建一个专属目录是一个好习惯。# 切换到管理员权限 sudo -i # 创建用于存放微软字体的专用目录 mkdir -p /usr/share/fonts/microsoft # 将下载的字体文件复制到该目录 cp /home/你的用户名/Downloads/symbol.ttf /usr/share/fonts/microsoft/ cp /home/你的用户名/Downloads/wingding.ttf /usr/share/fonts/microsoft/ cp /home你的用户名/Downloads/wingdng2.ttf /usr/share/fonts/microsoft/ cp /home/你的用户名/Downloads/wingdng3.ttf /usr/share/fonts/microsoft/ cp /home/你的用户名/Downloads/mt\ extra.ttf /usr/share/fonts/microsoft/ # 退出root身份 exit注意mt extra.ttf文件名中包含空格在命令行中需要用反斜杠转义mt\ extra.ttf或者用引号包裹mt extra.ttf否则会被当成两个参数。上面的命令使用了转义符。3.2 步骤二设置正确的文件权限字体文件不需要执行权限标准的644权限所有者可读写其他人只读即可。但目录需要755权限以便字体扫描程序能够访问。sudo chmod 644 /usr/share/fonts/microsoft/*.ttf sudo chmod 755 /usr/share/fonts/microsoft3.3 步骤三重建字体缓存这是最关键的一步。Linux系统不会实时监控字体目录的变化我们需要手动更新字体缓存让系统知道新字体的存在。# 更新整个系统的字体缓存 sudo fc-cache -fv命令解释fc-cache是 Font Config 工具的命令用于扫描字体目录并创建缓存。-f强制重建缓存即使时间戳看起来没问题。-v详细输出让你能看到它扫描了哪些目录、添加了哪些字体。看到类似“/usr/share/fonts/microsoft: caching, new fonts: 5”的输出就表示成功了。3.4 步骤四验证字体安装在重启WPS之前我们先确认系统是否真的识别了这些字体。方法一使用命令行查询# 查询字体列表中是否包含“Symbol” fc-list | grep -i symbol # 查询字体列表中是否包含“Wingdings” fc-list | grep -i wingdings如果安装成功你应该能看到包含字体路径和样式的输出行。方法二使用图形化工具查看在Ubuntu中你可以安装gnome-font-viewer或使用已有的字体管理软件。更简单的方法是打开一个支持选择字体的软件比如LibreOffice Writer在字体下拉列表中搜索“Symbol”或“Wingdings”如果能找到就证明安装成功了。完成以上步骤后完全关闭WPS Office确保所有进程退出可以用ps aux | grep wps查看并用kill命令结束然后重新启动。那个烦人的缺失字体提示框应该就此消失了。4. 疑难排查与进阶技巧即使按照步骤操作有时也会遇到问题。下面是我在多次部署中总结的常见坑点及解决方法。4.1 字体缓存更新了但WPS仍然提示缺失这是最常见的问题。可能的原因和解决方案如下WPS进程残留Linux下的WPS有时退出不彻底后台有残留进程。这些进程持有的仍是旧的字体环境。务必确保完全退出。# 查找所有WPS相关进程 ps aux | grep wps # 如果有使用kill命令终止它们例如 kill -9 进程ID然后再重新启动WPS。字体文件损坏或不匹配确保你复制的字体文件是完整的TrueType字体.ttf。可以尝试在Windows上用字体查看器打开确认。有时从网上下载的“字体包”可能被重新打包或损坏尽量使用原版系统提取的文件。字体目录权限问题再次检查/usr/share/fonts/microsoft/目录及其内部文件的权限。确保字体文件对其他用户是可读的chmod 644目录是可执行进入的chmod 755。多用户环境下的字体路径极少数情况下WPS可能以某种方式配置了独立的字体搜索路径。但标准情况下它依赖系统的Fontconfig。系统级安装对所有用户都是有效的。4.2 安装后字体在WPS中显示为中文名或乱码这是因为字体文件内部包含的多语言元信息name表导致的。Symbol字体在中文环境下可能被显示为“符号”Wingdings可能显示为“文鼎细钢笔行楷”这是一个经典的元数据错乱案例。这并不影响使用字体功能是正常的。如果你介意可以使用字体管理工具或修改字体元数据工具如fonttools库的ttx来调整但这属于高阶操作且可能违反EULA一般不建议普通用户进行。4.3 如何为其他软件或服务器环境安装这些字体如果你的Ubuntu是作为服务器运行上面有需要渲染文档的服务例如使用LibreOffice进行文档转换的Web服务同样需要这些字体。步骤完全一样将字体放入一个字体目录如/usr/share/fonts/microsoft/更新权限然后运行sudo fc-cache -fv。之后重启你的应用服务使其加载新的字体环境。4.4 更优雅的字体管理方案如果你需要管理大量字体或者经常添加/删除字体可以考虑使用更结构化的方式使用/usr/local/share/fonts/按照Linux的惯例/usr/local/用于存放本地安装的软件和文件与包管理器安装的内容在/usr/分开便于管理。你可以将字体安装在/usr/local/share/fonts/microsoft/。创建字体配置文件对于高级用户可以在/etc/fonts/conf.d/或用户目录的~/.config/fontconfig/conf.d/下创建XML配置文件来精细控制字体的别名、替换顺序和渲染参数。但对于解决WPS缺失字体这种简单需求手动安装已经足够。5. 效果验证与最终建议解决字体缺失问题后最大的提升在于文档兼容性。你可以尝试打开一个包含Wingdings符号的旧Word文档或者自己在WPS里插入符号选择“Wingdings”字体看看那些有趣的图形符号如电话、剪刀、笑脸是否都能正确显示。数学公式中使用的Symbol字体符号也应正常显示。最后分享一个我个人的维护习惯每次在Ubuntu上完成一套新的办公环境配置包括WPS、字体、输入法等后我会使用apt的mark功能将手动安装的字体包所依赖的一些基础库如fontconfig标记为“手动安装”并创建一个简单的安装脚本或笔记记录下所有步骤和字体文件的来源哈希。这样在未来重装系统或迁移到新机器时恢复一个完美的办公环境只需要几分钟。字体问题虽小却是Linux桌面办公体验中“最后一公里”的关键一环把它处理好能让你几乎忘记系统平台的差异专注于内容创作本身。

相关新闻

Oil Motion:让 AI 生成的动画“听从“你的滚动

Oil Motion:让 AI 生成的动画“听从“你的滚动

用自然语言告诉 AI 你想要什么动画,然后让页面滚动、鼠标移动、触摸手势来控制它——Oil Motion 把 AI 视频生成和网页交互之间的那层墙拆掉了。 这个项目解决什么问题? 2026 年 8 月,GitHub 上出现了一个叫 Oil Motion 的项目,一…

2026/10/8 23:37:21 阅读更多 →
Shell脚本字符串非空判断:原理、方法与实战避坑指南

Shell脚本字符串非空判断:原理、方法与实战避坑指南

1. 项目概述:为什么字符串非空判断是Shell脚本的基石在Shell脚本的世界里,处理字符串就像呼吸一样自然,但也是最容易“呛到”的地方。一个看似简单的“判断字符串是否为空”的操作,背后牵扯到变量展开、命令替换、条件测试的微妙差…

2026/10/9 12:25:02 阅读更多 →
Meta Muse Glimmer 30B开源大模型:Apache 2.0许可下的本地部署与实战指南

Meta Muse Glimmer 30B开源大模型:Apache 2.0许可下的本地部署与实战指南

最近在尝试将大语言模型集成到自己的应用或服务中时,很多开发者都面临一个两难选择:闭源商业模型(如GPT-4)虽然强大但成本高昂、可控性差;而开源模型要么能力不足,要么许可协议苛刻,限制了商业应…

2026/10/10 7:12:44 阅读更多 →

最新新闻

插件加载失败排查:从生命周期到激活机制,一篇搞定

插件加载失败排查:从生命周期到激活机制,一篇搞定

先说一句,我带过好几个插件化改造的项目,也修过无数跟插件相关的启动报错,所以看到 "failed to load plugins web boot: 2 entries did not activate" 这种日志时,第一反应不是翻框架文档,而是看插件的激活方…

2026/10/14 18:19:43 阅读更多 →
Linux下源码编译安装PostgreSQL 12.0实战指南

Linux下源码编译安装PostgreSQL 12.0实战指南

我们聊聊怎么在Linux环境下把PostgreSQL 12.0老老实实装好、配好。写这篇是因为我最近刚好在一台CentOS 7.9的机器上从源码编译部署了一套PG 12.0,整个过程踩了几个不大不小的坑,网上很多教程都只讲“敲命令”,不讲“为什么”,导致…

2026/10/14 18:19:43 阅读更多 →
插件加载失败?从 MusicFree 到 web boot 激活链路全拆解

插件加载失败?从 MusicFree 到 web boot 激活链路全拆解

最近在很多技术社区和问答平台看到同一个热搜词:plugins。具体一点说,是“musicfree plugins”和“failed to load plugins web boot: 2 entries did not activate”这类带着具体上下文的长尾热词。如果你也和几千个点进这些关键词的人一样,刚…

2026/10/14 18:19:43 阅读更多 →
Linux下PostgreSQL 12.0编译安装与配置实战

Linux下PostgreSQL 12.0编译安装与配置实战

开头PostgreSQL 12.0这个版本虽然已经不算最新,但我一直认为它是近年里“最值得部署的版本”之一——性能优化覆盖面广、分区表体验大幅改善、日志和监控机制也更成熟。到现在,我身边还有不少生产环境跑在12.x上,稳定得让人懒得升级。这篇博文…

2026/10/14 18:19:43 阅读更多 →
Python Selenium复用已打开Chrome实例的完整指南

Python Selenium复用已打开Chrome实例的完整指南

1. 项目概述:为什么“复用已打开的Chrome”比从零启动更值得深挖你有没有遇到过这种场景:写好了一段 Selenium 脚本,运行起来一切正常,但每次执行都得重新打开一个全新的 Chrome 窗口——登录态没了、Cookie 清空了、插件没加载、…

2026/10/14 18:19:43 阅读更多 →
Kiln AI Server 实战指南:REST API 服务与 MCP 工具服务器的安装、配置与二次集成

Kiln AI Server 实战指南:REST API 服务与 MCP 工具服务器的安装、配置与二次集成

人工智能AI 应用AI 评测RAG微调提示工程开发工具桌面应用 【免费下载链接】Kiln Build, Evaluate, and Optimize AI Systems. Includes evals, RAG, agents, fine-tuning, synthetic data generation, dataset management, MCP, and more. 项目地址: https://gitcod…

2026/10/14 18:18:42 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →