前言

如果你是台式电脑或者电脑的麦克风很烂,一说话就炸麦,这些硬件层面的问题降噪软件是无法解决的,要想解决就要从硬件层面莱解决,但是为了这个买个麦克风就有一点太那什么的了,如果可以使用已有的东西来利用那就很好了,这几天我在github就看到了一个项目-micyou:可以把你的手机麦克风变成你的电脑麦克风的软件,通过 Wi-Fi 或 USB (ADB/AOA) 连接

安装

micyou多端适配,支持linux和windows等等,如果你是arch你可以直接使用aur仓库来安装(需要yay或paru):
yay -S micyou-bin

如果是其他就请在发布页面下载:
https://github.com/LanRhyme/MicYou/releases

除了安装本体还需要安装adb才可以使用,adb也就是安卓调试桥,是一种功能多样的命令行工具,可与设备进行通信,详细介绍查看:
https://developer.android.com/tools/adb?hl=zh-cn

如果你使用的是linux,那主流的发行版仓库都是有adb的包的,这里已arch为例:
sudo pacman -S android-tools

其他细节查看micyou官方文档:
https://micyou.top/docs/quick-start

使用

安装好软件后打开,因为是图形化界面,所以也没有什么难操作的,只需要点几下就可以连接了,只需要确保端口一样和在同一个网络环境就可以了,这里以usb连接为例,把数据线(不是充电线)插上电脑和手机,在手机弹出是否允许电脑usb调试时点击永远同意,然后在电脑端点击连接后在点击手机端的连接就可以连接上了,然后就可以在比如obs或其他需要麦克风的软件来使用了,这里以obs为例,打开obs,在混音器模块选择麦克风右键选择设置,在设备一栏选择mic开头的,然后确定就可以使用手机麦克风来录音了,这里也十分感谢作者,让我可以在不用花钱的情况下提升麦克风声音质量,其他问题查看官方文档:
https://micyou.top/docs/faq

前言

