窗口管理器是管理桌面上各种窗口的组件,主要功能有:窗口堆叠方式,窗口移动规则等。大多数人接触到的是堆叠式窗口管理器,一个窗口可以叠放在其他窗口之上,调整窗口的主要方式是鼠标。而dwm(Dynamic Window Manager)是suckless开发的一个动态窗口管理器,可以自定义不同窗口的出现规则如平铺或者堆叠,它调整窗口的主要方式是键盘。
同桌面环境一样,dwm也必须有最基本的软件支撑,推荐安装下面的软件:
软件名 | 软件介绍 |
---|---|
dwm | 动态窗口管理器,suckless开发 |
demu | 应用程序选择器,suckless开发 |
st | 终端模拟器,suckless开发 |
feh | 壁纸设置程序 |
pcmanfm | 文件管理系统 |
fcitx5 | 输入法 |
一、安装
1. 创建一个用户,并赋 sudo 权限
如果没有普通用户,需要创建一个普通用户(如我的 hollowman 用户),并切换到普通用户,因为桌面环境通常是在普通用户模式下运行。
# useradd -m hollowman
# usermod -aG adm,wheel hollowman
# passwd hollowman
# vim /etc/sudoers #找到 #%wheel ALL=(ALL:ALL) ALL去掉注释
%wheel ALL=(ALL:ALL) ALL
# su hollowman
2. 安装xorg协议及必要软件
$ sudo pacman -S xorg xorg-xinit feh udisks2 udiskie pcmanfm git
$ systemctl enable udisks2 #自动启动udisks2服务,可以使得文件管理系统(pcmanfm)能够自动识别U盘
3. 安装dwm,st,dmenu
$ git clone https://git.suckless.org/dwm
$ git clone https://git.suckless.org/st
$ git clone https://git.suckless.org/dmenu
$ cd dwm
$ sudo make clean install #编译安装
$ cd ../st
$ sudo make clean install
$ cd ../dmenu
$ sudo make clean install
4.安装显卡驱动
由于我的是KVM虚拟机,使用的是qxl虚拟网卡,如不装驱动,会提示找不到display,因此需安装驱动后重启。
$ sudo pacman -S xf86-video-qxl
5. 安装声音工具
$ sudo pacman -S alsa-utils
6. 设置自动启动dwm
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
$ sudo vim .xinitrc #注释掉最后5行,并添加exec dwm
#twm &
#xclock -geometry 50x50-1+1 &
#xterm -geometry 80x50+494+51 &
#xterm -geometry 80x20+494-0 &
#exec xterm -geometry 80x66+0+0 -name login
exec dwm
$ startx #启动dwm,若启动失败,考虑重装xorg和xorg-xinit
7. 查看dwm配置信息
dwm配置信息可查看dwm目录下的config.h文件,并可进行个性化配置。
先学习最基础的dwm用法:
使用 Mod1 + p 可以启动 dmenu, 然后只需要在上边出现的工具条中输入你想运行的程序窗口管理器是管理桌面上各种窗口的组件,主要功能有:窗口堆叠方式,窗口移动规则等。大多数人接触到的是堆叠式窗口管理器,一个窗口可以叠放在其他窗口之上,调整窗口的主要方式是鼠标。而dwm(Dynamic Window Manager)是suckless开发的一个动态窗口管理器,可以自定义不同窗口的出现规则如平铺或者堆叠,它调整窗口的主要方式是键盘。
同桌面环境一样,dwm也必须有最基本的软件支撑,推荐安装下面的软件:
软件名 | 软件介绍 |
---|---|
dwm | 动态窗口管理器,suckless开发 |
demu | 应用程序选择器,suckless开发 |
st | 终端模拟器,suckless开发 |
feh | 壁纸设置程序 |
pcmanfm | 文件管理系统 |
fcitx5 | 输入法 |
Dmenu是dwm的一个有用的扩展。它不是一个单独的列表式菜单,而是生成一个可执行文件的列表并根据输入进行自动补全。比起许多程序启动器,它能与dwm更好地整合。
可以按 Mod1 + P 来启动Dmenu(Mod1 缺省是 Alt )。当然你也可以按自己的喜好改变它。然后只需要在上边出现的工具条中输入你想运行的程序的前几个字母,也可以按左右箭头在进行选择,按回车键完成。
8. 通过 startx 命令启动 dwm
$ startx
此时可以正常使用dwm了,先学习一下4个基础用法(这里Mod1指的是alt键):
启动dmenu:
Mod1 + p
,并在上边出现的工具条中输入你想运行的程序名,按回车。
启动终端st:Mod1 + Shift + enter
切换工作区(1-9):Shift + Mod1 + x
关闭当前窗口:Mod1 + Shift +c
退出 dwm:Mod1 + Shift + q
9. dwm 快捷键学习
dwm 目录的 config.h 文件中包含了配置信息,包括快捷键,可以查看和修改。
$ cd dwm
$ sudo vim config.h #查看并修改dwm的配置信息。
...省略的配置信息....
#define MODKEY Mod1Mask #定义MODKEY,默认是Mod1Mask(Alt键),如怕冲突,可修改为Mod4Mask(Window键),修改后要重新编译安装才能生效。
...省略的配置信息....
static Key keys[] = {
/* modifier key function argument */
{ MODKEY, XK_p, spawn, {.v = dmenucmd } }, # MODKEY + p 打开程序管理器dmenu
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, # MODKEY + Shift + Return 打开终端模拟器st
{ MODKEY, XK_b, togglebar, {0} }, # MODKEY + b 显示/隐藏dwm顶部的状态栏
{ MODKEY, XK_j, focusstack, {.i = +1 } }, # MODKEY + j 工作窗口焦点切换,窗口层次+1,也就是下移1层
{ MODKEY, XK_k, focusstack, {.i = -1 } }, # MODKEY + k 工作窗口焦点切换,窗口层次-1,也就是上移1层
{ MODKEY, XK_i, incnmaster, {.i = +1 } }, # MODKEY + i 平铺式工作窗口排列布局切换
{ MODKEY, XK_d, incnmaster, {.i = -1 } }, # MODKEY + d 平铺式工作窗口排列布局切换
{ MODKEY, XK_h, setmfact, {.f = -0.05} }, # MODKEY + h 平铺式工作窗口大小比例切换,主窗口-5%
{ MODKEY, XK_l, setmfact, {.f = +0.05} }, # MODKEY + l 平铺式工作窗口大小比例切换,主窗口+5%
{ MODKEY, XK_Return, zoom, {0} }, # MODKEY + Return 将第一层窗口(主窗口)与当前焦点所在的窗口或者第2层的窗口交换位置
{ MODKEY, XK_Tab, view, {0} }, # MODKEY + Tab 切换到上一次进入的工作区
{ MODKEY|ShiftMask, XK_c, killclient, {0} }, # MODKEY + Shift + c 关闭工作窗口
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, # MODKEY + t 将窗口布局模式设为layouts[0]也就是平铺
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, # MODKEY + f 将窗口布局模式设为layouts[1]也就是浮动堆叠,但不改变打开的窗口大小
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, # MODKEY + m 将窗口布局模式设为layouts[2]也就是全屏堆叠
{ MODKEY, XK_space, setlayout, {0} }, # MODKEY + Space 在最近获得焦点的两个窗口排列模式之间来回切换
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} }, # MODKEY + Shift + Space 将工作区窗口布局模式调整为浮动式模式,且会将第2层的窗口调整为全屏,注意与 XK + f 区分
{ MODKEY, XK_0, view, {.ui = ~0 } }, # MODKEY + [0-9] 显示对应工作区的工作窗口,如果是0则显示所有工作区的所有工作窗口
{ MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } }, # MODKEY + Shift + [0-9] 将当前工作窗口移动至对应工作区,如果是0则表示将当前工作窗口移动至每个工作区(不是拷贝)
{ MODKEY, XK_comma, focusmon, {.i = -1 } }, # MODKEY +
{ MODKEY, XK_period, focusmon, {.i = +1 } }, # MODKEY +
{ MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, # MODKEY + Shift +
{ MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, # MODKEY + Shift +
TAGKEYS( XK_1, 0) # MODKEY + 1 切换到1号工作区
TAGKEYS( XK_2, 1) # MODKEY + 2 切换到2号工作区
TAGKEYS( XK_3, 2) # MODKEY + 3 切换到3号工作区
TAGKEYS( XK_4, 3) # MODKEY + 4 切换到4号工作区
TAGKEYS( XK_5, 4) # MODKEY + 5 切换到5号工作区
TAGKEYS( XK_6, 5) # MODKEY + 6 切换到6号工作区
TAGKEYS( XK_7, 6) # MODKEY + 7 切换到7号工作区
TAGKEYS( XK_8, 7) # MODKEY + 8 切换到8号工作区
TAGKEYS( XK_9, 8) # MODKEY + 9 切换到9号工作区
{ MODKEY|ShiftMask, XK_q, quit, {0} }, # MODKEY + Shift + q 退出dwm动态窗口管理器
...省略的配置信息....
二、安装基础应用
1. 安装火狐浏览器
$ sudo pacman -S firefox
但是打开火狐发现有乱码,是因为缺少字体的原因(忘记截图了),安装字体就可以了
2.安装字体
xorg 图形界面常用到的字体:
$ sudo pacman -S ttf-dejavu ttf-droid ttf-hack ttf-font-awesome otf-font-awesome ttf-lato ttf-liberation ttf-linux-libertine ttf-opensans ttf-roboto ttf-ubuntu-font-family
$ sudo pacman -S ttf-hannom noto-fonts noto-fonts-extra noto-fonts-emoji noto-fonts-cjk
$ sudo pacman -S adobe-source-code-pro-fonts adobe-source-sans-fonts adobe-source-serif-fonts adobe-source-han-sans-cn-fonts adobe-source-han-sans-hk-fonts adobe-source-han-sans-tw-fonts adobe-source-han-serif-cn-fonts
$ sudo pacman -S wqy-zenhei wqy-microhei
3.安装 fcitx5 输入法
$ sudo pacman -S fcitx5-im fcitx5-chinese-addons #安装输入法引擎及中文模块
$ sudo vim /etc/pacman.conf #编辑/etc/pacman.conf在最后添加archlinuxcn源,此源包括下面需要安装的2个离线词库
[archlinuxcn]
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch
$ sudo pacman -Syy #同步镜像源
$ sudo pacman -S archlinuxcn-keyring #安装访问archlinuxcn镜像源的安全秘钥
$ sudo pacman -S fcitx5-pinyin-zhwiki fcitx5-pinyin-moegirl #安装常用的2个离线词库
$ sudo pacman -S fcitx5-material-color fcitx5-nord #安装常用的2个输入法主题包
$ sudo vim /etc/environment #配置输入法环境变量,添加下面的配置信息
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
INPUT_METHOD=fcitx
SDL_IM_MODULE=fcitx
GLFW_IM_MODULE=ibus
按Mod1 + p
,并在上边出现的工具条中输入fcitx5-configtool,按回车配置输入法信息。
4. 配置dwm启动时自动加载项
如不配置,dwm窗口的当前分辨率为1024x768,需调整为自动加载,先看看命令如何设置:
$ xrandr -q
$ xrandr --output Virtual-1 --mode 1920x1080 --rate 60.00 #修改显示器屏幕分辨率及刷新率,但重启失效
dwm可以设置一个背景,如下可实现:
$ sudo pacman -S archlinux-wallpaper
$ feh --bg-fill --randomize /usr/share/backgrounds/archlinux/* #添加背景,但重启失效
结合上面的配置,将其添加到自动加载:
$ sudo vim ~/.xinitrc #在exec dwm 前添加3行,注意先修改分辨率,否则背景会不全屏。
fcitx5 & #启动dwm时,自动启动fcitx5输入法
xrandr --output Virtual-1 --mode 1920x1080 --rate 60.00 #修改显示器屏幕分辨率及刷新率
feh --bg-max --randomize /usr/share/backgrounds/archlinux/* #添加背景
exec dwm
效果图
三、个性化配置
+------+----------------------------------+--------+
| tags | title | status |
+------+---------------------+------------+--------+
| | |
| | |
| | |
| | |
| master | stack |
| | |
| | |
| | |
| | |
+----------------------------+---------------------+
1. 状态栏基础配置:
状态栏包括左侧的工作区,窗口排列布局,当前窗口信息等。
1)配置(符号)字体
要想在dwm中显示较为漂亮的字体(如符号字体),需要先安装某些符号字体图库。
这里我们添加文泉驿等宽微米黑、以及Nerd符号字体到dwm中。由于文泉驿字体在之前的步骤已经配置,这里只要安装nerd符号字体图库
$ sudo pacman -S ttf-nerd-fonts-symbols #安装nerd符号字体图库,官网:https://www.nerdfonts.com/
查看一下2个字体的名称
$ fc-list | grep WenQuan
/usr/share/fonts/wenquanyi/wqy-zenhei/wqy-zenhei.ttc: WenQuanYi Zen Hei Mono,文泉驛等寬正黑,文泉驿等宽正黑:style=Regular
/usr/share/fonts/wenquanyi/wqy-microhei/wqy-microhei.ttc: WenQuanYi Micro Hei,文泉驛微米黑,文泉驿微米黑:style=Regular
/usr/share/fonts/wenquanyi/wqy-zenhei/wqy-zenhei.ttc: WenQuanYi Zen Hei Sharp,文泉驛點陣正黑,文泉驿点阵正黑:style=Regular
/usr/share/fonts/wenquanyi/wqy-microhei/wqy-microhei.ttc: WenQuanYi Micro Hei Mono,文泉驛等寬微米黑,文泉驿等宽微米黑:style=Regular
/usr/share/fonts/wenquanyi/wqy-zenhei/wqy-zenhei.ttc: WenQuanYi Zen Hei,文泉驛正黑,文泉驿正黑:style=Regular
$ fc-list | grep Nerd
/usr/share/fonts/TTF/Symbols-2048-em Nerd Font Complete.ttf: Symbols Nerd Font:style=2048-em
将字体配置信息写入dwm/config.h文件
$ sudo vim ~/dwm/config.h #找到并修改下方内容,增加WenQuanYi Micro Hei(文泉驿微米黑)中文字体和Symbols Nerd Font字符字体
static const char *fonts[] = { "monospace:size=12"
"WenQuanYi Micro Hei:size=12:type=Regular:antialias=true:autohint=true",
"Symbols Nerd Font:pixelsize=16:type=2048-em:antialias=true:autohint=true"};
static const char dmenufont[] = "monospace:size=12";
/*默认配置
static const char *fonts[] = { "monospace:size=10" };
static const char dmenufont[] = "monospace:size=10";
*/
工作区tagging的配置
$ sudo vim ~/dwm/config.h #可将数字替换成想要使用的符号字体
/* tagging */
static const char *tags[] = { "", "", "", "", "", "", "", "", "" };
/*默认配置
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
*/
窗口排列布局图标配置
$ sudo vim ~/dwm/config.h #默认的"[]="表示平铺排列;"><>"表示浮动堆叠;"[M]"表示全屏堆叠,其中M表示该工作区有多少层也就是堆叠了多少个工作窗口
static const Layout layouts[] = {
{ "模式:", tile }, /* first entry is default */
{ "模式:", NULL }, /* no layout function means floating behavior */
{ "模式:[M]", monocle },
};
/* 默认配置
static const Layout layouts[] = {
/* symbol arrange function */
{ "[]=", tile }, /* first entry is default */
{ "><>", NULL }, /* no layout function means floating behavior */
{ "[M]", monocle },
};
*/
重新编译(make)和安装(sudo make clean install)dwm
$ cd ~/dwm
$ make && sudo make clean install
2) 配置状态栏颜色
$ sudo vim ~/dwm/config.h
static const unsigned int borderpx = 1; /* 窗口边框大小,为0时无边框 */
static const char col_gray1[] = "#000000"; #状态条底色
static const char col_gray2[] = "#FFFFFF"; #当static const unsigned int borderpx不为0时,非活动窗口外边框颜色
static const char col_gray3[] = "#39C5BB"; #当前非活动的title字体颜色
static const char col_gray4[] = "#7FFF00"; #当前活动的title字体颜色
static const char col_cyan[] = "#696969"; #title底色
static const char *colors[][3] = {
/* fg bg border */
[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
[SchemeSel] = { col_gray4, col_cyan, col_cyan },
};
3) 安装slstatus工具
slstatus也是suckless开发的工具,它可以理解为是窗口管理器的状态监视器,能使用WM_NAME或stdin填充状态栏。
$ git clone https://git.suckless.org/slstatus
$ cd slstatus
$ sudo make clean install #编译安装
$ sudo vim ~/.xinitrc #在exec dwm 前将slstatus设置为开机启动
fcitx5 -d &
xrandr --output Virtual-1 --mode 1920x1080 --rate 60.00
feh --bg-max --randomize /usr/share/backgrounds/archlinux/*
exec slstatus &
exec dwm
slstatus工具默认只显示日期和时间,如果我们希望在状态栏添加系统常用的监视信息,则需要修改slstatus的配置文件,并重新编译和安装
$ sudo vim config.h
static const struct arg args[] = {
/* function format argument */
{ run_command, " %s |", "uname -r | awk -F - '{print $1}'" },
{ disk_free, " %s |", "/" },
{ cpu_perc, " %s%% |", NULL},
{ ram_used, " %s |", NULL},
{ run_command, " %s |", "amixer sget Master | awk -F\"[][]\" '/Left:/{print $2}'"},
{ run_command, " %s |", "amixer sget Capture | awk -F\"[][]\" '/Left:/{print $2}'"},
{ datetime, " %s", "%F %T" },
};
$ make && sudo make clean install #重新编译和安装
四、声音调节
[hollowman@hollowman dwm]$ amixer sset Master toggle #静音/关闭静音
[hollowman@hollowman dwm]$ amixer sset Master 5%+ unmute #音量+5%
[hollowman@hollowman dwm]$ amixer sset Master 5%- unmute #音量-5%
五、笔记本电脑屏幕亮度调节
sudo pacman -S light