Fork me on GitHub

条形与波浪

随心博客 blog

bars and waves

非得搞特殊(三) - 平铺式窗口管理 xmonad

很久以前, 大概刚毕业的时候, 我使用 windows 进行开发, 终端, 换行符, docker, 环境变量等等等都是大坑小坑, 不久就换了centos, 那叫一个舒心. 不折腾会死, 我鬼使神差地相中了 gentoo, 历经百般坎坷, 装好了, 也傻眼了, 开机就一个终端, 还要装窗口管理器. awesome, i3, dwm 林林总总又是鬼使神差, 挑到了 xmonad. 至此, 我的开发环境可以说是配得上"完美"二字了.

这是个什么鬼东西?

xmonad

平铺式窗口管理器. 常用 windows 和 macos 的用户可能都是第一次听到这个词, 它们的原生窗口管理器都是浮动式的, 也就是你可以用鼠标把窗口拖来拖去, 把一个窗口盖在另一个窗口上面, 这就叫浮动式窗口管理器. linux 的流行发行版 ubuntu, centos 等也都自带浮动窗口管理器. 相对应的, 平铺式也就不能随意拖动, 不能相互覆盖, 窗口们必须恰好平整地排列, 铺满整个屏幕. 你也可以在 windows 下把窗口拖一拖排列好, 看起来会像平铺式窗口.

平铺式不能自由地展示窗口, 只能用键盘来操纵窗口. 看起来平铺式仅仅是多了很多限制, 但事物的两面性告诉我们, 束缚也能带来自由. 相比于鼠标, 纯粹的键盘操控极其高效. 打开, 关闭, 移动窗口, 切换焦点, 切换桌面等操作通通用键盘来控制, 这种操作方式所带来的流畅感有些像从 nano 进化到了 vim.

安装

平铺式窗口有很多, 以 xmonad 为例介绍. ubuntu/debian 下直接安装:

apt update
apt install xmonad

装完重启进入 dm(display manager), 也就是登录界面, 会有一个按钮选择 wm(window manager), 选中你刚装好的 xmonad, 再登录即可. 有的 dm 有 bug 会导致进入的还是原来的 wm, 这时候可以编辑 $home/.xsessionrc 文件, 填入

exec xmonad

详细可以参考我的仓库 https://github.com/derekchuank/debian-config 内的文件 .xsessionrc.

登录进入后, 屏幕是一片空白的, 这时候你不要慌, 你没有把本子装坏, 反正我第一次装完是有点小慌. 键入 ctrl + shift + enter 新建一个终端窗口, ok 大功告成. 接下来花上几分钟去 官方教程 里熟悉下常用操作吧.

百尺杆头更近一步

空空的屏幕上只有一个个的终端窗口, xmonad 当然也支持添加各类组件, 比如模仿 windows 下部的任务栏, 自定义程度极高, 前提是要会一点 Haskell.

除了打开终端, 我们还要打开 firefox 上网, 打开 mplayer 看视频, 打开各种应用. 以 firefox 为例, 终端输入 firefox 后, firefox 是打开了, 但是原终端没有消失, 显示着 firefox 的输出日志. 我们希望打开 firefox 后终端自动关闭, nohup firefox & 不管用, 重定向输出也没有用, 这时候 disown 命令就派上了用场. firefox &>> /dev/null & disown && exit 完美解决痛点.

中文输入法 fcitx 要在 xmonad 启动的时候启动, 屏幕变黄软件 redshift 也要启动. 这些都需要写入到一些配置文件. 详细可以参考我的仓库 https://github.com/derekchuank/debian-config 中的文件 bashrc.sh, profile.sh .xinitrc 等.

配置完成! 早起, 按下电源, 输入账户登录, ctrl + shift + enter 敲下打开终端, firefox 打开浏览器, 用 Tridactyl 冲冲浪花. ctrl + 2 切到2号桌面, 跑几个命令再 ctrl + 1 回到 firefox. 又一个美好的清晨.

后来

后来我抛弃了最爱的 gentoo, 青睐于 ubuntu, 最后投入了 kali 的怀抱. 但是对于 xmonad 我始终不离不弃.