【好工具】嫌弃Linux普通桌面效率低?那就来试试dwm!

各位有三言选的读者朋友大家好,今天我将要给各位介绍下 Suckless 社区的一个生产力神器:dwm,这是一群追求极简主义的程序员及他们为我们带来的极具生产力的产品。

作者 & 编辑 | 单胖 scj & Leong

1.Suckless 是怎样的一群程序员?

Suckless 是一个国外的程序员社区,其代表作品有 dwm,st 和 dmenu 等等高效极简的程序。读者朋友们可以去他们的官网了解一波:suckless.org

进入 suckless 的官网之后,扑面而来的就是一股浓浓的极简主义的气息。从他们的自我介绍中也能读出来他们对于极简且清晰的程序的追求:

Home of dwm, dmenu and other quality software with a focus on simplicity, clarity, and frugality.

大致翻译一手,就是说他们是一群专注于简单,清晰且不崇尚写冗长程序的程序员。

从他们的用词之中更能感受到他们浓浓的极简风,下面笔者将会介绍一款平时笔者一直在使用的窗口管理器 ——dwm,让大家能够更深切地感受到 Suckless 的程序员们所开发的虽然极简但却生产力爆棚的产品。

2.dwm 凭什么让我真香?

(1)  什么是 dwm 及 dwm 的安装

相信绝大多数的 Linux 的用户对下图都不会陌生:

上图为 Ubuntu18.04 的桌面环境,这种桌面环境被称之为 Gnome 桌面。这种桌面环境的操作逻辑与 Windows 或者 MacOS 相近,比较符合大众用户的操作习惯。

Gnome 桌面有很多优点,比如对新手友好,界面操作简单易懂,也比较适合让从 Windows 转来 Linux 的用户快速上手,但 Linux 本身作为一个生产力工具,Gnome 桌面这种还需要去够鼠标点来点去的操作逻辑似乎仍然有些效率低效。

而今天笔者要介绍的 dwm,即 Dynamic Window Manager,则完全颠覆了 Gnome 的操作逻辑。这是一款在 Linux 下使用的动态窗口管理器。所谓平铺式窗口管理器,就是咱们在窗口下打开的所有界面,将会被以一种平铺于屏幕上的方式自动进行布局。在 dwm 下工作,笔者相信会给 Vimmer 一种 Vim 成精变成操作系统的感觉,你的各种常用的操作,比如打开、关闭、切换窗口都将不需要够鼠标和方向键,相信能够带给各位极致的体验。

下图为笔者的 dwm 桌面:

可以看到除了最上方的那一条状态栏和壁纸之外,整个界面没有别的任何元素,非常干净整洁。

打开一个终端后:

大家可以看到这个终端将会布满整个屏幕,这就是我的工作区。

再打开一个终端后:

大家可以看到,这两个终端将会平铺在桌面之上,两个终端的大小一模一样,平分了整个屏幕。那我们再打开个浏览器看看:

大家可以看到,我新打开的浏览器占了左半边屏幕,而两个终端被挤到了右边占了右半边屏幕。为什么不跟打开两个窗口的情况一样,这三个界面平分整个屏幕呢?这就是 dwm 的不同的布局逻辑使然,具体介绍会在文章的后半部分。

如上图所示,笔者打开了浏览器和两个终端,它们以平铺在平面上的方式展现在屏幕上,并且其摆放的布局也是系统自动帮我们摆放好的,笔者所做的不过只是打开了这三个界面而已。

可能有的朋友觉得这也没啥用嘛,在 Gnome 下自己手动缩放下每个窗口的大小,不也是可以让所有页面都平铺在屏幕上嘛?莫急,请先听我举个例子。我相信各位读者朋友在敲代码的时候曾有过这种经历:你现在正在学习一个某个语言(比如 Python),你现在想要打开编辑器照着例程自己手敲一遍加深印象。那么此时平铺式窗口管理器将会非常方便:

如上图所示,我只需要敲一下浏览器和我的编辑器 (NeoVim) 的快捷键,这两个窗口就会自动打开并且以这样一种平铺式的布局风格帮我自动排版。

dwm 的高效可不仅仅体现在清晰的排版上,快速退出某个窗口、在各个窗口和虚拟桌面之间来回切换等等操作都有自己的快捷键,跟 Vim 一样,dwm 存在的另一个意义就是省去了你点鼠标的时间。

笔者之前也是因为一次偶然了解,从 Gnome 这个 Linux 下非常常用的桌面环境,跳坑到了平铺式窗口管理器。当时笔者用的是 i3wm,后来也是经朋友介绍,去 suckless 的官网了解了一下 dwm,下图为 suckless 官网上的 dwm 的截图

