Dank Material Shell安装

2348 字
12 分钟
Dank Material Shell安装

Debian安装Dank Material Shell的折腾记录#

1. 效果图:#

niri-example
niri-example

2. Niri 和 Dank Material Shell#

2.1 Niri#

niri-wm
/
niri
Waiting for api.github.com...
00K
0K
0K
Waiting...

Niri 是一款创新的 可滚动平铺式 Wayland 合成器(scrollable-tiling Wayland compositor),采用 Rust 语言编写,自 2023 年发布以来迅速获得了大量关注,GitHub 星标数已超过 17,000,超越了 Sway 并正在追赶 Hyprland 。

Niri 最大的特色是其水平无限滚动的工作空间

  • 列式布局:窗口以列(column)的形式水平排列,每列可包含多个垂直堆叠的窗口
  • 无限滚动:工作空间不是固定大小的桌面,而是一条无限延伸的水平带。当打开新窗口时,现有窗口不会被压缩,而是向左右滚动展示
  • 动态工作空间:工作空间按需动态创建和销毁,空工作空间会自动清理,始终保持整洁

这种设计灵感来源于 GNOME 的 PaperWM 扩展,但 Niri 作为独立的 Wayland 合成器,解决了 PaperWM 在多显示器隔离方面的局限性

特性说明
多显示器支持每个显示器拥有独立的工作空间,窗口不会溢出到相邻显示器,支持混合 DPI 和分数缩放
标签页功能同一列中的窗口可作为标签页切换,节省水平空间
概览模式 (Overview)Super+O 可缩放查看所有窗口和工作空间,支持键盘导航
浮动窗口支持将窗口切换为浮动模式,自动处理对话框等子窗口
内置截图工具集成截图 UI,支持区域选择和窗口录制
实时重载配置修改 config.kdl 后无需重启会话即可生效
XWayland 支持通过 xwayland-satellite 运行 X11 应用(从 25.08 版本开始集成)
视觉效果支持渐变边框(Oklab/Oklch 色彩空间)、圆角、模糊和自定义动画着色器

2.2 Dank Material Shell#

AvengeMedia
/
DankMaterialShell
Waiting for api.github.com...
00K
0K
0K
Waiting...

Dank Material Shell(简称 DMS)是一个为 Wayland 合成器打造的现代桌面 Shell,采用 Quickshell(QtQuick/QML 前端框架)和 Go(后端)构建,旨在提供类似 GNOME Shell 或 KDE Plasma 的完整桌面体验,但专为平铺式窗口管理器优化 。

DMS 解决了平铺式窗口管理器(如 Niri、Hyprland、Sway)“开箱即用”能力不足的问题。传统平铺 WM 通常只提供窗口管理功能,用户需要自行配置状态栏、启动器、系统托盘、通知中心等组件。DMS 将这些全部打包,提供一站式桌面环境,同时保留平铺 WM 的高效特性 。

DMS 采用客户端-服务器架构

  • 后端(dms):Go 编写的核心,管理 D-Bus 接口(NetworkManager、蓝牙、CUPS 打印机等)、Wayland 协议(如 wlr-gamma-control 用于夜间模式),并通过 Unix Socket 暴露 JSON API
  • 前端(Quickshell):QML 编写的 UI,负责小部件、模态框和用户体验
  • 可选组件
    • dgop:系统遥测服务,为资源监控小部件提供数据
    • dsearch:极速文件系统搜索引擎
    • dankinstall:自动化安装和管理工具

DMS 支持的渲染器:

合成器支持程度
Niri完全支持(推荐),包括工作区切换、概览集成、显示器关闭等
Hyprland完全支持,提供专门的 Home Manager 模块
Sway / dwl (MangoWC)支持,但部分功能受限(如无工作区切换器集成)
其他基础功能可用,但缺少合成器特定集成

3. 安装教程#

这里为了方便,我们不手动配置Niri,转而使用DMS

DMS 支持 ArchFedoraDebian 这几个Linux发行版以及其衍生版本 (所以理论上Kali Linux也能装)

3.1 安装基准系统#

这里我们使用Debian 13.4.0 KDE

Debian 13.4.0 Live KDE: 下载链接

  • 选择 Live System (amd64)

debian-install-1
debian-install-1

  • 点击 Install Debian

debian-install-2
debian-install-2

  • 选择 简体中文

debian-install-3
debian-install-3

  • 时区选择 上海

