↓ 跳过正文

Niri窗口合成器+dms桌面

·2101 字

万物起源
#

看到同学的 Arch+Niri 组合,哇好流畅好好玩好想要。那还说啥了,整一个玩玩。

简单开始
#

1. 安装 Niri
#

sudo add-apt-repository ppa:avengemedia/danklinux
sudo add-apt-repository ppa:avengemedia/dms
sudo apt install niri dms
  • DMS 源码:/usr/share/quickshell/dms,DMS 二进制:/usr/bin/dms

2. 直接启动
#

由于没有 nvidia 显卡作祟,这边可以直接启动 niri ,不会卡黑屏tty 注销并在 session 选择器中选择 niri 就可以打开了

开始这里会提示 warning 缺少一个电源相关的控制包,我这已经安装过了其他控制电源的软件,所以可以直接忽略

一些简要配置
#

1. alacritty 配置
#

安装时自动安装了一个 alacritty,采用 rust 语言编写 alacritty 0.16.1 原生支持关闭标题栏:[window] decorations,取值 Full / None / Transparent(macOS)/ Buttonless(macOS)。

新建了 ~/.config/alacritty/alacritty.toml:

# Alacritty 用户配置
# niri 不提供服务端装饰,默认 Full 时 alacritty 会自绘 CSD 标题栏/边框。
# 设为 None 即完全去掉标题栏和边框(移动/缩放交给 niri 的窗口操作键)。

[window]
decorations = "None"

# 启用 DMS 生成的 dank 主题
[general]
import = ["~/.config/alacritty/dank-theme.toml"]

顺带修好的问题:~/.config/alacritty/dank-theme.toml(DMS 用 matugen 生成的配色)原本没有被任何地方 import,运行时 import=[]、配色仍是默认 #181818。加入 import 后即生效。

移动/缩放说明:去掉 CSD 后不受影响,用 niri 的窗口操作键(Mod+左键拖移动、Mod+右键拖缩放)。

2. fcitx5 + rime 输入法
#

  1. fcitx5 对 wayland 支持更好,所以选用fcitx,由于之前用过了 ibus 的 rime,所以这里先做备份+卸载处理
# 备份
tar -zcvf /destination/directory /need/to/tar/dir
# 卸载
sudo apt remove ibus
killall ibus-daemon  # 确保进程终止
  1. 接下来安装新的 fcitx5
sudo apt install fcitx5 fcitx5-rime
# material design color 的皮肤,不是很好看后面再修吧先凑合
sudo apt install fcitx5-material-color
  1. 启用明月拼音简体,在 dms-settings 中直接关掉输入法切换快捷键,使用 fcitx5 内置的切换功能实现语言切换

  2. 输入法缺少一个跟随 niri 启动而启动的功能,在 ~/.config/niri/config.kdl 末尾添加一行

// fcitx5 auto start
spawn-at-startup "fcitx5" "-d"
  1. dms 默认对 fcitx5 写入了一个 material design 的主题
  • 这里直接在 fcitx5 settings 中的 Addons -> Classic User Interface 直接修改 theme (dark theme) = dms 即可
  1. rime 输入法配置在 ~/.local/share/fcitx5/rime/default.custom.yaml
  • 修改一下候选词个数
# ~/.local/share/fcitx5/rime/default.custom.yaml
patch:
  # 每页候选词个数
  menu/page_size: 9
  ascii_composer/switch_key/Shift_L: commit_code   # rime 内按 Shift 切中/英
  ascii_composer/switch_key/Shift_R: commit_code
  schema_list:
   - schema: luna_pinyin_simp
   - schema: luna_pinyin
  • 修改一下中英文切换的问题
# ~/.config/fcitx5/config
[Hotkey/TriggerKeys]
0=Super+space          # 保留:Super+空格 切换输入法(rime ↔ 无输入法纯英文)

[Hotkey/AltTriggerKeys]
# 删掉了原来的 0=Shift_L —— 这就是「按 Shift 切到英文回不来」的元凶:
# fcitx5 把单独的 Shift 当成了全局切换键,和 rime 自己的 Shift 打架
[Hotkey/EnumerateGroupForwardKeys]
# 删掉了原来的 0=Super+space —— 它和 TriggerKeys 抢同一个键(且只有一个分组)

