开发者最需要的,就是一个顺手的开发环境。
每个人的偏好不一样,我的开发环境是 Fish Shell + Xfce + xmonad + Vim,已经用了好多年,非常满意。
三个月前,我介绍了 Fish Shell,今天就来介绍 xmonad。根据本文,读者可以从零开始配置并使用 xmonad。
xmonad 的所有操作都通过键盘,只适合命令行的重度用户。如果你喜欢鼠标和图形界面,xmonad 不适合你。另外,它本身也不支持 Windows 系统。
一、xmonad 是什么?
xmonad 是一种窗口管理器(window manager),用来管理软件窗口的位置和大小,会自动在桌面上平铺(tiling)窗口。
(图片说明:各种软件窗口)
注意,窗口管理器不是桌面环境(desktop environment)。后者是一套功能完善、集成各种工具的图形用户界面,比如 Gnome 和 KDE。桌面环境肯定包含了窗口管理器,但是(某些)窗口管理器可以不需要桌面环境,独立运行,xmonad 就是这种。
(图片说明:典型的桌面环境)
桌面环境通常很重,窗口管理器就很轻,不仅体积小,资源占用也少,用户可以配置各种细节,释放出系统的最大性能。
Linux 系统允许用户更换窗口管理器,有很多种可以选择。xmonad 一直是最受欢迎的前三名,它使用 Haskell 语言编写,是世界上使用人数最多的 Haskell 软件。它的特点就是极简化,性能高。
二、安装
xmonad 的官网提供二进制包,各个发行版都有。如果想自己编译,也可以下载源码。
我的发行版是 Debian,安装就是一行命令。
$ sudo apt-get install xmonad
此外,还需要再安装两个小工具。
$ sudo apt-get install xmobar dmenu
安装完成后,退出当前对话(session),选择 xmonad 会话重新登录。登录后,你会看到一个完全空白的桌面,什么也没有,这说明 xmonad 起作用了,因为这时还没有任何软件窗口。
三、常用命令
3.1 打开终端
第一步,你需要打开一个窗口。一般来说,总是打开命令行终端窗口。
xmonad 提供一个功能键,称为mod
键(modifier 的缩写),所有操作都要使用这个键,默认为alt
键,但是一般会把它改掉,比如改成Windows
键,具体修改方法请看后文。
打开终端窗口,按下mod + shift + return
(默认为alt + shift + return
)。这会打开一个终端窗口,占据了所有桌面空间。
按下mod + shift + return
,再打开一个终端窗口。它与第一个窗口水平地平分屏幕,每个窗口占据50%空间。
注意,第二个窗口占据桌面的左边,自动获得焦点,成为当前窗口。这个左边部分就称为"主栏"(master pane),右边部分称为"副栏",前面打开的第一个窗口自动进入副栏。
再按一次mod + shift + return
,打开第三个窗口。
这时,第三个窗口就会占据主栏,前两个窗口自动进入副栏。规则就是,新窗口总是独占主栏,旧窗口平分副栏。
3.2 布局模式
默认的布局模式是,主栏在左边,副栏在右边。
按下mod + space
,布局模式改成主栏在上方,副栏在下方。
再按一次mod + space
,就变成独占模式,当前窗口独占整个桌面,其他窗口不可见。
再按一次mod + space
,就变回默认模式(主栏在左边,副栏在右边)。
按下mod + ,
(mod + 逗号),一个副栏窗口会移动到主栏,即主栏变成有两个窗口,副栏变成只有一个窗口。
再按一次mod + ,
(mod + 逗号),主栏变成三个窗口,副栏消失。
按下mod + .
(mod + 句号),主栏减少一个窗口,副栏增加一个窗口。
3.3 移动焦点
新窗口总是自动获得焦点,变成当前窗口。按下mod + j
,焦点顺时针移动到下一个窗口。
按下mod + k
,焦点逆时针移动到上一个窗口。
如果当前窗口在副栏,按下mod + return
,会与主栏窗口对调位置。
3.4 调整窗口顺序
按下mod + shift + j
,按照顺时针的顺序,当前窗口与下一个窗口交换位置,即当前窗口前进到下一个位置。
按下mod + shift + k
,按照逆时针顺序,当前窗口与上一个窗口交换位置。即当前窗口后退到上一个位置。
3.5 调整栏位大小
按下mod + l
,主栏增加尺寸。
按下mod + h
,副栏增加尺寸。
3.6 浮动窗口
正常情况下,xmonad 决定了窗口的位置和大小,但有时我们希望自己控制。xmonad 允许某个窗口浮动,脱离原有的布局。
按下mod + 鼠标左键
拖动窗口,该窗口就会变成浮动窗口,可以放到屏幕的任何位置。
按下mod + 鼠标右键
可以调整窗口大小。
按下mod + t
,当前浮动窗口就会结束浮动,重新回到 xmonad 的布局。
3.7 关闭窗口
窗口可以自然关闭(比如终端窗口按ctrl + d
),也可以让 xmonad 强行关闭它。
按下mod + shift + c
,会关闭当前窗口,焦点移到下一个窗口。
3.8 退出 xmonad
按下mod + shift + q
,将会立刻关闭所有窗口,退出 xmonad,用户需要重新登录。
四、工作区
xmonad 提供9个工作区,相当于提供9个桌面。按下mod + 1
到mod + 9
切换。 xmonad 启动后,默认处于1号工作区 。
如果要将一个窗口移到不同的工作区,先用mod + j
或mod + k
,将其变成焦点窗口,然后使用mod + shift + 6
,就将其移到了6号工作区。
我的习惯是,1号工作区是终端,2号是浏览器,4号是虚拟机。
五、多显示器
多显示器需要使用配置工具,我用的是 xrandr。其他工具还有 Xinerama 和 winView,另外 arandr 是 xrandr 的图形界面,也可以用。
下面的命令查看显示器的连接情况。
$ xrandr -q
具体的配置教程可以看这里。
使用多显示器时,每个显示器会分配到一个工作区。默认情况下,1号工作区显示在主显示器,2号工作区显示在第二个显示器。如果要将4号工作区显示在当前显示器,那么按下mod + 4
,4号工作就会与当前屏幕中的工作区互换位置。
mod + w
转移焦点到左显示器,mod + e
转移焦点到右显示器。
mod + shift + w
将当前窗口移到左显示器,mod + shift + e
将当前窗口移到右显示器。
六、配置文件
xmonad 的配置文件是~/.xmonad/xmonad.hs
。该文件需要用户自己新建,这里是一个简单的范例,详细的解释可以看官网。
这个文件里面,modMask
决定了mod
到底是哪一个键。
modMask = mod4Mask
上面的这行就将mod
键设为了Windows
键。
修改配置文件以后,按下mod + q
,新的配置就会生效。
七、xmobar
xmonad 的默认桌面,什么也没有,不太方便。xmobar 提供了一个状态栏,将常用信息显示在上面,比如 CPU 和内存的占用情况、天气、时间等等。
(图片说明:顶部状态栏就是 xmobar。)
它的配置文件是~/.xmobarrc
(教程1,2,3)。这里是一个最简单配置,这里是我的笔记本电脑使用的配置。
八、dmenu
最后,dmenu 在桌面顶部提供了一个菜单条,可以快速启动应用程序。
(图片说明:dmenu 显示在屏幕顶部,输入fire
会自动显示包含fire
的启动命令。)
它从系统变量$PATH
指定的路径中,寻找所有的应用程序,根据用户的键入,动态提示最符合的结果。
按下mod + p
就会进入dmenu
菜单栏,按下ESC
键可以退出。方向键用来选择应用程序,return
键用来启动。
(完)
jacky.yao 说:
沙发呀,这个跟tmux比有何优势?
2017年7月29日 08:57 | # | 引用
Damon 说:
感觉还不如 awesome 啊,这种窗口管理器最大的特点就是丑,其他都还好。
2017年7月29日 09:08 | # | 引用
int0x80 说:
我理解一个是终端模拟器的管理,另一个是 xwindow 的管理
2017年7月29日 09:14 | # | 引用
modle 说:
哈哈哈 阮老师又发新文啦
2017年7月29日 10:28 | # | 引用
fasdf 说:
WM是GUI环境用的,如果你只是CLI环境,那没区别——准确的说你根本用不了。WM就相当于与KDE里面的KWIN那种东西,之所以轻量,就是因为他根本没有其他功能
2017年7月29日 17:14 | # | 引用
Herald Yu 说:
赞赞赞赞赞!看的筋脉通畅。
2017年7月29日 23:29 | # | 引用
FungLeo 说:
目前我的功力还不能使用此窗口管理器。还是老老实实的使用mac桌面吧-_-|||
2017年7月31日 09:16 | # | 引用
flyisland 说:
好奇一峰的开发电脑是什么型号,为什么选择这个型号?
2017年7月31日 09:42 | # | 引用
andyiac 说:
一直在用 i3 感觉也还行,开箱即用
2017年7月31日 11:53 | # | 引用
timothy 说:
我是来看投资广告的。
2017年7月31日 12:05 | # | 引用
auchan 说:
操作感觉和awesome一样,awesome配置文件还是用的lua呢
2017年7月31日 12:13 | # | 引用
silver 说:
九个工作区都用了吗?
2017年8月 1日 21:41 | # | 引用
Yanhao Mo 说:
i3 用户路过, 以前也用dmenu, 但是最近试了rofi, 感觉比dmenu要好一些, 推荐博主尝试一下.
2017年8月 2日 09:36 | # | 引用
bobo 说:
我archlinux使用的i3桌面管理器,也很好用哟
2017年8月 3日 15:23 | # | 引用
因苏阿 说:
dmenu太落伍了,我现在用rofi
2017年8月10日 00:04 | # | 引用
小马过河 说:
看到了CS1.6,linux能装上吗?还是steam,steam上好象没什么人玩。
2017年8月22日 11:48 | # | 引用
Pferdchen 说:
请问如何在Debian XFCE上切换到Xmonad。在Ubuntu上很容易。官方文档没有看懂
https://wiki.haskell.org/Xmonad/Using_xmonad_in_XFCE
2017年9月12日 17:19 | # | 引用
Pferdchen 说:
您好,阮老师,您是如何在Debian XFCE桌面环境里运行Xmonad窗口管理器的?求赐教。官方的教程实在没有看懂。
https://wiki.haskell.org/Xmonad/Using_xmonad_in_XFCE
2017年9月14日 17:53 | # | 引用
Imcodingcc 说:
我也是xfce 然后你跟我说小, 我安装提示
After this operation, 1176 MB of additional disk space will be used.
我用的内存卡系统,总共就32g啊。
2017年11月 8日 16:19 | # | 引用
sontek 说:
如果你一直使用 Debian + xmonad 窗口管理器,那请问你是怎么安装的 QQ ?
2018年8月15日 11:53 | # | 引用
ardin 说:
一个图形界面,以不用鼠标为荣。也是醉了。
2020年9月27日 13:55 | # | 引用