debian-install-4
debian-install-4

  • 键盘布局 默认

debian-install-5
debian-install-5

  • 磁盘选择 抹除磁盘 (后面看情况会出双系统的教程)

debian-install-6
debian-install-6

  • 设置用户名与密码

debian-install-7
debian-install-7

  • 点击 安装

debian-install-8
debian-install-8

  • 等待安装完毕

debian-install-9
debian-install-9

  • 点击 完成

debian-install-10
debian-install-10

3.2 安装 Niri 和 Dank Material Shell#

  • 打开 Kconsole 并挂好 终端代理

这里虚拟机难用,用SSH在我外面的终端上操作

debian-install-niri-1
debian-install-niri-1

  • 更新一下 apt 软件源

这里的话,等一下安装DMS时它会添加外部镜像源,也需要挂代理,所以不换国内源了

Terminal window
sudo apt update
  • 使用官方安装命令进行安装
Terminal window
curl -fsSL https://install.danklinux.com | sh

debian-install-niri-2
debian-install-niri-2

这里直接 Enter 继续

debian-install-niri-3
debian-install-niri-3

这里 WM 选第一个

debian-install-niri-4
debian-install-niri-4

Terminal 的话按自己偏好选就行,这里我选Kitty

debian-install-niri-5
debian-install-niri-5

这里的话 Enter 继续

debian-install-niri-6
debian-install-niri-6

输入你的密码然后回车开始安装

debian-install-niri-7
debian-install-niri-7

等待脚本执行

debian-install-niri-8
debian-install-niri-8

出现这个界面就说明安装成功了,此时我们注销并重新登录,记得登录时在SDDM的会话那里把 KDE Wayland 改为 Niri

3.3 安装 DankGreeter#

现在我们已经安装好了DMS,但是我们的窗口管理器还是 KDE 默认的 SDDM , 风格不统一,所以我们安装 Dank 官方的 DankGreeter

3.3.1 安装命令#

  • 使用 dms-cli 安装:
Terminal window
dms greeter install
  • Arch Linux (AUR)
Terminal window
paru -S greetd-dms-greeter-git
# Or with yay
yay -S greetd-dms-greeter-git
  • Fedora
Terminal window
sudo dnf copr enable avengemedia/danklinux
sudo dnf install dms-greeter
  • Debian
Terminal window
sudo apt install dms-greeter

3.3.2 初始化 DankGreeter#

Terminal window
dms greeter enable

3.3.3 同步主题#

Terminal window
dms greeter sync
Note

这里可能会提示是否将当前用户加入用户组,选择是并且输入账号密码就行

3.3.4 效果展示#

dankgreeter
dankgreeter

4. 系统优化#

4.1 安装 Nerd Font#

我用的是FiraCode Nerd Font Regular,下载链接

Nerd Font:FireCode

4.2 设置Kitty Terminal#

配置文件路径:~/.config/kitty/kitty.conf

4.2.1 设置Font#

# Font Confguration
font_size 12.0
font_family FiraCode Nerd Font

4.2.2 设置默认Shell#

# Default Shell
shell /bin/zsh

4.2.3 设置半透明#

# Window Configuration
background_opacity 0.9

4.3 添加 Emoji 选择器#

4.3.1 安装依赖#

Terminal window
sudo apt install wofi wl-clipboard jq curl
软件包备注
wofiEmoji选择器
wl-clipboard剪切板支持
jqjson支持
curl这个不用说了

4.3.2 编写启动脚本#

Terminal window
sudo nano /usr/bin/wofi-emoji
  • 内容