笔者在当时使用的窗口管理器还并非 dwm,而是 i3wm。i3wm 和 dwm 的使用逻辑大体上都是相似的,并且 i3wm 的快捷键和美化也是笔者花了很长一段时间来磨合的,似乎没有什么理由能够让笔者从 i3wm 转到 dwm。但经过笔者的了解,发现 dwm 的源代码居然是只用了 3000 行不到的 C 来完成的,并且可以通过很简单的打补丁的方式来美化 dwm 并且增加它的功能。这瞬间勾起了笔者的兴趣,果断下载下来准备研究一番。下图为 dwm 的各种源代码和配置文件。

图中的 config.def.h 就是 dwm 的默认配置文件了 (此处的 def 为 default 之意)。由于 Suckless 的极简风,dwm 的配置文件就是其源代码的头文件,如果我们想要自定义我们自己的 dwm,只需要在 config.def.h 之内修改各种配置再编译,就可以正常使用。

具体的安装和启动 dwm 的过程其实也很简单,至少是比 Caffe 的编译来的方便些:

git clone https://git.suckless.org/dwm

cd dwm

make

sudo make clean install

接下来需要做的,就是让我们能够通过 startx 启动 dwm。在这之前,需要在~目录下的.xinitrc 中添加这么一行字:

exec dwm

假如之前你并没有安装任何图形界面,直接添加即可。如果之前你曾经安装过图形界面,那还需要把别的图形界面的 exec 指令注释掉才能够正常启动 dwm。随后只需要在终端内写入 startx 命令即可:

startx

假如你使用了登录管理器,而每次开机时发现登录管理器内没有 dwm 的入口,那就需要再写个 Desktop Entry,可以参考 Manjaro 社区的这篇文章,Arch 通用:

https://forum.manjaro.org/t/dwm-not-showing-in-lightdm-log-in-screen/98220/4

此处笔者想要着重介绍的是 dwm 的快捷键体系和窗口的布局逻辑。

(2) dwm 的窗口布局逻辑

在此笔者选择先叙述其布局逻辑,我们先看看 dwm 的界面由几个部分组成:

上方分别是:虚拟桌面的标签,不同工作窗口的名字,状态栏;下方分别是:主窗口和副窗口。

笔者先介绍下界面上方的这些内容。

标签:dwm 和 i3wm 相同,它允许你使用不同的虚拟桌面,每个桌面的窗口彼此相不干扰,并且你也可以自定义标签的名称 (也可以是字符表情等等)。

比如笔者喜欢在第一个桌面放些工作用的终端,第二个桌面放 QQ 等社交软件,第三个桌面放浏览器,第四个桌面放文件浏览器等等。这些都可以根据读者自己的习惯进行自定义。

举个例子,我们现在在当前界面打开一个终端,按下 MOD + l,就可以来到第二个虚拟桌面,这时会发现这个桌面啥都没有,但如果我们按下 MOD + h 回到第一桌面,我们就又可以看到我们打开的这个终端了。这是因为我们的那个终端是打开在第一桌面的,而第二桌面干了啥并不会受第一桌面的影响,其它桌面一样的道理。

工作区的名称:即当前工作区的名称;

同时笔者安装了一个名为 awesomebar 的插件,可以显示当前界面所有的 title,比如:

状态栏:此处可以显示一些常用的状态,比如日期、时间等等,具体如何配置,可以查看 suckless 官网的这些内容:https://dwm.suckless.org/status_monitor/

而主副窗口的定义呢,需要各位读者先了解下 dwm 的窗口布局的逻辑。

dwm 的布局逻辑与 i3wm 并不相同。i3wm 如果打开大于两个窗口,那么它的布局逻辑是,不管你打开了多少个窗口,一概平均分配,保证所有窗口平铺,所有窗口在屏幕中所占的大小都是一样的。

而 dwm 的布局逻辑与其并不一样,在 dwm 中,如果我们已经打开了两个窗口,现在要打开第三个,那么 dwm 会认为,你既然打开了第三个窗口,你的工作重心就会放在这个窗口上,因此它不会平均分配这三个窗口,而是会把你即将 focus 的这个窗口占满半个屏幕,并保证光标是在你新打开的那个窗口上,剩下的窗口占据另一半屏幕,如下图所示:

之后不管你打开多少个窗口,dwm 都保证把你想要专注于的窗口放在最大的位置。

同时按照 dwm 官网上给的定义,我们给这个最大的窗口起个名字,叫做主窗口 (master),而右边的所有窗口叫做副窗口 (官网上给它们起的名字是 stack,即栈,因为它们的摆放方式确实形似栈这个数据结构)。

下图为打开四个窗口的布局:

这是我更喜欢 dwm 的原因,这样的操作逻辑更符合常规,在打开多个窗口的时候也能保证主工作区不显得挤得慌。

(3) dwm 的快捷键使用和配置

再来说说快捷键,和 i3wm 相同,dwm 的各种快捷键的起手操作都是 “MOD”,这个 MOD 键可以自己定义,默认是 MOD4, 即 Windows 键,此处笔者选择改为了 MOD1, 即 Alt 键。

我相信各位读者朋友中有一部分会是 Vim 用户,dwm 对于其快捷键的很多窗口切换操作对于 Vim 用户而言都非常容易上手。

