惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
V
V2EX
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
小众软件
小众软件
Vercel News
Vercel News
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
V
Visual Studio Blog
J
Java Code Geeks
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog
B
Blog
美团技术团队
量子位

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
Suckless--极简主义者的Linux世界 - 少数派
2021-11-06 · via 少数派

看DistroTube和Luke Smith的Linux视频时被他们高效简洁而炫酷的桌面与窗口操作惊到了,经过一些小小的研究了解到了Tiling Window Manager以及Suckless系列软件。

本文描述了如何安装Suckless系列软件,以及如何在其dwm窗口管理器下基本生存🪵

Suckless

suckless.org是一个社区,我喜欢称之为“没毛病组织”😂,他们的极简主义哲学是:

软件应该简单、清晰、最小化、可用。

简单是Linux的哲学的核心,该组织认为当今的众多软件过于复杂和缓慢,于是开发了一系列的软件来证实这种普遍现象并不是必须的。这些软件主要面向有一定经验的进阶用户,使每个用户都可以定制自己的实际工作场景workflow。

主要包括以下几个作品:

st(simple terminal),X环境下的终端

dwm,动态窗口管理器

dmenu,用户自定义菜单,程序启动器

surf,浏览器

...

安装与启动

首先准备一个Linux发行版,本文以Garuda KDE Dr460nized演示:

Garuda是一个基于Arch Linux的发行版,下文中提到的一些安装选项亦是基于pacman包管理器,在其他发行版下需要更换为相应的包管理器。

下载几个软件源码到本地:

mkdir ~/suckless
cd ~/suckless
git clone https://git.suckless.com/dmenu
git clone https://git.suckless.com/st
git clone https://git.suckless.com/dwm

suckless软件的一个特点是只提供源码,需要用户自己使用编译安装。某些更轻量级的发行版可能会没有make命令,需要先手动安装相关依赖。

cd ~/suckless/st
sudo make clean install

cd ~/suckless/dmenu
sudo make clean install

cd ~/suckless/dwm
sudo make clean install

三次make命令后几个软件便已成功安装到了系统中。st是dwm环境下的默认终端,dmenu是dwm下的程序启动器,进入dwm之前需要先安装st或dmenu,否则会在dwm中寸步难行。

打开Garuda的默认终端konsole,输入dwm启动。会遭遇dwm: another window manager is already running

Linux发行版与GUI介绍中介绍了WM与DE的关系,这是由于当前处在Garuda的桌面环境中,KDE自己的WM已经在运行,无法打开dwm。

这里需要为dwm编写启动选项,使得在登录时(login manager,Linux的一个软件)启动dwm而不启动KDE桌面环境。

[Desktop Entry]
Encoding=UTF-8
Name=dwm
Comment=Dynamic Window Manager
Exec=/usr/local/bin/dwm
Icon=
Type=Application

将上述内容命名为dwm.desktop保存到/usr/share/xsessions目录下,退出当前用户登录状态来到登录界面。左下角(其他发行版可能在其他位置)出现了选项,选择dwm后输入密码登录。

于是便来到了“没毛病老哥们”提供的极简主义者的Linux世界。

基本操作

    +------+----------------------------------+--------+
    | tags | title                            | status +
    +------+---------------------+------------+--------+
    |                            |                     |
    |                            |                     |
    |                            |                     |
    |                            |                     |
    |          master            |        stack        |
    |                            |                     |
    |                            |                     |
    |                            |                     |
    |                            |                     |
    +----------------------------+---------------------+

dwm的区域分为如上几块,上面是状态栏,包括tags、title以及status;屏幕主要区域分为master与stack区域新打开的窗口会占据master,之前的窗口以栈的方式上下排列在stack区。

下面的列表一些dwm环境下的一些快捷键。

KeybindingAction
SHIFT+ALT+ENTER打开st
SHIFT+ALT+q退出dwm,回到login manager
ALT+p打开dmenu,之后可以输入软件名比如firefox来启动软件
ALT+j/k切换打开的多个window
SHIFT+ALT+n(1-9)移动当前window至tag n(默认9个tags)
SHIFT+ALT+c关闭当前window
ALT+ENTER切换某当前window为master window
ALT+m/t切换当前window为全屏/切换回来
ALT+n(1-9)进入tag n
CTRL+SHIFT+PAGEUP/PAGEDOWNzoom in/zoom out
ALT+btoggle status bar

该如何...

