.. _dwm:
=======================
dwm - 动态窗口管理器
=======================
``dwm`` 是为X Window系统开发得一个极简主义动态窗口管理器,深刻影响了 ``xmonad`` 和 ``awesome`` 等窗口管理器。 ``dwm`` 非常类似 ``vmii`` ,但是其内部更为简单。使用纯c语言开发,性能和安全性由于其极简的结构得到保障,并且特别的是, ``dwm`` 不提供任何配置接口,所有调整需要编辑源代码,然后重新编译。
``dwm`` 开源项目的指南解释了这个开源软件计划永远不超过2000行SLOC(Source lines of code),并且用户配置选项全部包含在一个单一头文件中。
如 :ref:`intro_suckless` 所述, ``suckless`` 系列软件可以构建一个极简的 ``平铺`` 窗口管理桌面。例如以下案例
.. figure:: ../../../_static/linux/desktop/suckless/twm_luke_smith.gif
dmenu
===========
dmenu 是一个键盘驱动的菜单应用工具,作为 ``dwm`` 项目的一部分,通过一个用户配置的快捷键组合, ``dmenu`` 在屏幕边缘的顶部的标准输入流显示水平菜单。通常从用户 ``$PATH`` 显示一系列可用执行命令。用户可以输入一个程序名字,然后 ``dmeu`` 就根据列表显示相应的子字符串匹配用户输入。一旦选择, ``dmenu`` 就发送选中的文本给 ``stdout`` ,也就是pipe给shell来启动程序。
默认只支持 X Font Server字体,但是也有patch可以激活使用Xft的TrueType字体。
``dmenu`` 类似 GNOME Do 或 Katapult 这样的应用程序加载器,或者是Mac OS X的Quicksilver或LaunchBar,可以通过键盘快速启动图形界面的应用程序。
不仅 ``dwm`` 使用 ``dmenu`` ,其他窗口管理器,如 ``xmonad`` 或 ``Openbox`` 以及 ``uzbl`` web浏览器都是用 ``dmenu`` 。
安装
========
``suckless`` 系列软件安装需要从源代码编译
- 下载源代码::
mkdir ~/suckless
cd ~/suckless
git clone https://git.suckless.org/dwm
git clone https://git.suckless.org/st
git clone https://git.suckless.org/dmenu
- 安装需要的依赖::
sudo apt install libx11-dev libxft-dev libxinerama-dev
.. note::
``suckless`` 使用 ``config.mk`` 中的 ``Xinerama`` 库可以实现自动配置屏幕输出(例如显示器,投影仪等),并且设置分辨率并准确绘制输出区域。
- 编译::
cd ~/suckless/st
sudo make clean install
cd ~/suckless/dmenu
sudo make clean install
cd ~/suckless/dwm
sudo make clean install
- 安装 ``xinit`` ::
sudo apt install xinit
- 配置 ``~/.xinitrc`` ::
exec dwm
- 然后执行::
startx
此时会看到一个完全精简的黑白屏幕,干净漂亮
.. note::
结合 :ref:`xpra` 服用更为舒适:
- 自身可以提供远程应用桌面访问
- 也可以访问其他计算和图形能力更强大的服务器
快速起步
==========
- 基本快捷键:
.. csv-table:: dwm基本快捷键
:file: dwm/dwm_key.csv
:widths: 50,50
:header-rows: 1
默认可以看到有9个 ``tag`` (在屏幕上方导航栏)
窗口模式
==========
使用 ``[Shift]+[Alt]+[Enter]`` 启动一些终端以后,可以看到 ``dwm`` 平铺窗口到 ``master`` 和 ``stack`` 。最新的终端位于 ``master`` 部分,其他的终端则 ``堆`` (stack) 在屏幕右方。
::
+------+----------------------------------+--------+
| tags | title | status +
+------+---------------------+------------+--------+
| | |
| | |
| | |
| | |
| master | stack |
| | |
| | |
| | |
| | |
+----------------------------+---------------------+
使用 ``[Alt]+[Enter]`` 则窗口会在 ``master`` 和 ``stack`` 区域切换 - 左右互换
移动
======
- ``移动到另外一个终端`` 使用快捷键:
.. csv-table:: dwm窗口移动快捷键
:file: dwm/dwm_key_move.csv
:widths: 50,50
:header-rows: 1
- ``移动终端到另一个tag`` 使用快捷键:
.. csv-table:: dwm移动终端到另一个tag快捷键
:file: dwm/dwm_key_move_tag.csv
:widths: 50,50
:header-rows: 1
- 增加和减少 ``master`` 区域的窗口数量: 默认 ``master`` 区域只有1个窗口,通过以下快捷键可以增加或减少窗口数量:
.. csv-table:: dwm增加/减少master区域窗口数
:file: dwm/dwm_key_change_amount_of_windows_in_master.csv
:widths: 50,50
:header-rows: 1
- ``在master和stack之间切换移动终端`` 使用快捷键:
.. csv-table:: dwm在master和stack之间切换移动终端
:file: dwm/dwm_key_switch_master_stack.csv
:widths: 50,50
:header-rows: 1
- ``杀死窗口`` 使用快捷键:
.. csv-table:: dwm杀死窗口
:file: dwm/dwm_key_kill_window.csv
:widths: 50,50
:header-rows: 1
- ``退出dwm`` 使用快捷键: ``[Shift]+[Alt]+[q]``
状态栏
==========
使用 X.org 工具设置状态栏::
xsetroot -name "Some Text"
有大量的工具提供了状态栏设置,方便获取系统信息可以使用 :ref:`dwmstatus`
参考
======
- `dwm tutorial `_
- `Dave's Visual Guide to dwm `_
- `luk707/rpi_dwm.md `_
- `Arch Linux 下安装 dwm (平铺式窗口管理器) `_ ``GIN-18`` 的blog,有不少dwm的使用经验,后续再参考实践
- `Arch Linux 美化 (st + dwm) `_
- `Arch Linux 下安装 st (终端模拟器) `_
- `archlinux + dwm系统美化 `_