比如按住 MOD 键和 Enter 即可打开一个新的终端,同时 MOD + j/k 可以切换不同的窗口,MOD + h/l 可以切换不同的虚拟桌面。具体快捷键的自定义的工作就需要各位自己来选择了。而 dwm 的快捷键修改工作更是非常容易进行,只需要修改 config.h 之中的源代码就可以 (笔者把 config.def.h 复制了一份命名为 config.h):

别忘了修改完后需要重新编译哦,编译完后重新进入桌面就可以看到效果啦。

比如还是这种情况:

咱们现在的光标在左边最大的终端之内,我只需要按下 MOD + j 就可以把光标切换到左上方的终端之内,按下 MOD + k 就可以把光标切换到左下方的终端之内。

同时我们也可以通过快捷键相当方便的切换虚拟桌面,比如 MOD + h 可以向左边切换一个桌面,MOD + l 可以向右边切换一个桌面。当然,假如我现在就想切换到三号桌面,也可以用 MOD + 3 来快速切换。

同时如果咱们想要关闭这个界面,只需要按下 MOD + Shift + c 就可以 (笔者因为之前用 i3wm 的原因,将关闭的快捷键调整为 MOD + Shift + q,把退出 dwm 的快捷键修改为 MOD + Ctrl + q)。

笔者此处还绑定了一个非常常用的快捷键,就是使用 MOD + c 打开 Chrome。配置文件所需要做的修改非常简单,只需要加上下图中高亮了 browsercmd 的两行即可 (配置完后别忘了重新编译哦):

dwm 的功能就介绍这么多,其他的部分更多的需要各位自己去慢慢感受。而其文件配置的方法,除了 suckless 的官网,笔者还推荐另一个去处,就是上期笔者介绍 pacman 时提到过的 Archwiki。Arch Linux 的 Wiki 非常全面,不管想要搜索什么都能够在上面找到。

3.dwm 的优缺点

(1) dwm 的优点

dwm 作为一个窗口管理器,如果跟一般的桌面环境,比如 Gnome 相比,最大的优点有二:其一为高效,其二为轻量。它的高效在此就不细谈了,相信 Vim 用户可以快速上手 dwm 并且高效开发。不需要什么别的证明,dwm 的代码量就是 dwm 轻量的最好体现。dwm 只有不到 3k 行的代码,且不说源代码和代码实现的原理就在这摆着,我们可以把 dwm 修改成任意自己想要的样子,而且其二进制可执行文件不到 100K,其运行速度可想而知。

(2) dwm 的缺陷

再说说 dwm 的缺陷,首先笔者觉得最最麻烦的一点,就是 wine 版 QQ 的问题。Linux 的小众,确实是它有对新手不够 user-friendly 的因素存在,但对于咱们中国用户来说,还有一个原因就是,在 Linux 上用 QQ、微信总是有点不方便。而 deepin-wine 版 QQ 也是对于 Gnome 桌面的兼容性更好一点,若是要在 dwm 下运行,还需要再配置 gnome-settings-daemon 才能够正常运行。

再者就是对新手不够友好,作为一个窗口管理器,这样的操作逻辑是基本上完全颠覆 Gnome 的,如果是第一次接触,需要一段时间的磨合和适应。

同时也正是因为它的极简,有很多咱们在一般图形界面下自带的功能,在 dwm 下必须要下载一些补丁文件(这些补丁文件都可以在 suckless 的官网上找到)才能够实现,比如咱想开机自动启动某些程序(比如输入法,壁纸),就需要下载一个 autostart 插件,让它去调用咱们自己写的脚本文件。比如我想启动输入法,我就在自己的脚本文件中写上 fcitx &,并在源代码中进行脚本文件的调用。

但话说过来,虽然 dwm 的极简给我们带来了一些麻烦,但却跟 Arch 的思想有异曲同工之妙。Arch 的安装没有图形界面,全部要靠敲命令行来完成,安装完毕后的 Arch 也没有捆绑安装什么软件,剩下的自由权都交给了用户,想装啥装啥。比如我喜欢 Gnome 桌面,那我就用 pacman 装 gnome 和 gnome-extra; 我喜欢 KDE,那我就去装 plasma 和 kde-applications。

dwm 的极简也是这么一番场景,我想让 dwm 的状态栏能够显示电脑的实时信息,就去写 status 的脚本;我想让 dwm 能够全屏,就去打 fullscreen 的补丁。也正是这样的极简,给了用户更多的自由,能够让用户选择自己需要的功能进行安装,而不是上来就给用户安装了一堆可能一辈子都用不到的功能。

以上就是本文的全部内容啦,dwm 的极简而实用的地方还远不止笔者所叙述的这么多,如果各位读者感兴趣,可以去 dwm 的官网自行下载安装编译一手,在不断的配置过程中的成就感不是 Gnome 可比的。

转载文章请后台联系

侵权必究

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器视觉CV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值