dwm下鼠标几乎变得没有作用,在桌面环境中的点击音量按钮调节系统音量等操作变得不再可行,geek们的做法是使用命令行工具,本节给出一些具体场景下的一种可行操作方式。

浏览图片

命令行安装sxiv,进入图片所在文件夹,输入:sxiv *,可以使用鼠标点击左右切换当前展示图片。

设置壁纸

命令行安装xwallpeper,确定希望设置的图片路径,比如~/.config/wall.png

xwallpaper --zoom ~/.config/wall.png

调节音量

命令行安装pauseaudio,下列命令是几种对音量可能会做的操作:

CommandAction
pactl set-sink-volume 0 +20%音量增加20%
pactl set-sink-volume 0 -20%音量减少20%
pactl set-sink-mute 0 toggle静音切换
pactl get-sink-volume 0获取当前音量值

截图

命令行安装scrot,打开dmenu输入scrotv即可对当前桌面截图保存在当前文件夹。

若想截图特定窗口,可以加-s参数后用鼠标点击想要的窗口。其他具体指令的使用说明见scrot文档。

st体验优化

st的实现只有2000多行C代码,自身的功能非常有限,以至于各种用户“习以为常”的能力它都没有,包括复制/粘贴、滚动等功能都是默认不支持的,毕竟"simple"。

suckless的软件不提供配置文件,所有配置项均在其源码config.def.h中,修改后需要运行sudo cp config.def.h config.h && sudo make clean install重新编译安装。

复制/粘贴

在~/st/config.def.h的ShortCut中新增两行:

{ MODKEY, XK_c, clipcopy,  {.i=0}},
{ MODKEY, XK_v, clippaste, {.i=0}},

重新安装,即可以在st中使用SHIFT+CTRL+c/v来实现复制/粘贴功能。

emoji

st自然也不支持emoji的显示,比如ohmyarch的README.md中有🤣,运行cat README.md会导致st直接crash掉,这里需要一个特定的依赖来解决此问题:

yay -S libxft-bgra

透明化

设置了漂亮的壁纸后将终端做一定程度的透明化是一种视觉上的享受。

命令行安装picom,配置文件写于~/.config/picom/picom.conf

opacity-rule = [
"90:class_g = 'st-256color'"
];
wintypes:
{
normal = { blur-background = true; };
splash = { blur-background = false; };
};
# Fading
fading = false;
fade-in-step = 0.07;
fade-out-step = 0.07;

然而st的自身的源码不支持透明显示,suckless提供了一些patches来增强它的功能,类似于其他软件中的插件。

复制alpha patch diff至st源码目录内,运行patch < st-alpha-0.8.2.diff后依然是重新编译安装。然后运行picom -b即可实现透明效果。

除了alpha外,suckless还提供了其他许多的patches来扩充功能,感兴趣可以继续探索。

dmenu的想象力

在path下的可执行文件均可被dmenu找到并运行,用户可以自行编写shell脚本置于/usr/local/bin文件夹下由dmenu执行。

比如实现一个关机/重启选项的简单例子:

choices="shutdown\nreboot"

chosen=$(echo -e "$choices" | dmenu -i -p "Operation:")

case "$chosen" in
    shutdown) shutdown;;
    reboot) reboot;;
esac

将该文件保存为sysop.sh置于PATH路径中,即可在dmenu中选择sysop这个选项并进行下一步选择。

这个脚本本身没有太多实际意义,然而有了这样的机制,其实可以实现非常非常多的功能,比如调节音量、浏览切换壁纸、快速打开浏览器标签页等等,笔者认为其定制能力与想象力要比MacOS下的Alfred要更为丰富。

dwm状态栏

默认的dwm状态栏非常朴素,status部分只显示了dwm-6.2,“没毛病老哥”们提供了一个基础的改变status显示内容的机制,比如想要把dwm-6.2改变为hello world那么需要运行:

xsetroot -name "hello world"

有了这个简单的机制,便可以通过其他软件比如pauseaudio拿到当前音量信息并展示到status bar;通过date软件拿到当前时间信息并展示。

suckless官网列出了一些他人配置好的dwm状态栏列表,可以参考选用。

What's Next

许多有经验的Linux用户都有自己的suckless软件版本,开箱即用,可以尝试使用一下他们的成熟配置进一步感觉suckless软件的魅力:

ohmyarch

DistroTube

Luke Smith

TheNiceBoy