首页 > 系统相关 >Archlinux + Dwm 配置流程

Archlinux + Dwm 配置流程

时间:2022-11-07 22:56:37浏览次数:73  
标签:XK const 流程 Archlinux static MODKEY Dwm col dwm

本着学习C的态度来了解dwm,本身作为一个i3wm的追崇者,与dwm会擦出怎么样的火花呢?

下载安装dwm

archlinuxcn源配置

编辑/etc/pacman.conf文件,添加bfsu的archlinuxcn源

sudo vim /etc/pacman.conf
---------------------------------------------
[archlinuxcn]
Server = https://mirrors.bfsu.edu.cn/archlinuxcn/$arch
sudo pacman -Sy archlinuxcn-keyring

安装dwm所需要的基本包

sudo pacman -S xorg xorg-xinit feh pcmanfm compton xfce4-terminal

下载dwm

可以建立单独的目录用于管理dwm相关的配置,也可以像我一样直接把相关的仓库放在家目录下

git clone https://git.suckless.org/dwm
git clone https://git.suckless.org/st
git clone https://git.suckless.org/dmenu

首次编译dwm并配置启动dwm

分别进入到自己克隆的这三个仓库中执行:

sudo make clean install
# 需要注意的是在这个仓库下操作需要使用sudo权限

配置xinit来启动dwm:

首先将xinit的配置文件拷贝一份到家目录下:

cp /etc/X11/xinit/xinitrc .xinitrc

然后编辑.xinitrc文件:

删除掉最后五行,这五行我们不会用到,直接删除即可,然后在最后加上exec dwm,上图:

image-20221010062136112

配置dwm

快捷键更改

尤其对于i3wm的老用户来说,这个太必要了。比如我更习惯用win+q去关闭窗口、习惯用alt+enter来打开终端等等,这些都是需要配置的。

首先进入dwm仓库,编辑config.h文件:

cd dwm
sudo vim config.h
-------------------------------------------
// 首先找到 key definitions ,我个人比较习惯设置两个mod键,
// win键更趋向于一些窗口管理
// alt键更趋向于一些动作
/* key definitions */
#define MODKEY1 Mod1Mask    // alt键
#define MODKEY Mod4Mask    //win键
#define TAGKEYS(KEY,TAG) \
	{ MODKEY,                       KEY,      view,           {.ui = 1 << TAG} }, \
	{ MODKEY|ControlMask,           KEY,      toggleview,     {.ui = 1 << TAG} }, \
	{ MODKEY|ShiftMask,             KEY,      tag,            {.ui = 1 << TAG} }, \
	{ MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      {.ui = 1 << TAG} },

上图:

image-20221010063134475

更改几个常用的快捷键,涉及关闭窗口、打开终端、退出dwm