#!/bin/bash
DATA_DIR="$HOME/.local/share"
EMOJI_FILE="$DATA_DIR/emojis.json"
FAVORITES_FILE="$DATA_DIR/emoji-favorites.txt"
# 下载数据
[ ! -f "$EMOJI_FILE" ] && curl -sL \
https://raw.githubusercontent.com/muan/emojilib/main/dist/emoji-en-US.json \
-o "$EMOJI_FILE"
# 加载收藏
favorites=""
[ -f "$FAVORITES_FILE" ] && favorites=$(cat "$FAVORITES_FILE" | sed 's/^/⭐ /')
# 构建列表
list="$favorites
$(jq -r 'to_entries | .[] | .key + " " + (.value | join(" "))' "$EMOJI_FILE")"
# 选择
selected=$(echo "$list" | wofi --dmenu \
--prompt "Emoji (copied):" \
--width 700 \
--height 500 \
--insensitive \
--cache-file /dev/null | sed 's/^⭐ //')
# 复制到剪贴板
if [ -n "$selected" ]; then
emoji=$(echo "$selected" | awk '{print $1}')
# 复制到剪贴板
echo -n "$emoji" | wl-copy
# 添加到收藏
[ -f "$FAVORITES_FILE" ] && grep -v "^$emoji$" "$FAVORITES_FILE" > "$FAVORITES_FILE.tmp" || true
echo "$emoji" > "$FAVORITES_FILE"
[ -f "$FAVORITES_FILE.tmp" ] && head -19 "$FAVORITES_FILE.tmp" >> "$FAVORITES_FILE"
rm -f "$FAVORITES_FILE.tmp"
fi
  • 赋予执行权限
Terminal window
sudo chmod +x /usr/bin/wofi-emoji

4.3.3 编写CSS样式#

window {
margin: 5px;
border: 2px solid #7aa2f7;
border-radius: 10px;
background-color: #1a1b26;
font-family: "Noto Color Emoji", "JetBrains Mono";
}
#input {
margin: 10px;
padding: 10px;
border-radius: 5px;
border: none;
background-color: #24283b;
color: #a9b1d6;
}
#inner-box {
margin: 10px;
}
#entry {
padding: 8px;
border-radius: 5px;
}
#entry:selected {
background-color: #7aa2f7;
color: #1a1b26;
}
#text {
color: #c0caf5;
}

4.3.4 绑定 Niri 快捷键#

Terminal window
nano .config/niri/dms/binds.kdl
  • 添加:
// +++ Emoji-Seletor +++
binds {
Mod+E hotkey-overlay-title="Open Emoji" { spawn "wofi-emoji"; }
}

使用 Mod-E 打开 Emoji 选择器

4.3.5 效果例图#

debian-niri-emoji
debian-niri-emoji

4.4 安装 fastfeach#

4.4.1 安装依赖#

Terminal window
sudo apt install fastfetch

4.4.2 下载美化包#

sqlsec
/
fastfetch
Waiting for api.github.com...
00K
0K
0K
Waiting...
  • 下载
Terminal window
wget https://github.com/sqlsec/fastfetch/releases/download/v0.1/fastfetch-for-Linux.zip
  • 备份原配置
Terminal window
mv $HOME/.config/fastfetch $HOME/.config/fastfetch.bak
  • 写入新配置
Terminal window
cd .config
Terminal window
wget https://github.com/sqlsec/fastfetch/releases/download/v0.1/fastfetch-for-Linux.zip
unzip fastfetch-for-Linux.zip && rm fastfetch-for-Linux.zip

不同的 .jsonc 就是不同的预设方案,如果启用的话,将其重命名为 config.jsonc 即可切换为默认的预设方案

4.4.3 我的配置#

  • 新建配置文件夹
Terminal window
mkdir ~/.config/fastfetch
  • 复制文件夹
Terminal window
cd ./fastfetch-for-linux/fastfetch
cp -r ./anime ~/.config/fastfetch
  • 写入新配置
Terminal window
nano ./fastfetch-for-linux/fastfetch/config.jsonc
{
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
"logo": {
"type": "kitty",
"source": "~/.config/fastfetch/anime/cat-1.jpg",
"height": 18,
},
"display": {
"separator": " : "
},
"modules": [
{
"type": "custom",
"format": "┌────────────────────────────────────────────────────────┐"
},
{
"type": "title",
"key": " "
},
{
"type": "custom",
"format": "└────────────────────────────────────────────────────────┘"
},
{
"type": "os",
"key": " 󰰖 OS",
"keyColor": "red"
},
{
"type": "kernel",
"key": "  Kernel",
"keyColor": "red"
},
{
"type": "wm",
"key": "  WM",
"format": "{2}",
"keyColor": "yellow"
},
{
"type": "shell",
"format": "{1} {4}",
"key": " 󰘳 Shell",
"keyColor": "blue"
},
{
"type": "memory",
"key": " 󰀚 Memory",
"keyColor": "blue"
},
{
"type": "uptime",
"key": " 󱫐 Uptime ",
"keyColor": "red"
},
{
"type": "host",
"key": " 󰢚 Machine",
"format": "{name}{?vendor} ({vendor}){?}",
"keyColor": "red"
},
"break",
{
"type": "colors",
"paddingLeft": 2,
"symbol": "circle"
},
"break"
]
}

