Arch Linux安装dwm窗口管理器

2,564 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第22天,点击查看活动详情

窗口管理器是管理桌面上各种窗口的组件,主要功能有:窗口堆叠方式,窗口移动规则等。大多数人接触到的是堆叠式窗口管理器,一个窗口可以叠放在其他窗口之上,调整窗口的主要方式是鼠标。而dwm(Dynamic Window Manager)是suckless开发的一个动态窗口管理器,可以自定义不同窗口的出现规则如平铺或者堆叠,它调整窗口的主要方式是键盘。

同桌面环境一样,dwm也必须有最基本的软件支撑,推荐安装下面的软件:

软件名软件介绍
dwm动态窗口管理器,suckless开发
demu应用程序选择器,suckless开发
st终端模拟器,suckless开发
feh壁纸设置程序
pcmanfm文件管理系统
fcitx5输入法

1.创建一个用户,并赋sudo权限

起手式,就是创建用户,避免用root登录系统。

useradd -m hollowman
usermod -aG adm,wheel hollowman
passwd hollowman
vim /etc/sudoers     #找到 #%wheel ALL=(ALL:ALL) ALL去掉注释
%wheel ALL=(ALL:ALL) ALL

2.安装xorg协议及必要软件

$ sudo pacman -S xorg xorg-xinit 
$ sudo pacman -S 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

4.配置自动启动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

5. 配置dwm

先看下下面的4个基础用法(这里Mod1指的是alt键):
启动dmenu: Mod1 + p ,并在上边出现的工具条中输入你想运行的程序名,按回车。
启动终端st: Mod1 + Shift + enter
切换工作区(1-9): Shift + Mod1 + x
关闭当前窗口: Mod1 + Shift +c
退出 dwm:Mod1 + Shift + q

$ 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动态窗口管理器 
...省略的配置信息.... 

6.安装应用,以火狐为例

sudo pacman -S firefox

但是打开火狐发现有乱码,是因为缺少字体的原因(忘记截图了),安装字体就可以了

7. 安装字体

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  

6.配置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 前添加2行,注意先修改分辨率,否则背景会不全屏。

xrandr --output Virtual-1 --mode 1920x1080 --rate 60.00             #修改显示器屏幕分辨率及刷新率   
feh --bg-max --randomize /usr/share/backgrounds/archlinux/*         #添加背景

exec dwm

效果图

Arch Linux安装dwm窗口管理器 效果图.png