☰
i3 字体设置教程:4 类症状,3 套配方一次修好
2026/11/5 1:52:00 网站建设 项目流程

i3 字体设置教程:4 类症状,3 套配方一次修好

【免费下载链接】i3A tiling window manager for X11项目地址: https://gitcode.com/gh_mirrors/i3/i3

i3 是 X11 下的平铺窗口管理器,你看到的窗口标题和状态栏文字都由它自己渲染。本文不讲概念铺垫,直接从症状出发:先定位你的 i3 字体设置属于哪类问题,再给原因、改法和验证方式,配 3 套可直接抄的字体配方,把发虚、乱码、偏小一次修好。

先定位问题:对号入座 4 类症状 🩺

改配置之前,先花 10 秒看你现在用的是什么字体:

grep font ~/.config/i3/config

看一眼结果:没有font行、或者写的是不带pango:前缀的长串(比如测试配置 testcases/i3-test.config 里的-misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1这种 X 核心字体格式),基本已经命中一半的病因了。然后按症状对号:

症状表现跳到
发虚字边缘像蒙了层毛玻璃,深色背景下更明显“治发虚”
中文乱码汉字、表情变成 □□ 方块“治方块”
高分屏偏小2K/4K 屏上 10pt 的字又细又小“治偏小”
风格不统一标题栏和状态栏字体大小/风格对不上“治不统一”

通用打底:先有一份能落地的最小配置

font是全局配置指令,在 include/config_directives.h 里注册为CFGFUN(font, const char *font),一处设置同时影响窗口标题和状态栏(除非 bar 块里单独覆盖)。语法见 官方用户指南 的 Fonts 一节:

font pango:<字体系列> [风格] <大小>

三个要点,每个都决定后面能不能修好:

  • pango:前缀走 Pango/FreeType 渲染,支持抗锯齿、完整 Unicode;没有前缀就是 X 核心位图字体,天生没有抗锯齿——这是“发虚”的根源
  • 大小默认按磅(pt),写成11px就按像素算
  • 改完执行i3-msg reload热加载即可,不用重启 i3

如果还没建过配置,把仓库自带的示例配置复制到~/.config/i3/config再改。最小可用版本就一行:

# ~/.config/i3/config font pango:DejaVu Sans Mono 10

DejaVu Sans Mono 是 Linux 发行版几乎必装的等宽字体,拿来保底最稳。

对症下药:4 类症状逐一处理

治发虚:先确认在用 pango 字体

原因:X 核心字体是固定尺寸的位图,放不到任何 DPI 都是锯齿;或者字体名写错,i3 打开失败后静默回退到了位图字体——源码里这个分支在 libi3/font.c,日志会打出Could not open font ... fallback to X font。

改法:全局换成pango:字体(如上)。如果已经是 pango 还发虚,问题在系统级渲染参数,用 fontconfig 微调:

<!-- ~/.config/fontconfig/fonts.conf --> <match target="font"> <edit name="antialias" mode="assign"><bool>true</bool></edit> <edit name="hinting" mode="assign"><bool>true</bool></edit> <edit name="hintstyle" mode="assign"><const>hintslight</const></edit> </match>

抗锯齿加轻度 hinting,是 LCD 上清晰度和美观度最平衡的组合。

验证:i3-msg reload后看标题栏边缘是否锐利;再查一下日志确认没有 fallback 报错(见文末“排查三板斧”)。

治方块:装中文字体并放进字体列表

原因:当前字体没有汉字字形,i3 又找不到兜底。

改法:

sudo apt install fonts-noto-cjk # 或 fonts-wqy-microhei,任意一款即可

然后让字体列表带上中文字体:

font pango:DejaVu Sans Mono, Noto Sans CJK SC 10

逗号分隔的是 Pango 字体回退链:拉丁字符优先用第一个,缺的字形自动落到 Noto 上,不需要手动分工。

验证:先fc-list :lang=zh确认系统里真的有中文字体(列表为空说明安装没成功),改完配置看终端标题栏里的汉字是否还显示方块。

治偏小:设 Xft.dpi,别只加字号

原因:i3 启动时从 X 资源里读 DPI 并传给 Pango 渲染,见 libi3/dpi.c;没设置就是默认 96。4K 屏上 96 DPI 意味着字号按物理尺寸算非常小,单纯把字号从 10 加到 14 会让标题栏变得很挤。

改法:

# ~/.Xresources Xft.dpi: 192

192 是 200% 缩放;150% 就写 144。注意 DPI 只在 i3 启动时读一次,i3-msg reload不管用,需要重启 i3(比如i3-msg restart)才生效。

验证:重启后标题文字整体变大一圈,且和终端等应用内的文字比例协调——这正是它比手动加大字号强的地方。

治不统一:状态栏单独给一份 i3 状态栏字体

原因:bar {}块里没有font行时,状态栏继承全局字体;想让标题栏和状态栏字号、字重不同,就必须在块内单独声明。bar 块里的font字段在 i3bar 的配置结构 中独立存储,覆盖全局值。

改法:

bar { font pango:DejaVu Sans Mono 9 }

一句话:状态栏字号小一号,同样高度能塞下更多信息,风格也分层。

验证:i3-msg reload后对比两处文字。另外提醒一句:font不是命令而是配置指令,没法用for_window按窗口改字体——窗口内部的文字归应用自己管,i3 只负责它渲染的标题和状态栏。

抄作业:3 套按场景的字体配方 📋

配方 1:纯英文环境

font pango:DejaVu Sans Mono 10

零额外依赖,装完即用。

配方 2:中英混排

font pango:DejaVu Sans Mono, Noto Sans CJK SC 10 bar { font pango:DejaVu Sans Mono, Noto Sans CJK SC 9 }

同一套回退链配在两级,状态栏小一号。前提是系统已装fonts-noto-cjk。

配方 3:高对比状态栏

bar { font pango:DejaVu Sans Mono Bold 9 }

用 Bold 字重提升状态栏辨识度,标题栏保持常规体,两者拉开层次。

进阶玩法:一键换字号 + 排查三板斧

用快捷键动态改字号

bindsym $mod+Ctrl+equal exec "sed -i 's/^font pango:.*/font pango:DejaVu Sans Mono 12/' ~/.config/i3/config && i3-msg reload"

一个键把配置里的 font 行整体替换成 12 号并热加载,想改回 10 就再绑一个minus键。sed 写法比较粗暴,但对单行 font 完全够用,比手改配置文件快得多。

字体排查三板斧

  1. 看日志:i3-dump-log -srm 100,搜Could not open font。命中说明你配的字体没被打开,实际渲染的是回退字体——改字号自然看不到效果
  2. 盘点系统字体:fc-list :monospace看等宽字体,fc-list :lang=zh看中文。列表里没有的字体名写进配置也没用
  3. 绕过 i3 试渲染:pango-view --font="DejaVu Sans Mono 10" -t "i3 字体设置测试"。这个结果发虚,问题就在系统 fontconfig 而不是 i3 配置;结果清晰,问题在 i3 这一侧

下一步

  • 配置指令的完整语法以 官方用户指南 为准,Fonts 和 HiDPI 两节值得通读
  • 记住边界:i3 字体设置只管 i3 自己渲染的文字,终端、浏览器里的文字各自在应用内设置
  • 调出一套顺眼的组合后,欢迎在评论区贴出你的font行,互相抄作业

【免费下载链接】i3A tiling window manager for X11项目地址: https://gitcode.com/gh_mirrors/i3/i3

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询