3. 一些琐碎的配置
#

  1. DMS 锁屏建立在 Quickshell 的 WlSessionLock(ext-session-lock-v1 协议) 之上,认证走 PAM,可以作为可用的锁屏界面,无需安装其他锁屏程序

  2. dms 默认锁屏配置是 swaylock 但是并不会默认安装,所以这里需要手动修改一下快捷键里的配置

  • 在 dms-settings 中找到 keyboard shortcut 调整其中的 super+alt+L 功能改为 dms 选项下的 Lockscreen 即可
  1. 休眠分为插电和电池,属于两页,需要在顶部切换设置

  2. 他自动安装了一个轻量化启动器 fuzzle,我还是喜欢 dms 自带的启动器,统一风格,在 dms-settings UI 中修改即可

  3. 启动 niri 的时候系统会默认打开一个快捷键提示,看多了就会了不需要了

  • 关闭启动提示是在 ~/.config/niri/config.kdl 配置文件中,找到 hotkey-overlay 将 skip-at-startup 前面的注释符号取消即可!Super+Shift+/ 快捷键仍可随时呼出
  1. 边框颜色一直是默认的蓝色,这里给他在 ~/.config/niri/config.kdl 的 DMS include 区末尾加了一行(第 645 行附近): 让边框颜色跟随主题色
  include "dms/colors.kdl"

4. 好用的插件
#

dms plugins install emojiLauncher
  • 电源tlp配套插件 tlpPowerProfile

5. 电源管理
#

保持原有 tlp 电源管理软件不变,为 dms 安装插件以及配置插件

  1. 安装 Performance 档需要的 helper
sudo install -m 0755 \
 ~/.config/DankMaterialShell/plugins/tlpPowerProfile/helper/tlp-power-profile-helper \
 /usr/local/bin/

不装的话,点 ⚡ 会报找不到命令。

  1. 配置 TLP,让 bat/ac 真正切 quiet/balanced
# sudo nano /etc/tlp.d/99-asus.conf
PLATFORM_PROFILE_ON_AC=balanced
PLATFORM_PROFILE_ON_BAT=quiet
CPU_ENERGY_PERF_POLICY_ON_AC=balance_performance
CPU_ENERGY_PERF_POLICY_ON_BAT=power
CPU_BOOST_ON_AC=1
CPU_BOOST_ON_BAT=0
START_CHARGE_THRESH_BAT0=0
STOP_CHARGE_THRESH_BAT0=80
sudo tlp start
  • PLATFORM_PROFILE_ON_* 是给 tlp ac / tlp bat 用的,不配的话点按钮只会改 CPU EPP,不会改 ASUS 的 quiet/balanced。
  • STOP_CHARGE_THRESH_BAT0=80 是充电上限;不想要就删掉这一行。
  • ASUS 只支持 stop 阈值,start 会被忽略。
  1. 配置免密(不然每次点都弹密码)

你已经在 sudo 组里,直接用 polkit,不需要重新登录:

# sudo nano /etc/polkit-1/rules.d/49-tlp-power-profile.rules
polkit.addRule(function(action, subject) {
   if (action.id !== "org.freedesktop.policykit.exec") return;
   var p = action.lookup("program");
   if ((p === "tlp" || p === "/usr/sbin/tlp" || p === "/usr/bin/tlp" ||
        p === "tlp-power-profile-helper" || p === "/usr/local/bin/tlp-power-profile-helper") &&
       subject.isInGroup("sudo")) {
       return polkit.Result.YES;
   }
});

测试一下,应该直接打印 TLP version 1.8.0,不弹密码:

pkexec tlp --version

不想免密的话,第 3 步可以跳过,只是每次点击要输密码。

备选:不想用 polkit,就在 /etc/sudoers.d/ 里给 %sudo 加 /usr/sbin/tlp 和 /usr/local/bin/tlp-power-profile-helper 的 NOPASSWD,然后把插件设置里的 Privilege mode 改成 sudo -n。

  1. 开始用

在 DankBar 上点电池 widget: 即可在此处切换不同电源状态

点任意一个后,TLP 进入 manual mode 手动模式,之后插拔电源不会再自动改,直到重启或你执行 sudo tlp start。

  1. 验证
  cat /sys/firmware/acpi/platform_profile
  tlp-stat -s | grep -E 'Mode|Power source'
  • 点 🍃 后:quiet,Mode = BAT (manual)
  • 点 ⚖️ 后:balanced,Mode = AC (manual)
  • 点 ⚡ 后:performance
  • 想回自动:sudo tlp start(会清掉 manual)

[!TIP]

  • 充电阈值滑块可以拖,但 ASUS 只认 stop;start 无效。持久上限就是上面 TLP 配置里的 80。
  • 插件显示的档位图标 = 你上次点的档位,手动模式下是准确的。
  • 如果 ⚡ 还是失败,检查 /usr/local/bin/tlp-power-profile-helper 是否存在且可执行。
Haley
作者
Haley