资讯详情

Arch Linux 下 dwm 平铺窗口管理器安装与自定义配置实践

📅 2026/10/19 17:37:10 | 华诺云谱 👁 阅读
Arch Linux 下 dwm 平铺窗口管理器安装与自定义配置实践
当年我刚从满是动画特效的桌面环境切到 Linux 时最受不了的就是切换工作区要挪鼠标、开终端要挪鼠标、关个窗口还要找右上角那个叉。后来在某天下午把dwm编译进系统并成功登录的那一刻才知道原来用纯键盘管理窗口可以这么干净利落。这篇就围绕“Arch Linux 下安装 dwm平铺式窗口管理器”这件事把从依赖准备、源码编译、首次启动到自定义配置的整个流程串起来还会把我踩过的坑和后来一直在用的排查习惯一并写出来给想入坑的人少走几步弯路。dwm 的全称是 dynamic window manager来自一个坚持极简主义的开源社区整个窗口管理器代码体量非常小核心逻辑就集中在几个 C 文件里。它和你常见的 GNOME、KDE 这类完整桌面不是一个物种它只负责“管理窗口”不做动画、不做通知中心、不帮你管文件。它把屏幕按照你的设定自动切分成若干区域新窗口一出现就会自己填进主区域或者堆叠区域不需要你手动拉尺寸。正因为它什么都砍到最简所以你几乎感受不到它的存在所有注意力都留给正在打开的那些应用。这个项目特别适合喜欢键盘操作、愿意花一个下午读源码改配置、又想彻底摆脱桌面环境拖沓感的用户。接下来就进入正题。1. 为什么选 dwm先把思路理清楚1.1 dwm 到底是一个什么样的窗口管理器很多刚接触 Linux 弹窗管理的人会把 dwm 和“平铺式窗口管理器”画等号严格说这没错但它的“动态”二字才是精髓。i3 那种属于手动平铺每个窗口放哪个位置、切成什么布局都是你自己做决定dwm 则是让窗口像自动排版一样填进预设的布局。它默认自带了几种布局平铺tile、无边框单窗口monocle、浮动float。启动之后所有普通窗口默认进入平铺布局主区域显示当前焦点窗口其他窗口堆在剩余空间里主区域大小可以通过快捷键实时调整。你不需要拖拽、不需要对齐窗口永远整齐地待在屏幕上这种体验对强迫症极其友好。它另外一个核心概念是标签tag。dwm 里没有传统意义上的“工作区 1、工作区 2”而是给每个虚拟桌面定义一个标签默认是 1 到 9。每个窗口可以被打上任意一个标签你可以随时把一个窗口从一个标签挪到另一个标签同一个标签里也可以同时容纳多个窗口。你用MOD 数字键切换标签窗口就跟着整个屏幕显示内容一起变化。这个概念比起“工作区”更像是一个窗口分类系统用熟了之后你会觉得很自然。dwm 本质上是源码级配置的窗口管理器。它没有像~/.config/i3/config那种现成的配置文件所有设置都写在一份config.h文件里改完必须重新编译。这听上去劝退但实际体验下来反而是优点一份 C 结构体的配置比任何 INI 语法都直接改坏了顶多重编译一次不会出现“配置文件加载错了但系统不告诉你哪里错”的玄学问题。1.2 和 i3、bspwm 等常见方案比差异在哪每次聊到平铺窗口管理器基本绕不开 i3、bspwm、herbstluftwm 这几个名字。i3 是手动平铺的老牌选择开箱即用配置文件语法相当友好社区资料多到你根本看不完。但它的问题也出在“手动”上每开一个新窗口你都得想它应该放到哪块屏幕、哪个工作区桌面稍微乱一点操作成本就上来了。dwm 的思路相反它直接给你一套自动规则大部分时间你不需要操心布局只管切换标签和启动程序。bspwm 则是把“窗口管理”和“消息控制”拆开通过bspc命令行工具发指令来控制窗口行为脚本化能力强适合喜欢到处写脚本的人。但这也意味着它的学习曲线更陡你需要先理解它的节点树模型。相比之下 dwm 的状态其实更接近传统快捷键直接编在源码里不需要额外守护进程和中间通信层改了配置重新编译行为立刻变化这种“所见即所得”的确定感是它一直没有被替代的重要原因。如果你去查内存占用dwm 通常只有十几 MB 甚至更低启停几乎是瞬时的。这倒不是说其他管理器有多臃肿而是 dwm 砍掉了所有额外组件连工作区切换动画都没有。对老电脑、树莓派这类设备dwm 一个轻量终端的组合能让你完全忘记“性能瓶颈”这四个字。1.3 什么样的使用者更适合先从 dwm 入门如果你已经受够了桌面环境的种种不顺眼又不想被 i3 那种“事事手动”的操作绑住双手那 dwm 是非常顺滑的中间选项。但我不建议完全没碰过 Linux 命令行的新手直接跳进 dwm毕竟你要亲手编译、管理源码、打补丁光是有依赖报错就能劝退一波人。至少你应该已经知道pacman怎么装软件、vi或nano能改文件、make是干什么的再有“出问题就翻日志”的习惯基本就能上路了。还有一类人更适合 dwm重度键盘用户。你在 IDE、终端、浏览器里已经习惯了全键盘操作那么把窗口管理也收进键盘整个工作流会非常连贯。屏幕越大、窗口越多这种效率优势越明显。我见过很多同事在两块显示器上开十几个窗口鼠标来回甩得手腕都快冒烟了换到 dwm 之后反而觉得桌面安静了许多。2. 安装前的准备依赖和构建环境2.1 先把 Arch 基础环境过一遍Arch Linux 本身就是滚动的发行版包版本通常都挺新编译工具链也比较接近上游所以从源码安装 dwm 在 Arch 上是很自然的一件事。动手之前建议先同步系统并安装基础编译工具避免装到一半发现某个头文件缺失。sudo pacman -Syu sudo pacman -S --needed base-develbase-devel这个组里包含gcc、make、patch、pkg-config等编译必需的东西。很多人在 Arch 上第一次编译失败并不是因为代码有问题而是根本没装这套基础环境。顺带说一句如果你平时用yay这类 AUR 工具装过软件它们底层其实也依赖这几个包。接下来是图形环境。dwm 自己不做显示服务底层需要 Xorgsudo pacman -S xorg-server xorg-xinitxorg-server是 X 服务本身xorg-xinit提供startx命令。如果你原来已经装了某个桌面环境这套东西大概率已经有了。Arch 下用 dwm 最常见的方式就是startx启动所以xorg-xinit一定要装。用 Wayland 的版本 dwl 虽然也有但它和 dwm 是不同的代码库不在本文范围。2.2 安装编译依赖dwm 对 Xlib 的依赖是硬性的源码里会有大量X11/...头文件。Arch 下对应的是libx11sudo pacman -S libx11如果你在编译时遇到fatal error: X11/Xlib.h: No such file or directory基本就是没装这个包。此外dwm 使用 Xft 渲染字体所以libxft也是必要的如果要用图形化的字体选择机制最好再装libxinerama否则多屏幕环境下部分功能可能会受限sudo pacman -S libxft libxinerama这里多说两句libxinerama管的是多显示器信息dwm 默认支持多个物理监视器没有这个库的话虽然也能编过但跨屏幕操作会出现一些怪问题。官方维护者已经把Xinerama支持作为默认编译选项写进了config.mk你直接装上这个库就最省心。字体方面dwm 默认状态栏和窗口标题都要找字体渲染如果没有中文字体中文会显示成方框。建议至少装上sudo pacman -S noto-fonts noto-fonts-cjk ttf-jetbrains-mononoto-fonts-cjk管中文JetBrains Mono主要是为了终端和状态栏里代码看起来舒服。字体可以后面慢慢调但这一步不装后面十有八九要回头补。2.3 拉取 dwm 源码先看懂目录结构从 pacman 直接装一个dwm包当然也能跑但那个包是官方默认配置改任何键位和布局都要走一遍源码流程所以自己的配置还是得从源码编译。把 dwm 源码克隆到一个专门的目录比如~/buildmkdir -p ~/build cd ~/build git clone https://git.suckless.org/dwm cd dwm如果你所在网络访问这个仓库慢也可以从一些镜像仓库或者社区维护的 git 镜像拉同样源码关键是保持代码尽可能接近上游。拉下来后你会看到这几种文件config.def.h默认配置文件模板每次make时会自动复制成config.h。config.h你真正要改的文件它决定了键位、颜色、字体、标签数量等所有行为。dwm.c核心窗口管理逻辑全部代码基本都在这一个文件里。config.mk编译选项包括安装路径、依赖的库。Makefile编译和安装入口。有些人第一次看到dwm.c里几千行 C 代码会有点慌其实日常使用你完全可以不碰它所有需要动手的地方几乎都集中在config.h。真正理解dwm.c的人通常是那些要写补丁或者维护发行版打包的人你如果只是想“每天舒服地用键盘控制窗口”把config.h吃透就够了。2.4 配套组件终端、菜单与锁屏dwm 只是窗口管理器不是软件全家桶默认的MOD Shift Enter快捷键要调用一个终端默认调的是st。st也是同一个社区出品的极简终端模拟器安装方式一样是从源码编译cd ~/build git clone https://git.suckless.org/st cd st sudo make clean install如果你觉得st功能不够用也可以把快捷键改成调用 Alacritty、Kitty、Konsole 等终端后面在config.h里改.term那个数组就行。不过我个人推荐至少用一段时间的st它的字体渲染和动态透明度配合补丁之后非常顺手而且和 dwm 的极简气质很搭。菜单方面dwm 默认MOD P会调用dmenu这是一个非常轻量的启动器。同样自己编译一份cd ~/build git clone https://git.suckless.org/dmenu cd dmenu sudo make clean install锁屏可以装slock它也是同一社区的产物和 dwm 集成度高默认MOD Shift X触发。还有壁纸设置工具feh或nitrogen透明度合成器picom这些虽然不是必需但装好之后体验更完整。3. 编译安装与首次启动3.1 一次 make clean install 全流程进入 dwm 源码目录后第一次编译最省心的命令是make clean install我建议你每次改动 config.h 后都执行这条命令而不是只执行make。make只负责生成可执行文件make install才会把它安装到系统路径并覆盖旧版本。连着写make clean install能保证旧的编译产物不会干扰新配置尤其是当你在源码目录里增删过文件或者打过补丁之后不清干净会留下各种奇奇怪怪的运行问题。默认安装路径在config.mk里通常是/usr/local/bin。如果提示权限不足就用sudo make clean install执行完之后你可以用which dwm验证一下应该能定位到/usr/local/bin/dwm。这里有个小细节如果你通过 pacman 装过官方 dwm 包它安装到/usr/bin/dwm而源码编译默认装到/usr/local/bin/dwm两个同名程序同时存在但平时只会运行其中一个。为了避免以后排查问题时产生“我明明改了配置怎么没生效”的错觉建议把 pacman 那个版本卸掉只保留源码编译的这个。3.2 启动方式startx 和登录管理器装好 dwm 之后要让它能开机进入。如果你习惯用startx启动整个 X 会话那需要准备~/.xinitrcecho exec dwm ~/.xinitrc然后运行startx就能进入 dwm。有个重要细节.xinitrc里那一行必须是exec dwmexec关键字不能省。如果你直接写dwm或者dwm X 会话可能会在 dwm 退出后立刻终止后续你想干点什么日志都找不到。使用exec时dwm 是 X 进程的子进程你退出 dwm 时整个会话一起结束行为非常干净。如果你更习惯用 GDM、SDDM 这类登录管理器就需要给 dwm 做一个桌面入口文件。在/usr/share/xsessions/下新建一个dwm.desktop内容大概如下[Desktop Entry] Namedwm CommentDynamic window manager Exec/usr/local/bin/dwm TypeApplication然后重启登录管理器在会话菜单里选 dwm 登录。Exec的路径要和你安装到的实际路径一致如果安装到了/usr/bin就写/usr/bin/dwm。这种方式的好处是登录管理器会帮你处理 D-Bus 和 PolicyKit 环境省得你手动在.xinitrc里补一堆初始化命令。不过 Arch 的极简玩家通常更倾向于startx毕竟多装一个登录管理器本身就和 dwm 的理念有点冲突。3.3 进去以后第一件事认熟默认快捷键第一次进入 dwm 的界面会非常朴素顶部一条状态栏主区域可能有一个终端其他什么都没有。千万不要觉得它坏了先按下默认快捷键体验一下。dwm 的默认 MOD 键是Alt下面是几个最关键的操作快捷键功能MOD Shift Enter启动终端默认 stMOD P打开 dmenu 启动器MOD J / K切换焦点窗口MOD Enter将当前窗口设为主区域窗口MOD 数字键切换到对应标签MOD Shift 数字键将当前窗口移动到对应标签并切换过去MOD B显示/隐藏状态栏MOD Shift C关闭当前窗口MOD Shift Q退出 dwm如果你刚进去用一个终端都打不开先检查是不是没装st或者config.h里.term指定的终端确实不存在。很多人以为 dwm 坏了其实只是终端路径不对。用MOD Shift Enter打开终端后再用MOD J/K切换焦点用MOD Shift C关掉窗口这几个操作熟练之后基本就能脱离鼠标了。3.4 第一次配置的边界别急着打补丁第一次进入 dwm 后我强烈建议你先在默认配置下用一两天把所有默认快捷键摸一遍体会一下“什么都不配”的状态到底是什么感受。很多人一上来就急着打补丁、改状态栏、配透明度结果界面复杂得和桌面环境差不多反而忘了 dwm 的核心价值就是简单。我踩过最大的坑就是在一个下午内连续打了好几个补丁导致源码目录变成一团乱麻最后只能删掉重来。后来学乖了每次只打一个补丁启动确认没问题再打下一个每一步都单独提交进 git。这样出了问题你知道是自己刚才改的东西回退也容易。默认的 dwm 其实已经够日常用了补丁只是锦上添花。4. 关键配置解析把 dwm 改成你的样子4.1 config.h 的结构和常用配置项dwm 的所有个人偏好都写在config.h里第一次打开它你会看到一堆结构体数组。别被吓住常用的其实就几个。第一个是修饰键MODKEY#define MODKEY Mod1MaskMod1Mask就是 Alt 键很多人在实际使用一段时间后会改成Mod4Mask也就是 Super 键Windows 键。原因很简单Alt 在终端和编辑器里频繁被用作功能键和窗口管理快捷键容易冲突。改成 Super 之后窗口操作键和程序内部快捷键就能彻底分开。这个改动在config.h顶部一行就完成了但我还是劝你用 Alt 先体验几天确认自己真的需要改再改。第二个重点是字体数组static const char *fonts[] { JetBrains Mono:size11, Noto Sans CJK SC:size12 };dwm 会按顺序尝试匹配字体第一行是普通英文字体第二行是中文字体。状态栏如果出现方块基本就是中文字体缺失或者书写格式不对。Arch 下可以用fc-list :langzh查看已安装的中文字体名称把字体家族名完整写进来。size单位是点point对 HiDPI 屏可以自行调大。第三块是颜色配置static const char col_gray1[] #222222; static const char col_gray2[] #444444; static const char col_gray3[] #bbbbbb; static const char col_gray4[] #eeeeee; static const char col_cyan[] #005577; static const char *colors[][3] { /* fg bg border */ [SchemeNorm] { col_gray3, col_gray1, col_gray2 }, [SchemeSel] { col_gray4, col_cyan, col_cyan }, };SchemeNorm是普通窗口的状态SchemeSel是焦点窗口的状态。三个值分别是前景色、背景色、边框色。改颜色之前想清楚漂亮的配色方案往往不是重点重点是当前聚焦窗口要一眼就能分辨出来。我习惯把焦点窗口的边框设成亮色这样在多个窗口之间切换时眼睛不用在屏幕上找半天。还有一个常用的参数static const unsigned int borderpx 1; /* 窗口边框宽度 */ static const float mfact 0.55; /* 主区域占比 */borderpx值越大窗口分界越明显。mfact代表主区域占屏幕的比例默认 0.55 表示左侧主区域占 55% 宽度。通过快捷键MOD H和MOD L可以动态调整这个比例所以它更多是初始值不必改得太极端。标签名称和数量也在config.h里比如static const char *tags[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };你可以把1改成dev、web、chat之类更直观的名字状态栏上显示的就是这些文字。但这种命名只影响显示不影响行为改不改全看个人习惯。4.2 状态栏脚本从“默认”到“好用”dwm 顶部那条状态栏其实是通过 X11 的 root window 名称来显示的。你在终端里运行xsetroot -name hello状态栏立刻会变成 hello 两个字。dwm 社区标准的做法是写一个while死循环脚本每秒更新一次状态栏内容然后在.xinitrc里启动 dwm 之前把脚本放到后台。下面是我一直在用的一个简化版脚本保存为~/scripts/dwm_status.sh#!/bin/bash while true; do datetime$(date %Y-%m-%d %H:%M) battery$(cat /sys/class/power_supply/BAT0/capacity 2/dev/null || echo ) volume$(pamixer --get-volume 2/dev/null || echo ) memory$(free -h | awk /^Mem:/ {print $3 / $2}) xsetroot -name VOL ${volume} | MEM ${memory} | BAT ${battery} | ${datetime} sleep 1 done然后给脚本加上执行权限chmod x ~/scripts/dwm_status.sh在~/.xinitrc里这样写~/scripts/dwm_status.sh exec dwm注意那条不能丢否则脚本会把exec dwm之后的会话进程一直阻塞。状态栏只在 root window 名称变化时更新所以脚本里必须放一个sleep否则 CPU 会被循环吃满。用电池、音量、内存这些动态数据时尤其要注意命令本身是否存在于系统里比如pamixer没装的话脚本每次都会输出一行错误虽然不影响窗口管理但日志里会刷得很难受。如果你不想自己维护脚本也可以用dwmblocks这类第三方状态栏组件它把每个状态段拆成独立模块更新更高效。但自己写脚本的好处是完全可控想显示什么就显示什么依赖也最少。我从一开始就在用纯xsetroot方案至今没有换过。4.3 打补丁的正确姿势dwm 的魅力很大一部分来自社区补丁它能在不咨询上游维护者的情况下把各种小功能加进源码。去 dwm 官方的补丁页面能看到几百个 patch常用的有vanitygaps给窗口之间加固定空隙、pertag让每个标签独立记忆布局、swallow让终端启动 GUI 应用时自动被吞掉、actualfullscreen支持真正的全屏、hide vacant tags隐藏空标签。安装补丁的方法本质上就是往源码里打 diffcd ~/build/dwm git apply /path/to/vanitygaps.diff如果你的源码目录不是 git 仓库也可以用传统的patch命令patch -p1 /path/to/vanitygaps.diff打完补丁后重新编译安装。如果git apply报错说补丁不匹配通常是因为你的源码版本和补丁目标版本不一致或者之前已经改过config.h导致上下文偏移。这时候先别硬来用git checkout -- config.h config.def.h恢复默认文件再重新打补丁。也就是说打补丁之前一定要备份你自己的 config.h或者先把源码目录纳入 git 管理。我见过不少人在改了一半的 config.h 上打补丁结果冲突信息看得头皮发麻最后不得不全部重来。补丁打失败时的阅读规则也很简单报错信息里会指出它期望在文件的第几行附近找到什么内容而你当前文件里那里是什么内容。大多是行号偏差几行手动改一下就行。如果偏差很大说明你之前的定制和这个补丁改到了同一块逻辑这时候需要认真读 diff 而不是硬套。4.4 更多扩展壁纸、合成器、输入法dwm 本身不会给你设置壁纸也没有任何特效。壁纸通常用一个独立工具设置常见的是fehsudo pacman -S feh feh --bg-fill /path/to/wallpaper.jpg如果想让窗口有阴影、圆角、透明效果可以装picom。注意 dwm 没有任何内置合成支持所以要么接受朴素的 “无特效” 状态要么就得让picom常驻后台。我还见过有人把picom跑起来之后发现窗口撕裂消失、帧率变稳了这属于额外收获不是必需项。中文输入法在 dwm 下也值得提前处理好。如果你用fcitx5通常需要在环境变量里指定export GTK_IM_MODULEfcitx export QT_IM_MODULEfcitx export XMODIFIERSimfcitx这些可以写进~/.xinitrc在exec dwm之前。dwm 不会主动帮你启动输入法所以你也得把fcitx5 -d 加进去。相比桌面环境dwm 里输入法的问题更多是“托盘图标不显示”或者“候选框不跟随”前者一般靠fcitx5自己的托盘插件解决后者可能和窗口类型或者合成器有关。遇到再说但不要指望 dwm 帮你处理这些它压根不管。5. 常见问题与排查实录5.1 编译期间的问题第一次编译 dwm 几乎不会一帆风顺最常见的错误基本集中在缺依赖上。下面这张表是按照我实际见过的高频问题整理的错误信息常见原因处理方法X11/Xlib.h: No such file or directory缺少 libx11sudo pacman -S libx11X11/extensions/Xinerama.h: No such file or directory缺少 libxineramasudo pacman -S libxineramaXft/Xft.h: No such file or directory缺少 libxftsudo pacman -S libxftmake: gcc: Command not found缺少 base-develsudo pacman -S --needed base-develNo rule to make target install源码目录不完整可能是 clone 不完整重新 git clone 或检查网络还有一类编译错误是补丁引起的例如error: conflicting types for xxx这基本可以断定是你打的补丁和现有代码逻辑冲突。解决办法就是回到打补丁前的状态换一个兼容版本的补丁。如果你每次都用make clean install而不是直接make这类问题减少一半。5.2 启动与显示的问题启动 dwm 时最常见的现象是startx之后黑屏一闪而过然后又回到终端。这种情况九成是~/.xinitrc里exec dwm这行执行失败或者 dwm 根本没有被找到。先做三个检查第一which dwm是否能定位到程序第二在.xinitrc里那一行前面临时加一句exec /usr/local/bin/dwm用绝对路径排除 PATH 问题第三查看~/.xlocal或~/.xsession-errors日志Arch 启动 startx 时很多输出会记录在这里。实测下来绝大多数人都是因为 PATH 里不包含/usr/local/bin导致exec dwm找不到程序而静默退出。另一种黑屏是xorg-xinit没装或者 X 服务本身就起不来。可以先用startx之前单独跑xclock之类的 X 程序测试如果连 X 基础环境都起不来问题不在 dwm 而在 X 配置。多显示器用户特别容易遇到“dwm 起来了但副屏不亮”或者“窗口只能在主屏显示”的问题。这部分通常需要你先把xrandr的输出理清楚确认两个显示器在 X 层面已经正确识别再谈下一步。dwm 默认对每个物理显示屏的模式是自动识别但标签是全局共享的切换标签时所有屏幕跟着一起变化如果你希望每个屏幕独立记忆标签需要去打pertag相关补丁或者调整工作习惯。5.3 状态栏和输入法的问题状态栏不更新或者干脆不显示先看是不是xsetroot没装。Arch 下这个命令属于xorg-xsetroot包默认可能没有安装sudo pacman -S xorg-xsetroot另外注意状态栏脚本里的命令如果频繁报错xsetroot -name会被错误输出淹没看起来就像状态栏“卡住”了。我建议脚本第一版只显示时间和日期跑通之后再逐段加上音量、电池这些动态模块这样哪一段出问题一目了然。至于状态栏字体发虚、中文变方块基本就是config.h里字体配置的问题fc-list查到的字体家族名必须和fonts[]里的字符串完全一致。输入法在 dwm 里最常见的诡异现象是终端里能输入中文但浏览器、Electron 应用里死活切不进去。这类问题往往和环境变量有关但不同应用读取的环境变量并不一致。Electron 类应用尤其喜欢忽略GTK_IM_MODULE所以你还得额外设置GLFW_IM_MODULE这类变量具体看应用自己的支持。dwm 本身没有输入法相关的代码所以别指望它给你兜底。我自己的经验是把环境变量都写进.xinitrc后重启一次会话能解决大部分问题如果还不行多半是某个库没装全从应用启动日志里去翻。5.4 我的排查习惯日常维护 dwm我不太会在问题发生时临时去config.h里猜而是按一套固定顺序走。先看系统日志和会话日志把错误信息按时间排列锁定是 X 层的问题、编译产物的问题还是我配置逻辑的问题。启动类问题去~/.xsession-errors和journalctl -xe里找运行时卡顿或者快捷键无效先确认当前焦点是不是在一个无法接收快捷键的应用窗口上以及有没有别的后台程序把按键吃掉。只要问题能定位到一个确定的命令或代码点解决思路就清晰了。我不建议每次改完配置都重启进 dwm 看效果那样太浪费时间。现代 X 环境下 dwm 重启并不需要退出整个会话打开一个终端用pkill dwm杀掉当前进程然后从同一个终端重新启动dwm 即可快速重载配置。不过这个方法有个前提你杀掉 dwm 的瞬间X 会短暂失去窗口管理器某些窗口可能闪一下或者短暂变成未装饰状态一般不会丢数据但如果你开着修改中的文件还是先保存更稳妥。最后分享一点个人体会从最初下载源码看到一堆 C 结构体感到茫然到现在每次重装系统都能在十几分钟内恢复完整工作环境dwm 带给我的并不只是“窗口自动排好”的便利更多的是一种确信窗口管理器不是黑盒是几行自己能看懂的代码。现在我的~/build/dwm目录本身就放在 git 仓库里配合一个 dotfiles 仓库新机器只要克隆下来、装上依赖、make clean install再铺好壁纸熟悉的桌面立刻回来。这个工作流让我逐渐喜欢上“把配置当成项目来维护”的感觉。如果你也准备在 Arch 上迈出这步建议先用默认配置坚持一周再按需定制键位和状态栏最后再打补丁你会少走很多弯路。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