XMonad 配置教程
我已经用XMonad作为窗口管理器好几年了,XMonad非常稳定,但是中文里一直都没有一篇 比较好懂的XMonad配置教程,我想可能的原因是XMonad的门槛比较高—配置需要懂一点 Haskell。
如果你还没有听过Haskell,我想需要先了解一下Haskell:
窗口管理器和桌面环境
最开始玩的时候,我是傻傻分不清这两个东西。竟然还有窗口管理器这个东西?
桌面环境是指一些集成了很多工具的集合,例如 Gnome
,例如 KDE
,例如Windows桌面。
而窗口管理器则是其中一个单独的部分,专门用来管理窗口(window)该要怎么摆放。
绝大部分桌面提供的窗口管理器都是手动档,即需要用户手动去把窗口移到不同的地方,调整 成不同的大小。如图:
而XMonad则是自动档,它会自动帮你调整窗口的大小。再加上XMonad的另一个特性:平铺。 窗口管理器一般分为两种,平铺式和遮盖式。遮盖式即像Windows7那样,一个窗口遮挡住 另外一个窗口,而XMonad则与之相反,是平铺式,即窗口和窗口之间互不遮挡,例如这样:
安装XMonad
XMonad现在最新的版本是 0.13
。一般会分成两个包:xmonad
和xmonad-contrib
。前者
是XMonad的核心,而后者则是一些用户贡献的插件。
- ArchLinux:
$ sudo pacman -S xmonad xmonad-contrib
- Ubuntu/Debian:
$ sudo apt-get install xmonad xmonad-contrib
此时执行一下 ls /usr/share/xsessions/
会发现多了一个 xmonad.desktop
,但是
先不要着急退出当前窗口管理器或者桌面环境,先安装一下 dmenu
。
- ArchLinux:
$ sudo pacman -S dmenu
- Ubuntu/Debian:
$ sudo apt-get install dmenu
此外还需要保证自己安装了最少一个终端程序,例如 gnome-terminal
或者 xterm
。
然后退出当前桌面环境或者窗口管理器,选择xmonad,然后输入用户名密码,登录之后就会 发现空空的啥也没有了。不要担心,这样才是正常的:
开始配置
我们首先当然是一通乱按,发现什么也没有。
然后我们按下 alt
和 p
,这时候看最上面,是不是出现了一个可以输入字符的地方?
那就是dmenu。假设我们安装的终端模拟器是 gnome-terminal
,那么我们输入 gnome-terminal
然后回车,gnome-terminal
就会显现在我们眼前了。之后我们输入一个简单的配置文件。
$ cat ~/.xmonad/xmonad.hs
import XMonad
import XMonad.Config.Desktop
import XMonad.Hooks.EwmhDesktops
main = do
xmonad $ ewmh $ desktopConfig {
terminal = "gnome-terminal"
}
然后我们按下 alt
和 q
,稍等一下,duang,是不是立马就变了样呢?此时我们多次
按下 shift
,alt
和enter
,会发现多个终端自动被排列好,shift
,alt
,c
则关闭
了当前聚焦的窗口。
常用快捷键
那当然是要看 man page
啦。打开终端模拟器,输入 man xmonad
。此处需要提醒的是
mod
和modMask
默认情况下指的都是 alt
键。
其他软件
学完了XMonad的常用快捷键,接下来我们看看一些常用的软件:
- xmobar 状态栏,一般会配合trayer构成一个panel,这样就可以显示各种状态和后台运行的icon了
- taffybar 状态栏,是上面的组合的替换者,但是在ArchLinux下得自己安装
- feh 用来设置背景图片的
- udiskie 自动挂载U盘
- nautilus 图形化文件管理器,偶尔还是用得着的
- xcompmgr 将多个图形叠加,美化
- fcitx 输入法
- network-manager和network-manager-applet 安装之后,执行
nm-applet
,就可以看到一个icon,点开就可以管理网络了 - lxappearance 美化,默认的界面真实丑的要命,所以每次我都会安装这个,选一个好看的gtk主题。。。
- scrot 截图
- virt-manager和kvm 安装虚拟机,虽然host不是Windows,但是现实生活中还是无法完全离开Windows的
如何配置
本来最开始我想讲一讲怎么配置的,后来我想了一下,XMonad门槛高就高在,其配置文件是Haksell写的, 而Haskell一时半会儿讲不完,所以我只能说,我学习配置XMonad的过程,主要是:
- 看 官方教程
- 看别人的配置:别人的,我的
- Google搜索问题如何解决
- 看官方文档:http://hackage.haskell.org/package/xmonad
Haskell的好处就在于,你知道 main函数里 xmonad需要接什么参数,然后按照类型提示 把参数塞进去就可以。
更多文章
- socks5 协议详解
- zerotier简明教程
- 搞定面试中的系统设计题
- frp 源码阅读与分析(一):流程和概念
- 用peewee代替SQLAlchemy
- Golang(Go语言)中实现典型的fork调用
- DNSCrypt简明教程
- 一个Gunicorn worker数量引发的血案
- Golang validator使用教程
- Docker组件介绍(一):runc和containerd
- Docker组件介绍(二):shim, docker-init和docker-proxy
- 使用Go语言实现一个异步任务框架
- 协程(coroutine)简介 - 什么是协程?
- SQLAlchemy简明教程
- Go Module 简明教程