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 10DejaVu 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: 192192 是 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 完全够用,比手改配置文件快得多。
字体排查三板斧
- 看日志:
i3-dump-log -srm 100,搜Could not open font。命中说明你配的字体没被打开,实际渲染的是回退字体——改字号自然看不到效果 - 盘点系统字体:
fc-list :monospace看等宽字体,fc-list :lang=zh看中文。列表里没有的字体名写进配置也没用 - 绕过 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),仅供参考