4.5 解决屏幕共享失败问题#

系统安装完成后,我用飞书开会议时共享屏幕失败了,这里找到了一种解决方法:https://forum.archlinuxcn.org/t/topic/15155

  • 安装 xdg-desktop-portal-hyprland
Terminal window
apt install xdg-desktop-portal-hyprland
  • 修改 /usr/share/xdg-desktop-portal/niri-portals.conf 的内容
[preferred]
default=hyprland;gtk;
org.freedesktop.impl.portal.Access=gtk;
org.freedesktop.impl.portal.Notification=gtk;
org.freedesktop.impl.portal.Secret=gnome-keyring;
  • 重启系统

5. 其余设置#

5.1 系统样式设置#

5.1.1 DankBar#

  • Super + , 打开DMS Settings
  • 进入 Dank Bar >> 设置
  • 修改 位置

debian-dankbar
debian-dankbar

5.1.2 设置系统主题色#

  • Super + , 打开DMS Settings
  • 进入 主题与配色
  • 修改 主题色黄色

debian-theme-color
debian-theme-color

5.1.3 Window Gap#

  • Super + , 打开DMS Settings
  • 进入 主题与配色
  • niri布局覆盖 打开 覆盖间隙 并修改 窗口间隙28px

debian-window-gap
debian-window-gap

5.2 软件的安装和修改#

5.2.1 在 Chrome 里添加带代理的启动选项#

  • 修改.local/share/applications/google-chrome.desktop
Terminal window
sudo nano .local/share/applications/google-chrome.desktop
  • 内容
[Desktop Entry]
Actions=new-window;new-private-window;new-window-with-proxy;
Categories=Network;WebBrowser;
Comment=访问互联网
Exec=/usr/bin/google-chrome-stable --ozone-platform=x11 %u
GenericName[zh_CN]=网页浏览器
GenericName=Web Browser
Icon=google-chrome
MimeType=application/pdf;application/rdf+xml;application/rss+xml;application/xhtml+xml;application/xhtml_xml;application/xml;image/gif;image/jpeg;image/png;image/webp;text/html;text/xml;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/google-chrome;
Name=Google Chrome
NoDisplay=false
Path=
PrefersNonDefaultGPU=false
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
Version=1.0
X-KDE-SubstituteUID=false
X-KDE-Username=
[Desktop Action new-private-window]
Exec=/usr/bin/google-chrome-stable --incognito --ozone-platform=x11
Name[zh_CN]=新建隐身窗口
Name=New Incognito Window
[Desktop Action new-window]
Exec=/usr/bin/google-chrome-stable --ozone-platform=x11
Name[zh_CN]=新建窗口
Name=New Window
[Desktop Action new-window-with-proxy]
Exec=/usr/bin/google-chrome-stable --ozone-platform=x11 --proxy-server="socks5://127.0.0.1:7897" %u
Name[zh_CN]=新建带代理的窗口
Name=New Window With Proxy

5.2.2 安装AppImage#

这里以yakit为例

  • 去官网下载最新的 AppImage 文件

  • 解包 AppImage 文件

Terminal window
./Yakit.AppImage --appimage-extract

这样会得到 squashfs-root 文件夹,将它重命名为 app

Terminal window
mv squashfs-root app
  • 新建 Yakit.desktop 文件
Terminal window
nano .local/share/applications/Yakit.desktop
  • 写入以下内容
[Desktop Entry]
Name=Yakit
Exec="/home/tuf3i/UserApps/yakit/app/yakit" --on-sandbox # 改为可执行文件的具体路径
Terminal=false
Icon=/home/tuf3i/UserApps/yakit/app/yakit.png # 改为图标的具体路径
Type=Application
StartupWMClass=Yakit
X-AppImage-Version=1.4.6-403
Comment=Yakit is for yaklang.io Electron GUI Entry
Categories=Utility;

6. 结尾#

没有了喵,谢谢阅读

gopher
gopher

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Dank Material Shell安装
https://blog.tuf3i.click/posts/debian-niri/
作者
TuF3i
发布于
2026-04-09
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
TuF3i
一只区,什么也不想写
分类
标签
站点统计
文章
5
分类
4
标签
8
总字数
9,842
运行时长
0
最后活动
0 天前

目录