static const Key keys[] = {
	/* modifier                     key        function        argument */
    /* 打开dmenu win + p */
	{ MODKEY,                       XK_p,      spawn,          {.v = dmenucmd } },
    /* 打开终端 Alt + Enter */
	{ MODKEY1,       	        XK_Return, spawn,          {.v = termcmd } },
	{ MODKEY,                       XK_b,      togglebar,      {0} },
	{ MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
	{ MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
	{ MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
	{ MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
	{ MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
	{ MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
	{ MODKEY,                       XK_Return, zoom,           {0} },
	{ MODKEY,                       XK_Tab,    view,           {0} },
    /* 关闭当前聚焦的窗口 win + p */
	{ MODKEY, 	                XK_q,      killclient,     {0} },
	{ MODKEY,                       XK_t,      setlayout,      {.v = &layouts[0]} },
	{ MODKEY,                       XK_f,      setlayout,      {.v = &layouts[1]} },
	{ MODKEY,                       XK_m,      setlayout,      {.v = &layouts[2]} },
	{ MODKEY,                       XK_space,  setlayout,      {0} },
	{ MODKEY|ShiftMask,             XK_space,  togglefloating, {0} },
	{ MODKEY,                       XK_0,      view,           {.ui = ~0 } },
	{ MODKEY|ShiftMask,             XK_0,      tag,            {.ui = ~0 } },
	{ MODKEY,                       XK_comma,  focusmon,       {.i = -1 } },
	{ MODKEY,                       XK_period, focusmon,       {.i = +1 } },
	{ MODKEY|ShiftMask,             XK_comma,  tagmon,         {.i = -1 } },
	{ MODKEY|ShiftMask,             XK_period, tagmon,         {.i = +1 } },
	TAGKEYS(                        XK_1,                      0)
	TAGKEYS(                        XK_2,                      1)
	TAGKEYS(                        XK_3,                      2)
	TAGKEYS(                        XK_4,                      3)
	TAGKEYS(                        XK_5,                      4)
	TAGKEYS(                        XK_6,                      5)
	TAGKEYS(                        XK_7,                      6)
	TAGKEYS(                        XK_8,                      7)
	TAGKEYS(                        XK_9,                      8)
    /* 退出dwm win + shfit + c */
	{ MODKEY|ShiftMask,             XK_c,      quit,           {0} },
	/* klelee's volume config */
	{ MODKEY,			XK_F1,	   spawn,	SHCMD("amixer sset Master toggle") },
	{ MODKEY,			XK_F2,	   spawn,	SHCMD("amixer sset Master 5%- ") },
	{ MODKEY,			XK_F3,	   spawn,	SHCMD("amixer sset Master 5%+ ") },
    /* 截屏  需要安装flameshot */
	{ MODKEY1,			XK_p,	   spawn,	SHCMD("flameshot gui") },
	{ MODKEY,                       XK_minus,  setgaps,        {.i = -1 } },
	{ MODKEY,                       XK_equal,  setgaps,        {.i = +1 } },
	{ MODKEY|ShiftMask,             XK_equal,  setgaps,        {.i = 0  } },
};

上图:可能还有一些配置项下面图片没有highlight,但是后面会说到

image-20221010064126843

设置默认终端为xfce4-terminal,这玩意儿是真的好用呀!!!

同样是编辑config.h,找到commands模块,修改termcmd的值为xfce4-terminal即可:

/* commands */
static const char *dmenucmd[] = { "dmenu_run", "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
static const char *termcmd[]  = { "xfce4-terminal", NULL };

上图:

image-20221010064421018

设置壁纸和透明度

可乐有一个background的仓库,直接克隆使用,可乐yyds

mkdir ~/Pictrues  # 新装的archlinux是没有home下对应的这些目录的,需要重新建立
cd ~/Pictures
git clone https://gitlink.org.cn/klelee/background.git
cd background && rm -rf README.md

那么第一步,好看的图片有了,接下来设置启动的时候随机选择一张好看的图片作为壁纸:

vim .xinitrc
-----------------------------------------
			......
# 在exec dwm之前添加
compton -b  # 这个是设置透明的
feh --bg-fill --randomize ~/Pictures/background/*  # 这个是设置随机壁纸的哦
			......
exec dwm

配置中文输入法

Archlinux安装配置fcitx5 可乐yyds

安装俩常用的软件

sudo pacman -S yay  # 不要问我为什么不用paru
# 个人习惯用edge,如果你不喜欢就装chrome
yay -S microsoft-edge-stable-bin visual-studio-code-bin
yay -S google-chrome

Tag样式配置

也就是每一个workspace的标签样式,首先需要安装图标字体,让系统能够显示图标:

sudo pacman -S ttf-nerd-fonts-symbols-2048-em

然后刚刚安装的浏览器就派上用场了(那安装vscode是干嘛的?问就是怕你不会用vim),浏览器进入nerd-fonts的官网 ,进来之后大概长这个样子,然后点击中间的icons:

image-20221010070155441

接下来在这里输入,你想要的图标,比如:terminal,然后选一个喜欢的图标,点击图标右上角弹出的Icon,就成功的将当前图标复制到剪贴板了

image-20221010070302838

然后,不管你用vim还是vscode打开dwm/config.h文件,把你的图标复制到这个位置哦:

image-20221010070634947

然后退出重新编译,再次进入dwm的时候,图标就变了呢

字体配置

上面配置完图标会不会觉得图标很虚,看着看着就觉的字体也很虚?没错,是你的字体太小了,哈哈哈。然后,不管你用vim还是vscode打开dwm/config.h文件,编辑下面的这个数组:

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"}; // 这里没有换行昂,如果你看到换行了,说明你屏幕和你一样小

状态栏配置

先安装这个模块需要的包:sudo pacman -S alsa-utils alsa-firmware

然后克隆suckless搞的状态栏:git clone https://git.suckless.org/slstatus

先进行一些简单的配置吧:

cd slstatus
vim config.h
--------------------------------
static const struct arg args[] = {
/* function format          argument */
// { run_command, " %s|", "uname -r | awk -F \"-\" '{print $1}'" },
{ disk_free, "dsk %s|", "/" },
{ cpu_perc, "cpu %s%%|", NULL },
{ ram_perc, "mem %s%%|", NULL },
{ run_command, "vol %s|", "amixer sget Master | awk -F \"[][]\" '/Left:/{print $2}'" },
{ run_command, "spk %s| ", "amixer sget Capture | awk -F \"[][]\" '/Left:/{print $2}'" },
{ datetime, "%s",           "%b_%d %T" },
};

以上进行了一下简单的配置,也可以使用nerd fonts图标来替换上述提到的dsk、cpu、mem、vol等。

然后,重新编译sudo make clean install

设置slstatus自动启动

vim .xinitrc
---------------------------
# 在exec dwm的上一行添加
exec slstatus

重新进入dwm之后生效

音量调节

上面状态栏只是能显示音量了(也有可能不能显示,哈哈哈),但是还不能调节音量,接下来进行配置

不管你用vim还是vscode打开dwm/config.h文件,在下面的数组中添加下面几行:然后就可以使用F1进行静音和取消静音了,分别用F2和F3来降低音量和升高音量

static const Key keys[] = {
	/* modifier                     key        function        argument */
    ... ...
    /* 退出dwm win + shfit + c */
	{ MODKEY|ShiftMask,             XK_c,      quit,           {0} },
	/* klelee's volume config */
	{ MODKEY,			XK_F1,	   spawn,	SHCMD("amixer sset Master toggle") },
	{ MODKEY,			XK_F2,	   spawn,	SHCMD("amixer sset Master 5%- ") },
	{ MODKEY,			XK_F3,	   spawn,	SHCMD("amixer sset Master 5%+ ") },
    ... ...
};

这部分可能会遇到问题,比如这个时候你的默认音响不对,那么Master就不能使用。我就懒得写在这里面了,遇到问题要多百度,嘿嘿:amixer: Unable to find simple control 'Master',0

电源管理

我的方案简单粗暴:直接安装xfce4-power-manager

安装:sudo pacman -S xfce4-power-manager

自动启动:

vim .xinitrc
--------------------------------
# 在exec slstatus的上一行添加:
xfce4-power-manager &

重启生效,后面可以使用xfce4-power-manager -c来打开它的配置UI,里面的配置大家都认识,不认识的查牛津字典

状态条颜色配置

不管你用vim还是vscode打开dwm/config.h文件,找到下面这几行,对着改你喜欢的颜色:颜色表 <---- 点击挑色

static const char col_gray1[]       = "#9b95c9";    // 状态条底色
static const char col_gray2[]       = "#444444";    // 当static const unsigned int borderpx不为0时,非活动窗口外边框颜色
static const char col_gray3[]       = "#bbbbbb";    // 当前非活动的title字体颜色
static const char col_gray4[]       = "#eeeeee";    // 当前活动的title字体颜色
static const char col_cyan[]        = "#f391a9";    // title底色
static const char *colors[][3]      = {
	/*               fg         bg         border   */
	[SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
	[SchemeSel]  = { col_gray4, col_cyan,  col_cyan  },
};

截图

安装flameshot ,一款神级截图软件

sudo pacman  -S flameshot

不管你用vim还是vscode打开dwm/config.h文件,# 在static const Key keys[] 中添加下面这条,后面的截图使用alt+p

static const Key keys[] = {
	/* modifier                     key        function        argument */
    ... ...
    /* 截屏  需要安装flameshot */
	{ MODKEY1,			XK_p,	   spawn,	SHCMD("flameshot gui") },
	... ...
};

系统托盘解决方案

dwm的系统托盘需要打补丁来解决,但是目前版本给的补丁直接合进去一般都会报错,不是和不进去就是合进去编译报错。因此你有两种选择:

  1. 解决编译报错
  2. 手动合入

我选择2

下载补丁:https://dwm.suckless.org/patches/systray/dwm-systray-6.3.diff

diff文件可以用vscode打开,方便复制。对比dwm/config.h 和 dwm/dwm.c 比较差异,然后复制粘贴就可以了。

标签:XK,const,流程,Archlinux,static,MODKEY,Dwm,col,dwm
From: https://www.cnblogs.com/klelee/p/dwm_install.html

相关文章

  • Archlinux配置fcitx5
    fcitx5——Linux中最好用的中文输入法ArchLinux配置fcitx5输入法本文基于archlinux+dwm。其他的桌面环境以及窗口管理器,配置选项差不多。安装基础包fcitx5-im首......
  • ArchLinux安装手册(2022-10-01)
    准备工作镜像下载:北京外国语大学镜像使用ventoy做启动盘:(1)ventoy下载:github下载地址(2)解压运行下载好的ventoy,设备选择准备好的U盘(会清空),然后选择安装即可。......
  • Archlinux安装Picgo配置Typora
    Typora堪称为markdown界的老大哥,其大名我们多有耳闻,所见即所的就是他的特点。但是在日常使用中,也经常会碰到一些特别的需求,比如:希望图片能够上传到云端。怎么将markdown即......
  • memtest86+4.20流程分析
       公版ubuntu自带memtest86+内存测试工具,出于工作需要,分析了其工作流程记录于此。   分析一个陌生的程序,当然得先找入口入口函数,很可惜main()/_start之类的都找到,......
  • SetupDiCallClassInstaller处理流程
      MS将于今年10月推出win10RS3RTM版,并要求OEM厂商的驱动程序必须支持新的D/C/H/U驱动框架(微软爸爸一声令下,苦了我们)。其中的"C"项要求过滤驱动的inf文件必须以扩展I......
  • MySQL_流程控制_分支结构
    1If结构功能:实现简单的双分支语法:IF(表达式1,表达式2,表达式3)执行顺序:如果表达式1成立,则IF函数返回表达式2的值,否则返回表达式3的值应用:任何地方 2case结构情况1......
  • MySQL_流程控制_循环结构
    分类WHILELOOPREPEAT 循环控制:Iterate类似于continue,继续,结束本次循环,继续下一次Leave类似于break,跳出,结束当前所在的循环 1WHILE语法【标签:】WHILE循环条......
  • 基于案例分析 MySQL Group Replication 的故障检测流程
    故障检测(FailureDetection)是GroupReplication的一个核心功能模块,通过它可以及时识别集群中的故障节点,并将故障节点从集群中剔除掉。如果不将故障节点及时剔除的话,一方面......
  • 3d仿真技术在生产工艺流程中的优势
    随着计算机仿真技术、计算机图形学和传感技术的不断发展,虚拟仿真技术越来越多地被应用到各个领域。虚拟仿真是由计算机来模拟现实世界,用户可通过各种传感设备和虚拟世界进......
  • 流程图bpmn
    bpmn流程图官网//引入流程图及汉化方案importModelerfrom'bpmn-js/lib/Modeler'//引入节点属性面板importpropertiesPanelModulefrom'bpmn-js-properties-pane......