一个非常快速, 小巧并使用动态管理窗口的窗口管理器。
窗口管理器的作用就是实现窗口的最大化,最小化,移动,关闭等。而这些不是X服务器来负责完成的。如果不窗口管理器,X应用程序仍可以启动,但它就在屏幕中间,不能移动,不能最小化,不能最大化,没有边框。
Xfree86 自带了一个简单的窗口管理器:twm
,同时窗口管理器还有 GNOME
和 KDE 等
。为了更方便的了解窗口管理器的作用,我们可以做以下测试(下面使用的是 ubuntu
,无法确认以下操作和命令的正确性)。
有界面的Linux系统启动后,进入图形进面,我们打开一个 XTERM,输入 init3
就可以安全的回到字符界面。
再输入 startx
又返回到图形界面,你看到的是一个和平时使用一样的完整的图形界面操作环境。你可以最大化,最小化,移动,关闭窗口等。
我们还是再次进入字符界面,看看吧,按 ctrl+alt+backspace
反回字符界面。输入: xinit
(注:与第二步的命令 startx
不同,再次启动图形界面,将看到一个 XTERM。而且不能移动。但是你可以在这个 XTERM 中输入命令打开 X 应用程序,如果我输入: mozilla
。打开浏览器,但它在屏幕中间,不能移动,不能最小化,不能最大化,没有边框。为什么同样一个 X 应用程序会有这样的不同呢?因为我们用 startx
起动图形界面的时候同时也启动了一个默认的 WM(即窗口管理器),如果你用 KDE 就起动了 KDE,如果你用 GNOME 就起动了 GNOME。但是你用 xinit
起动图形界面的时候却没有起动 WM。
如果你用 xinit
起动图形界面并在 xterm 中输入 twm
,看看会有什么?
xterm 被加上了一个边框,你可以通过这个边框移动,最大化,最小化这个 xterm,twm 就是 XFree86 中自带的窗口管理器,是一个比较简陋的最简单的窗口管理器,但是他具有窗口管理器的全部特征。
如果你不输入 twm
而输入 gnome-session
就可以起动 GNOME 或者输入 startkde
起动 KDE。
X 是协议,就像 HTTP 协议,IP 协议一样。因为输入设备和显示设备不是同一个设备,而且他们需要相互配合,进行画面显示,所以需要一个交互协议,建立他们直接的沟通桥梁。
X 协议主要有 X 应用程序和 X 服务器组成,如:我需要划个圆,X 应用程序告诉 X 服务器在屏幕的什么地方用什么颜色画一个多大的圆,而具体的"画"的动作,比如这个圆如何生成,用什么显卡的驱动程序去指挥显卡完成等等工作是由 X 服务器来完成的。
X 服务器还负责捕捉键盘和鼠标的动作,假设 X 服务器捕捉到鼠标的左键被按下了,他就告诉 X 应用程序:亲爱的应用程序先生,我发现鼠标被按下了,您有什么指示吗?如果 X 应用程序被设计成当按下鼠标左健后再在屏幕上画一个正方形的话,X 应用程序就对 X 服务器说:请再画一个正方形,当然他会告诉服务器在什么地方用什么颜色画多大的正方形,但不关心具体怎么画--那是服务器的事情。
默认已安装号 xorg 相关依赖, 如未安装可参考以下 arch 系统的安装:
sudo pacman -S xorg make gcc
安装依赖脚本都放在
install
目录下, 根据系统不同建立不同的脚本。
.
├── install
│ └── Arch.sh
如果你使用登陆启动器(如 sddm 等) 需要添加 DWM 启动选项,可以在 /usr/share/xsessions/
添加 DWM.desktop
文件,DWM.desktop文件内容如下:
[Desktop Entry]
Name=DWM
Exec=dwm
TryExec=dwm
DesktopNames=DWM
.config/dwm/autostart.sh
直接采用 X11 的 keysyms。
并不是所有的键盘都用于输入英文,有些键盘是用于输入其他字符的,比如说日文假名、俄文字母等。通常来讲,键盘的 keycode 不会变,但操作系统可以选择性的翻译这些 keycode,来实现输入非 ascii 字符,这一步不需要输入法的介入。实际上键盘本身每个按钮的 keycode 是不变的,只是 keycode 到keysym s的映射变化了。这种映射与输入法不同,它是有标准的,并且每个操作系统都提供了同样的支持。keysyms 列表可以参考几个网页,它的内容是相同的:
变量(区分大小写) | 说明 | 对应键盘按键 |
---|---|---|
Mod1Mask | 改变键 | Alt |
Mod4Mask | 窗口键 | Win |
ShiftMask | shift 键 | Shift |
XK_* | * 为26 个字母以及 0~9 数字 | 对应键盘26个字幕和10个数字按键 |
XK_F* | * 为 1~12 数字 | 对应键盘上 F1 ~ F12 按键 |
XK_Escape | Esc 按键 | esc |
XK_grave | esc 键下的 ~ 键 | ~ |
XK_Tab | 制表符 | tab |
XK_space | 空格 | space |
XK_comma | 逗号 | , |
XK_period | 句号 | 。 |
XK_slash | 斜杠 | / |
XK_semicolon | 分号 | ; |
XK_quotedbl | 单引号 | ‘ |
XK_Return | 回车 | enter |
XK_bracketleft | 左中括号 | [ |
XK_bracketright | 右中括号 | ] |
XK_backslash | 反斜杠 | \ |
XK_equal | 等于号 | = |
XK_minus | 减号 | - |
XK_BackSpace | 退格 | back |
XK_Delete | 删除键 | delete |
打过的补丁文件都放在
patches
目录下, 补丁对应功能请查看 git log。
.
├── patches
│ └── dwm-alpha-6.4.diff
...
应用补丁的方式:
patch < patches/补丁名称.diff
如果应用过程有冲突, 冲突内容会保存在 对应文件.rej
当中, 解决完冲突即可。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。