nvim(neovim),一个一款基于Vim的文本编辑器,你可以理解为lua版的vim,因为nvim可以使用lua语言来配置,支持lua让nvim的启动速度变得更快,所以现在主流都是选择nvim来作为文本编辑器,那么本篇博文我将会教你如何配置nvim和安装插件,如果你连vim怎么退出都不会我建议你先看看官方文档(-:

安装nvim

archlinux直接使用包管理pacman安装:
sudo pacman -S neovim

新建配置文件

nvim我建议是不要把所以配置都写在一个文件下,不然在时间一长绝对会乱死,在.config目录下新建nvim文件夹:
mkdir .config/nvim

在nvim目录下新建init.lua文件(类似于vimrc)
touch init.lua

在安装插件之前我们需要先配置一些nvim本身,所以先不创建lua文件夹,因为那是插件管理器和插件的文件夹,那么我们打开init.lua
为了方便所以把vim.opt(类似:set)局部变量opt
local opt = vim.opt

行号在敲代码的时候十分重要所以我们需要开启
开启绝对行号
opt.number = true
开启相对行号
opt.relativenumber = true

在敲代码时如果代码被包裹(折行)了,也就是在当前行没有显示的内容自动到下一行了,如果是阅读文章这没有什么关系,但如果是敲代码的这就会破坏结构,所以如果不是阅读文章一般是关闭的
opt.wrap = false

在使用编辑器的时候我们可以高亮光标(高亮当前行或列)来更快清楚当前行数
开启高亮显示当前行
opt.cursorcolumn = true
开启高亮显示当前列(两个一起形成十字架,来驱除报错(-:)
opt.cursorline = true

在搜索的时候,为了方便所以建议是关闭大小写敏感的
opt.ignorecase = true
opt.smartcase = true

在默认的nvim中的剪贴板是不同步系统剪贴板的,所以我们需要设置同步
opt.clipboard:append("unnamedplus")

完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
local opt = vim.opt
--行号
opt.relativenumber = true
opt.number = true
--防止包裹
opt.wrap = false
--十字架光标
opt.cursorline = true
opt.cursorcolumn = true
--启用鼠标
opt.mouse:append("a")
--搜索
opt.ignorecase = true
opt.smartcase = true
-- 系统剪贴板
opt.clipboard:append("unnamedplus")

安装插件管理器

虽然现在nvim有原生的插件管理器,但是我还是更习惯使用Packer或Lazy,不过Packer已经过时了,现在主流选择都是Lazy,使用我已Lazy为例,那么首先我们需要新建文件夹lua再在里面新建config文件夹来存放Lazy的文件
mkdir lua && mkdir lua/config

在lua/config目录下新建lazy.lua文件后打开写入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)

-- Make sure to setup `mapleader` and `maplocalleader` before
-- loading lazy.nvim so that mappings are correct.
-- This is also a good place to setup other settings (vim.opt)
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"

-- Setup lazy.nvim
require("lazy").setup({
spec = {
-- import your plugins
{ import = "plugins" },
},
-- Configure any other settings here. See the documentation for more details.
-- colorscheme that will be used when installing plugins.
install = { colorscheme = { "habamax" } },
-- automatically check for plugin updates
checker = { enabled = true },
})

再回到lua目录下新建plugins文件夹后在里面新建core.lua,用来指定需要安装的插件(作者名/插件名)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
return {
--主题
{ "ellisonleao/gruvbox.nvim" },
--插件管理器(必须)
{ "folke/lazy.nvim" },
--状态栏
{
'nvim-lualine/lualine.nvim',
dependencies = { 'nvim-tree/nvim-web-devicons' }
},
--提供缩进参考线
{
"lukas-reineke/indent-blankline.nvim",
main = "ibl",
---@module "ibl"
---@type ibl.config
opts = {},
}


}

之后再回到init.lua引用lua目录下的文件,在init.lua添加:

1
2
3
4
5
6
7
8
9
10
11
12
require("config.lazy")
require("plugins.core")
require("ibl").setup()

require('lualine').setup({
options = {
theme = 'gruvbox',
component_separators = { left = '|', right = '|' },
section_separators = { left = '', right = '' },
globalstatus = true,
},
})

保存之后在进入就会黑屏一会,因为这个时候nvim在下载插件管理器,之后就会弹出一个lazy的窗口来下载安装插件,安装好就可以使用了

不过还有一个主题没有启用,我们在init.lua文件添加:

1
2
3
4
5
--外观
opt.termguicolors = true
vim.o.background = "dark" -- or "light" for light mode
vim.cmd([[colorscheme gruvbox]])

这样nvim就基本配置好了

参考资料

lazy官方文档:
https://lazy.folke.io/
nvim官方文档:
https://neovim.io/doc/
B站技术蛋老师的视频:【全程讲解】Neovim从零配置成属于你的个人编辑器
https://www.bilibili.com/video/BV1Td4y1578E/?spm_id_from=333.337.search-card.all.click&vd_source=df8b0e10736531b80015676e74f67bc7

前言

微信,一个在国内十分重要的聊天软件,可以说在国内没有微信是寸步难行了,而微信有一个缺点就是不能在两个设备长期登录,对于一些有备用机的人就很不友好,因为备用机竟然连微信信息都看不了,在一些场景下就很不方便了,不过如果你的备用机是root过的,那么事情就好办了,只需要利用一个lsp模块就可以实现微信手机双登,不过在博文开始之前我还是有必要说明一下:

本博文仅提供教程,在实际操作之前请仔细考虑,如果账号被封请自负!

在实际操作之前一定要仔细考虑清楚,否则后果自负!

重要的话讲三遍,在实际操作之前一定要仔细考虑清楚,否则后果自负!

下载

LSPosed框架(注:原版的lsp已经停止更新,最高安卓支持版本为安卓14,如果高于安卓14则需要下载第三方版本)
原版
https://github.com/LSPosed/LSPosed
JingMatrix版(现改名叫Vector不叫LSPosed)
https://github.com/JingMatrix/Vector

除了上面两个版本,还有一个it版(闭源版)的LSPosed框架,不过我是不太建议使用这个版本的

shamkio(防检测)
https://github.com/LSPosed/LSPosed.github.io/releases

隐藏应用列表(防微信监测)
https://github.com/Dr-TSNG/Hide-My-Applist

WeChatTablet(微信双开模块,支持8.0.40以上)
https://github.com/Xposed-Modules-Repo/top.hookvip.wxtablet

配置

  1. 面具设置
    打开面具主页的设置,点击配置排除列表,选择微信让它被排除

  2. LSPosed配置
    打开面具,在模块页面安装LSPosed和shamkio再在主页点击设置开启zygisk然后重启

  3. 隐藏应用列表配置
    模块和应用的安装好后,打开LSPosed框架,在模块页中点击隐藏应用列表,点击启用模块,勾选系统框架(必须)然后是微信,勾选完成后重启让模块生效,重启后打开隐藏应用列表,选择模版管理,点击创建黑名单(白名单是勾选允许访问的应用,黑名单是勾选不让访问的应用,推荐使用黑名单),编辑那些应用不可见,也就是一些像面具,lsp,模块应用的东西,勾选完成编辑应用于那些应用,选择微信后给模板设置一个名字保存,在到主界面看看模块有没有激活就可以了

  4. WeChatTablet配置
    打开LSPosed的模块页面,点击WeChatTablet,点击启用模块,勾选微信(大于8.0.40),在把微信强行停止重进,不出意外的话你的微信在登录页面和要一个手机和平板同时登录的选择,点击这个选项即可双登微信了

前言

提到linux玩游戏,你可能会想到用steam的Proton来下载游玩游戏,这也是主流的官方的方法,但是steam很多优秀的游戏都是要钱的,虽然这些开发者的付出的确值得拥有这些钱,但是对于一个口袋比脸都干净的人来说就是心有力而力不足了,所以只能下载破解游戏,也就是学习版和盗版,不过大部分盗版游戏平台都是只有windows端的,一些游戏是有原生linux版的,但是下载网站没有只能用wine来套个兼容层来运行,这样性能就下降了,对于一些配置低电脑就不友好了,所以我这篇博文就分享linux破解游戏的下载网站,随便分享一些游戏推荐

声明:本文仅作技术研究与个人体验分享,不构成使用建议。相关操作可能违反软件许可协议或平台规则,请读者自行判断风险并承担后果,建议有条件的话优先购买正版/支持官方渠道。

下载网站-rutracker

Rutracker.org(原Torrents.ru)是俄罗斯最大的BT服务器,也是全球知名的盗版资源下载网站,里面的盗版资源十分丰富,其中就包含linux破解游戏,不过这些资源很多都是出自另一个游戏平台-GOG.com,其中里面就有很多对Linux支持游戏,而且还可以直接下载到本地,没有Steam那种恶心的验证文件,游戏运行时不会联网读取验证,也不会在后台检查你的账户,就这一点就吊打使用游戏平台,不用像steam一样要把那个臃肿的客户端挂在后台才可以进入游戏,所以如果有条件可以在GOG平台来购买下载游戏,让我们把DRM-Free(无数字版权管理)延续下去,好了扯远了回归正题,下面是linux破解游戏相关主题链接:
https://rutracker.org/forum/viewforum.php?f=1992

然后因为这个网站是bt下载网站,所以需要使用bt下载器来下载,比如# qbittorrent,配置和使用参考之前的博文:
https://aidens-fox.codeberg.page/posts/82f2ef74.html

安装游戏

因为大部分游戏都是gog平台的,安装方法基本一样,把下载好后的文件解压,在那个目录下会有一个sh脚本,具体名称看下载是的简介什么,然后给那个脚本提权
sudo chmod +x 脚本.sh

然后./脚本.sh
就会弹出一个安装界面(图形化),只需要选择好安装的地方就好了,安装完成cd到那个目录下,给一个叫start.sh的脚本提权
sudo chmod +x start.sh

然后./start.sh
就可以游玩游戏了

推荐游戏

Project Zomboid(僵尸毁灭工程)
一个2.5d的僵尸末日模拟游戏,游戏十分硬核,你要四处搜寻食物、搜刮物资、建造防御工事,并竭尽全力地生存下去,僵尸无处不在,如果你被你的角色压力很大,可以在外面按Q使用解毒剂(-:
下载链接:
https://rutracker.org/forum/viewtopic.php?t=5231547

结尾

最后还是有说一句,如果可以一定要支持那些游戏作者,盗版游戏给了俺们体验的机会,这里引用马库斯·佩尔松(Minecraft创始人)说的”去玩盗版吧。如果以后你手头宽裕了,并且依然喜欢它,再买也不迟”

前言

如果你使用dwm这个窗口管理器,那你肯定知道st,一个短小精悍的终端,也是dwm的默认终端,是suckless社区开发的终端,整体十分轻便快捷,但是默认的st十分简单,简单到连历史翻页都没有,不过这些都是可以通过打补丁的方式来扩展和自定义你的st,所以本篇博文我会教你从零开始配置一个短小精悍的终端-st

下载

首先我们肯定有先把他下载下来,我们使用git工具把他克隆到本地:
git clone https://git.suckless.org/st

克隆完成进入该目录,可以看到很多文件,我们主要修改的是config.def.h文件,虽然在第一次编译安装后产生的config.h也可以配置st,但是很多补丁在添加快捷键和变量时都是修改config.def.h文件的,如果修改config.h来配置,那每次打好补丁都要自己手动添加快捷键什么的也太麻烦了,相比之下直接修改config.def.h文件就比较方便了,但是需要注意的是,st在应用配置时是使用config.h的,所以在修改好config.def.h后记得执行rm -rf config.h把之前的配置删除,比如编译安装后还是之前的配置,那我们先不着急修改配置,我们先下载补丁,因为没有补丁的st能修改的也就几个

打补丁&补丁推荐

那么我们先在该st目录下新建一个叫patches的文件夹,方便以后的补丁管理,不然你总不能把补丁直接下载到目录下面吧,那得有多乱,我们使用命令新建文件夹:
mkdir patches

文件夹创建好后我们就要下载补丁了,不过在此之前你也可以试试我的st配置(st配置在文件st里):
https://github.com/Aidens-fox/dwm

  1. st-font2
    一个可以添加备用字体的补丁,因为我英文文喜欢JetBrainsMono字体,中文布局喜欢Sarasa Mono SC(更纱黑体),但是默认st只支持一个字体这个插件很好的解决了这个问题
    下载链接: https://st.suckless.org/patches/font2/
    因为补丁是会更新版本的,所以我就直接贴出下载页面了,我们只需要选择新版本然后鼠标右键选择从链接另存为文件,选择刚才创建的patches文件夹,下载完成后直接使用patch命令来打补丁:
    patch < patches/st-font2-0.8.5.diff
    打好后看看有没有产生config.def.h.rej,如果有就说明要手动添加或删除一些代码,我们打开config.def.h配置font2:
1
2
3
4
5
6
7
// 默认字体
static char *font = "JetBrainsMono Nerd Font:pixelsize=30:antialias=true:autohint=true";
// 备用字体
static char *font2[] = {
"Sarasa Mono SC:pixelsize=30:antialias=true:autohint=true",
"Noto Color Emoji:pixelsize=30:antialias=true:autohint=true",
};

修改完成后在编译安装(如果你在打补丁之前编译安装了,记得把config.h删除了,然后建议每个补丁安装配置完成后都编译安装看看有没有什么问题)
sudo make clean install

  1. st-colorschemes
    这个补丁添加了多种配色方案,只需要使用默认的alt+1~8即可切换配色方案,在原版的st只有一个很刺眼的配色(个人),没有Gruvbox那种柔和的感觉
    下载链接:https://st.suckless.org/patches/colorschemes/
    选择完成后还是使用patch命令来打补丁
    patch < patches/st-colorschemes-0.8.5.diff
    打好后看看有没有产生config.def.h.rej,如果有就说明要手动添加或删除一些代码,我们打开config.def.h配置colorschemes,主要是配置默认的配色方案
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static const ColorScheme schemes[] = {

// Gruvbox dark (默认配色方案)
{{"#282828", "#cc241d", "#98971a", "#d79921",
"#458588", "#b16286", "#689d6a", "#a89984",
"#928374", "#fb4934", "#b8bb26", "#fabd2f",
"#83a598", "#d3869b", "#8ec07c", "#ebdbb2",
[256]="#ebdbb2", "#555555"}, 15, 0, 256, 257},

// Alacritty (dark)
{{"#1d1f21", "#cc6666", "#b5bd68", "#f0c674",
"#81a2be", "#b294bb", "#8abeb7", "#c5c8c6",
"#666666", "#d54e53", "#b9ca4a", "#e7c547",
"#7aa6da", "#c397d8", "#70c0b1", "#eaeaea",
[256]="#cccccc", "#555555"}, 7, 0, 256, 257},

...

};

修改完成后在删除config.h文件来编译安装看看有没有问题:
sudo make clean install

  1. scrollback-reflow-standalone
    这个补丁集成了集成历史的 st 的独立滚动回滚和回流实现存储、鼠标滚动、选择处理和调整回流大小统一
    下载链接:https://st.suckless.org/patches/scrollback-reflow-standalone/
    使用patch命令来打补丁:
    patch < patches/st-scrollback-reflow-standalone-extended-0.9.3.diff
    打好后看看有没有产生config.def.h.rej,如果有就说明要手动添加或删除一些代码,修改完成后在删除config.h文件来编译安装看看有没有问题:
    sudo make clean install

  2. copyurl
    这个补丁用于复制URL,默认快捷键alt+l,有多个版本可下载,根据自己需求下载
    下载链接: https://st.suckless.org/patches/copyurl/
    使用patch命令来打补丁:
    patch < patches/st-copyurl-20190202-0.8.1.diff
    打好后看看有没有产生config.def.h.rej,如果有就说明要手动添加或删除一些代码,修改完成后在删除config.h文件来编译安装看看有没有问题:
    sudo make clean install

  3. clipboard
    这个插件为st添加了更现代的复制粘贴快捷键,也就是ctrl+c和ctrl+v
    下载链接:https://st.suckless.org/patches/clipboard/
    使用patch命令来打补丁:
    patch < patches/st-clipboard-0.8.3.diff
    打好后看看有没有产生config.def.h.rej,如果有就说明要手动添加或删除一些代码,修改完成后在删除config.h文件来编译安装看看有没有问题:
    sudo make clean install

前言

yt-dlp是一个视频下载器,可以下载很多网站的视频,比如youtube,BiliBili等等,详细可下载网站请查看仓库说明,不过直接用yt-dlp 'URL'大概率是下载不了的,会提示需要登录验证,因为youtube近年来不断加强反爬机制,运气好换一个干净一点ip就可以下载,但是很多情况下还是要登录验证,但是下载器怎么登录?所以就需要导入cookies,不过在此之前我们还需要下载一个东西-Deno

声明:本文仅作技术研究与个人体验分享,不构成使用建议。相关操作可能违反软件许可协议或平台规则,此工具请勿用于侵犯版权内容

在yt-dlp文件夹里添加Deno

Deno是一个JavaScript Runtime ,因为youtube近年来不断加强反爬机制,所以单单导入cookies还是无法下载的,所以需要添加Deno,项目链接:
https://github.com/denoland/deno/releases

在发布页面选择最新版,下载deno-x86_64-pc-windows-msvc.zip,在把它解压到yt-dlp的文件里

cookies是什么?

cookies是你在浏览网站时的时候由网站服务器存在你的计算机文件,用来记录一些偏好设定和跟踪什么的,而这其中就包含一些登录信息,而这些正好可以解决yt-dlp下载youtube视频要求登录验证问题,我们只需要把将cookie传递给yt-dlp就可以下载了

cookies.txt 属于敏感文件,请勿公开展示或泄露

怎么将cookie传递给yt-dlp

传入方法有两个,第一个就是直接从浏览器提取cookie,只需要输入:
yt-dlp --cookies-from-browser chrome 'URL'
chrome部分根据自己使用的浏览器名称修改

第二个就是手动传递cookie,因为第一个方法对于我来说不太适用,所以使用手动导入就解决了我的问题,不过在下载之前我们需要在浏览器扩展商店下载一个插件来下载网站的cookie,也就是# Get cookies.txt LOCALLY
下载链接

chrome: https://chrome.google.com/webstore/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc

firefox: https://addons.mozilla.org/zh-CN/firefox/addon/get-cookies-txt-locally/

项目地址: https://github.com/kairi003/Get-cookies.txt-LOCALLY

安装好插件后在你要下载的视频网页打开插件,选择”Export AII Cookies”下载到本地

然后执行命令:
yt-dlp --cookies /path/to/cookies/file.txt 'URL'

如果下载音频视频分离请检查是否存在ffmpeg这个环境变量

这样就可以把视频下载到本地了,其他问题请参考官方文档:
https://github.com/yt-dlp/yt-dlp/wiki/FAQ#how-do-i-pass-cookies-to-yt-dlp

前言

在几个星期前我的邮箱收到github的通知要我添加2FA认证,不然无法在登录,一开始我也没有在意,直到早上我要登录github的时候才发现真的登录不了,要2FA认证才可以,关于这个2FA认证有几个官方的解决方法,专门下载一个软件比如Microsoft Authenticator来添加认证或使用手机号接收验证码,不过手机号没有中国+86的,而我也不可能专门下一个软件来搞认证的,这样做就点太繁琐了,就和国内的某些软件或网页端一样,登录还要使用手机软件扫码,十分恶心,不过我倒是找到了解决方案

浏览器插件解决认证

authenticator是一个浏览器插件,是一次性密码 (OTP) 客户端,可以扫描二维码添加账户这一点即可解决github 2FA认证问题

项目链接:https://github.com/Authenticator-Extension/Authenticator
相关网站:https://authenticator.cc/

使用Authenticator

首先你要在浏览器添加这个插件
chrome:
https://chrome.google.com/webstore/detail/authenticator/bhghoamapcdpbohphigoooaddinpkbai
firfox:
https://addons.mozilla.org/en-US/firefox/addon/auth-helper?src=external-website
edge:
https://microsoftedge.microsoft.com/addons/detail/ocglkepbibnalbgmbachknglpdipeoio
添加完成后把插件打开,选择扫描QR码,这时候就会在当前页面出现一个框选,框选那个码就可以收到验证码,把验证码填入就可以进入了

前言

当你使用git克隆下dwm源代码后进行简单配置修改然后编译安装,在.xinitrc添加exec dwm后启动dwm,你可能会发现这dwm也太干净了,输入确实可以使用,但是可能有一些地方不太喜欢,所以我们可以使用补丁来增强或改善dwm的功能体验,本篇博文将会推荐7个dwm补丁来改善你的dwm体验,你也可以看看我的dwm配置:

https://codeberg.org/Aidens-fox/dwm

补丁介绍

1.pertag

当你打开2个以上的tag时,如果你在其中一个tag使用mod+j等来调整布局,那么在切换到下一个tag时你会发现这个tag的布局和上一个的tag一样,这样的话,如果下一个tag打开浏览器然后一个终端,本来是默认相同宽度的,但因为上一个tag调整了布局,让这个tag失去了刚才的布局,这就有点一些体验了,而pertag可以让tag相互独立,而不是同步更改,由此来提升使用体验

2.restartsig

当你修改完配置编译完成之后,你需要退出重新进入,如果只是偶然修改一些还好,但是如果是需要多次修改就有的麻烦了,退出进入要花时间,而且之前打开的窗口也没用了,也要重新打开,这就和麻烦了,而restartsig可以让你在不退出进入的情况下刷新配置,不过在编译安装之前需要指定快捷键不然可能会报错,像我就是绑定mod+ctrl+q

{ MODKEY|ControlMask, XK_q, quit, {1} },

3.attachaside

我们在打开新窗口时,它会自动抢占“主窗口(Master)”的位置,而原来的主窗口会被挤到右侧的“堆栈区(Stack),如果我们是使用浏览器,然后在打开终端后又打开几个窗口,主窗口早就不在浏览器了,这就很影响使用了,而attachaside可以让新窗口自动到堆栈区,保持当前主窗口不变,如果需要改变主窗口只需要mod+enter就可以切换了

默认:新窗口(N)抢占左侧,原窗口(P)被挤到右侧

1
2
3
4
5
6
7
+-----------------+-------+
| | |
| | P |
| N +-------+
| | |
| | |
+-----------------+-------+

使用补丁:主窗口(P)不动,新窗口(N)出现在右侧堆栈区的顶部

1
2
3
4
5
6
7
8
9
+-----------------+-------+
| | N |
| | |
| P +-------+
| | |
| | |
+-----------------+-------+


4.actualfullscreen

dwm 默认的全屏模式(例如某些浏览器触发的全屏)有时会保留状态栏,或者只是简单地平铺充满。actualfullscreen 可以让当前窗口会真正遮盖住状态栏,并填满整个显示器,而不改变原有的窗口平铺布局,但是在编译之前还是有先设置一些快捷键,不然可能报错

{ MODKEY|ShiftMask, XK_f, togglefullscr, {0} },

5.alwayscenter

在默认的 dwm 中,当你打开一个设置为“浮动”的窗口(比如确认弹窗、或者简单的文件选择框)时,它们通常会出现在屏幕的左上角,十分的反直觉,需要移动鼠标到左上角才可以操作,十分不便,而alwayscenter可以让所有新创建的浮动窗口自动显示在屏幕正中央

6.resizecorners

在默认的 dwm 中,调整浮动窗口大小只能通过点击窗口的右下角来拖拽。这在现代大屏幕或者多窗口操作时显得非常笨拙,resizecorners 补丁打破了这个限制,让你从四个角都能进行缩放

7.systray

在默认的dwm是没有托盘应用这个东西的,在使用过程就会带来一些麻烦,而这个补丁就可以解决这个问题

8.scratchpad

这个补丁可生成或恢复一个浮动终端窗口,在需要一些临时命令时十分有用

前言

本篇博文会带你从零开始安装配置dwm
你也可以看看我的dwm配置,虽然说不是很完美,但是正常使用是没有什么问题的:

https://github.com/Aidens-fox/dwm

配置完成的效果

337
337

下载安装&启动dwm

在安装dwm之前我们需要安装一些必要的软件,比如xorg,编译工具等等
sudo pacman -S base-devel git xorg-server xorg-xinit xorg-xrandr xorg-xsetroot xorg-xset xsel xorg-xkill libx11 libxft libxinerama xwallpaper
我们可以使用git工具来克隆dwm项目
git clone https://git.suckless.org/dwm

其他的比如st,dmenu也需要克隆,不然进入后无法打开终端和软件启动器
st: git clone https://git.suckless.org/st
dmenu: git clone https://git.suckless.org/dmenu

克隆完成后cd到项目目录编译安装dwm(st和dmenu也一样)
`sudo make clean install

编译安装好后我们在.xinitrc文件添加:
exec dwm
保存后只需要用在tty输入startx就可以启动
(注:exec dwm必须放在最后一行,不然无法启动)

配置dwm

我们cd到dwm目录下会发现有很多文件,其中config.def.h是我们修改配置的文件,虽然在第一次编译后产生的config.h文件也可以配置dwm,但是很多补丁添加快捷键都是修改在config.def.h上面,如果直接使用config.h来配置dwm可能就需要手动添加补丁的快捷键了,使用我比较习惯修改config.def.h在rm -rf config.h删除之前旧配置,不然再次编译安装就还是之前的配置

状态栏配置字体和位置&颜色

在默认配置中的状态栏字体是十分丑陋的,中文显示不友好,所有需要修改字体:

1
2
3
4
5
static const char *fonts[]   = {	
"JetBrainsMono Nerd Font:size=15",
"Sarasa Mono SC:size=15",
"Noto Color Emoji:size=15"
};

字体使用更纱黑体和jetbrains,noto
sudo pacman -S ttf-sarasa-gothic noto-fonts noto-fonts-emoji noto-fonts-cjk ttf-jetbrains-mono-nerd

状态栏默认的配色方案可能有一点难看,所有可以更改颜色

1
2
3
4
5
static const char col_gray1[]       = "#282828"; // 背景色
static const char col_gray2[] = "#282828"; // 非激活窗口
static const char col_gray3[] = "#ebdbb2"; // 文字颜色
static const char col_gray4[] = "#ebdbb2"; // 激活窗口边框/文字
static const char col_cyan[] = "#5b623e"; // 选中标签颜色

本配色方案参考gruvbox

tags工作区默认显示的是1234,如果你觉得太普通也可以改成中国数字大写
`static const char *tags[] = { “壹”, “貳”, “叁”, “肆”, “伍”, “陸”, “柒”, “捌”, “玖” };

修改mod键

在dwm中默认是alt为mod键,我本人不太习惯,所以我把它更改为win键
#define MODKEY Mod4Mask

亮度&音量快捷键支持

在config.h中添加下面内容,启用多媒体按键
#include <X11/XF86keysym.h>

调节音量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static const char *up_vol[]   = { "pactl", "set-sink-volume", "@DEFAULT_SINK@", "+10%",   NULL };
static const char *down_vol[] = { "pactl", "set-sink-volume", "@DEFAULT_SINK@", "-10%", NULL };
static const char *mute_vol[] = { "pactl", "set-sink-mute", "@DEFAULT_SINK@", "toggle", NULL };
...

static const Key keys[] = {
...

{ 0, XF86XK_AudioMute, spawn, {.v = mute_vol } },
{ 0, XF86XK_AudioLowerVolume, spawn, {.v = down_vol } },
{ 0, XF86XK_AudioRaiseVolume, spawn, {.v = up_vol } },

...
};


调节亮度(需要安装brightnessctl)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
static const char *brighter[] = { "brightnessctl", "set", "10%+", NULL };
static const char *dimmer[] = { "brightnessctl", "set", "10%-", NULL };
...

static const Key keys[] = {
...

{ 0, XF86XK_MonBrightnessDown, spawn, {.v = dimmer } },
{ 0, XF86XK_MonBrightnessUp, spawn, {.v = brighter } },

...
};


状态栏显示内容

我们可以通过xsetroot -name的方式来让状态栏显示我们需要的内容,在.xinitrc添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
while true; do
light=$(brightnessctl -m | cut -d, -f4)
bat_s=$(< /sys/class/power_supply/BAT0/status)
bat=$(< /sys/class/power_supply/BAT0/capacity)
time=$(date +"󱑂 %Y-%m-%d-(0%u) %H:%M:%S")
audio_raw=$(wpctl get-volume @DEFAULT_AUDIO_SINK@)

if [[ "$audio_raw" == *"[MUTED]"* || "$audio_raw" == *"[NO]"* ]]; then
audio="MUTED"
else
audio=$(echo "$audio_raw" | awk '{print ($2 * 100)"%"}')
fi

if [[ "$(< /sys/class/net/wlp0s20f3/operstate)" == "up" ]]; then
net_icon="*"
else
net_icon="-"
fi

if ss -tln | grep :0000; then #"0000"改成自己的代理端口
proxy_str="+"
else
proxy_str="-"
fi

if [[ "$bat_s" == "Discharging" ]]; then
bat_icon=" "
else
bat_icon=" "
fi

xsetroot -name "[$proxy_str][$net_icon][ $audio][󰌵$light][$bat_icon$bat%][$time]"
sleep 1s
done &

如果你觉得那么多东西塞在.xinitrc很乱,可以创建一个脚本文件,里面写入上面的内容,在.xinitrc只需要循环执行这个脚本就可以了
脚本内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/zsh

light=$(brightnessctl -m | cut -d, -f4)
bat_s=$(< /sys/class/power_supply/BAT0/status)
bat=$(< /sys/class/power_supply/BAT0/capacity)
time=$(date +"󱑂 %Y-%m-%d-(0%u) %H:%M:%S")
audio_raw=$(wpctl get-volume @DEFAULT_AUDIO_SINK@)

if [[ "$audio_raw" == *"[MUTED]"* || "$audio_raw" == *"[NO]"* ]]; then
audio="MUTED"
else
audio=$(echo "$audio_raw" | awk '{print ($2 * 100)"%"}')
fi

if [[ "$(< /sys/class/net/wlp0s20f3/operstate)" == "up" ]]; then
net_icon="*"
else
net_icon="-"
fi

if ss -tln | grep :0000; then #"0000"改成自己的代理端口
proxy_str="+"
else
proxy_str="-"
fi

if [[ "$bat_s" == "Discharging" ]]; then
bat_icon=" "
else
bat_icon=" "
fi

xsetroot -name "[$proxy_str][$net_icon][ $audio][󰌵$light][$bat_icon$bat%][$time]"

.xinit文件写入

1
2
3
4
5
while true; do
/home/用户名/脚本.sh
sleep 1s
done &

或者你也可以使用例如slstatus这样的软件,配置参考「slstatus 状态栏」使用参考
在suckless里git克隆下来源代码:
git clone https://git.suckless.org/slstatus

克隆完成cd进入该目录,使用文本编辑器打开config.def.h文件,在下面的static const struct arg args[]部分添加:

1
2
3
4
5
6
7
static const struct arg args[] = {
/* function format argument */
{ cpu_perc, "[CPU:%s%%]", NULL },
{ ram_perc, "[RAM:%s%]", NULL },
{ vol_perc, "[Volume:%s%]", "/dev/mixer" },
{ datetime, "%s", "[󰞌%Y-%m-%d-(0%u) %H:%M:%S]" },
};

添加完成后保存再使用make编译安装:
sudo make clean install

然后在.xinitrc里添加
slstatus &

其他类似的软件自行google

自启动软件

我们编辑.xinitrc文件
在里面添加你需要自启动的软件,比如fcitx5
exec fcitx5 &

打补丁

补丁是dwm的一大特色,我们可以到https://dwm.suckless.org/patches/去找补丁,然后在dwm目录下新建一个叫patches的文件夹
mkdir patches
把你想要的补丁下载下来,如attachaside,再安装补丁
patch < patches/dwm-xxxxxxx.diff
卸载补丁
patch -R < patches/dwm-xxxxxxxxx.diff

不过在打补丁的过程中可能会出现报错,这个时候就要查config.def.h.rej和dwm.c.rej文件来看看需要删除什么和添加什么,然后在重新编译基本就可以解决问题了

解决dwm浏览器无法弹出文件对话框

参考https://forum.archlinuxcn.org/t/topic/13788
把以下命令添加到.xinitrc文件中

1
dbus-update-activation-environment --systemd DISPLAY

关闭自动熄屏

在.xinitrc添加
xset s off -dpms

添加一个壁纸

安装xwallpaper后在.xinitrc添加
xwallpaper --zoom 壁纸.png

解决火焰截图无法截屏

参考https://bbs.archlinux.org/viewtopic.php?id=313917
在/.config/flameshot/flameshot.ini文件添加

1
2
[General]
useX11LegacyScreenshot=true

前言

字幕可以增加视频的可读性,也可以给一些特殊人群一些照顾,在windows上有卡卡字幕助手,而在linux上也有一个软件,也就是whisper

特点

whisper没有图形化界面,所以可以减少不必要的性能开销,而且whisper可以自由选择语言模型,可以说对老旧设备十分友好

下载

在archlinux上我们可以使用aur仓库里的软件包来安装
yay -S whisper.cpp-git

除了下载软件本体还需要下载语言模型
https://huggingface.co/ggerganov/whisper.cpp/tree/main

在下载模型的时候选择适合的模型,经过本人测试small模型准确率相对较高,而且时间也可以接受,本人使用笔记本,性能教差,所以只能使用较低级的模型,如果追求高质量,请下载更高级的模型

使用

我们需要先使用ffmpeg提取视频音频
ffmpeg -i xxx.mp4 xxx.mp3

如何使用whisper制作字幕文件
whisper.cpp -m ggml-tiny-q5_1.bin -f ss.mp3 -l zh -osrt

完成后会在当前目录创建.srt文件,我们可以先使用emacs,nvim等编辑器窗口有没有文字错误
在检查完成后就可以导入到kdenlive里使用

0%