4816 字
24 分钟
安装与初始化 CachyOS
CAUTION

本教程 (仅) 适用于 拥有一定 Linux 知识储备的用户, 若您无法理解并正确填写类似 Ubuntu 的交互式 Linux 安装器的选项, 请先前往 archlinux 简明指南 学习安装 Linux 的基础知识

安装#

下载 CachyOS 官方 ISO, 使用交互式安装器安装

NOTE

由于在 CachyOS Live CD 环境内, 其安装器是从云端 (GitHub) 拉取的, 请确保网络可访问性与连接通畅

对于拥有多个显示器的与用户, 请注意安装器是否从 非主要 (或者你没有注意到的) 显示器 弹出, 从而无辜等待安装器下载, 浪费人生

使用安装器时, 若需要与 Windows 共存共存安装, 请在分区时选择 “手动分区”:

  1. 创建不小于 512 MiB (GRUB) 或 2 GIB (其他引导方式) 的 Fat32 Boot 分区, 挂载于 /boot/efi, 勾选 boot
  2. 创建适当大小的 Btrfs 根目录, 挂载于 / (CachyOS 会自动处理 /home 等子卷)

选择 Niri 桌面环境 (后续会使用安装脚本覆盖配置) 或 不配置桌面环境

配置#

Virtual Console Service 报错#

https://github.com/nakanomikuorg/arch-guide/issues/299

Terminal window
sudo touch /etc/vconsole.conf

然后在

/etc/vconsole.conf

写入/修改

KEYMAP=us

安装 Niri#

使用 【Arch零门槛】绝美Linux桌面,一键安装Niri+DMS - BIliBili 提供的安装脚本安装 Niri

Terminal window
bash <(curl -L shorin.xyz/archsetup)
NOTE

由于 CachyOS 默认使用 Fishshell, 导致该语法无法被识别, 请在 Bash 内运行上述脚本

WARNING

CachyOS 默认的 Niri 与 一键脚本有冲突, 请使用 Super/Meta/Command + T (若打不开时请使用 Alt + T) 打开终端, 运行如下命令卸载冲突的 Noctalia (系列包)

Terminal window
yay -R noctalia-qs noctalia-shell cachyos-niri-noctalia

选择 Niri + DMS 或 Niri + DMS - git 安装, 并在安装 DMS 时选择 Niri 与 Kitty (常用应用可选安装)

由于我安装非 git 版本 DMS 安装器打开失败, 推荐选择 git 版本安装

如果安装完成出现了两个任务栏, 请禁用 dms.service

Terminal window
sudo systemctl disable --now dms.service

Niri DMS 配置快捷键#

由于未知原因, DMS 设置对配置好的快捷键支持存在问题, 使用设置 GUI 编辑会导致配置文件保存失败, 故手动修改配置文件

按键绑定配置文件位于

~/.config/niri/dms/binds.kdl
TIP

BTW, 使用 GUI 绑定 Super 按键可能出现无法保存的问题, 请手动修改 Super 为 Mod

同时, 不支持仅使用一个 Mod 键等作为快捷键, 必须为组合按键

Niri 配置与双击标题栏相同行为的窗口最大化#

不知为何, DMS 配置的 maximize-column (最大化) 行为与双击标题栏的行为不同, 前者会保留主题色窗口高亮边框, 后者会占据整个屏幕除 (顶部) 任务栏区域且任务栏的 margin 会缩减为 0; fullscreen-window (全屏) 窗口会导致 Overlay 窗口 (包括但不限于 Mod+Z 程序菜单, Mod+X 电源/登录操作菜单) 无法弹出, 并且任务栏会被隐藏

经过一翻探寻, 发现双击标题栏的实际行为是 maximize-window-to-edges, 故可以配置如下命令作为最大化的执行命令, 达到 真正最大化窗口

不知道为什么 DMS 设置的 Window 操作竟然没有这个 Action, 只有上述的 maximize-columnfullscreen-window

TIP

如下命令会自动应用于前台窗口, 并且该命令会 toggle 该状态, 无须判断目标窗口是否已经处于该状态

Terminal window
niri msg action maximize-window-to-edges

关于 DMS 窗口规则 (Window Rules)#

DMS 窗口规则什么都不填写代表匹配所有窗口, 可以用于设置全局配置, 诸如窗口圆角大小等

匹配规则的 App ID 与 Title regex 貌似不能包含空格或特殊字符, 否则可能导致 Niri 配置加载失败

Niri 配置显示器焦点跟随光标#

目前, Niri 没有很好的方法配置应用程序启动菜单等于光标所在的显示器弹出, 只能配置实时根据光标所在窗口范围切换窗口焦点, 从而另类实现前者目的

WARNING

这会导致被光标划过的窗口会被意外激活, 个人不建议配置

在 Niri 配置文件配置如下内容

~/.config/niri/config.kdl

配置

input {
focus-follows-mouse
}

Niri 禁用在使用 Meta+鼠标左键 拖动窗口时修改非固定大小的窗口大小#

要使得 Niri 不在拖拽窗口时改版窗口大小, 可以使用如下配置

在 Niri 配置文件 (系列) 中找到 default-column-width

~/.config/niri/config.kdl

并将

default-column-width { proportion 0.5; }

修改为

default-column-width { }
NOTE

这会丢失使用 maximize-window-to-edges 的最大化窗口状态

Niri 在 Overview (类似于 Meta+Tab) 显示 DMS 顶栏#

Terminal window
[ ! -f ~/.config/DankMaterialShell/settings.json.bak ] && cp ~/.config/DankMaterialShell/settings.json ~/.config/DankMaterialShell/settings.json.bak
jq '.barConfigs[].openOnOverview = true' ~/.config/DankMaterialShell/settings.json > ~/.config/DankMaterialShell/settings.edited.json && \
mv ~/.config/DankMaterialShell/settings.edited.json ~/.config/DankMaterialShell/settings.json
dms ipc call reload

Rime 雾凇拼音 设置默认为半角符号#

iDvel
/
rime-ice
Waiting for api.github.com...
00K
0K
0K
Waiting...

对于 fcitx5 用户, 在如下目录

~/.local/share/fcitx5/rime

创建/编辑如下文件

rime_ice.custom.yaml

rime_ice.schema.yaml 是雾凇拼音默认配置, 如下为节选

switches:
- name: ascii_mode
states: ["中", "A"]
- name: ascii_punct
reset: 1
states: ["¥", "$"]
- name: traditionalization
states: ["简", "繁"]
- name: emoji
reset: 1
states: ["💀", "😄"]
- name: full_shape
reset: 0
states: ["半角", "全角"]
- abbrev: ["词", "单"]
name: search_single_char
states: ["正常", "单字"]

由于全角/半角符号切换配置项在 schema 文件中的 switches 部分的索引为 1, 在上述文件内写入如下内容 (如果上游有修改请自行修改, 参考 用補靪指令修改列表 - Rime Wiki)

patch:
# @1 代表选择索引为 1 者, 并将其默认值 (`reset`) 设置为 1
"switches/@1/reset": 1 # 半角符号
"switches/@4/reset": 0 # 半角 CJK

后重新部署输入法即可

Rime 雾凇拼音 设置自定义词库#

对于 fcitx5 用户, 在如下目录

~/.local/share/fcitx5/rime

创建/编辑如下文件

default.custom.yaml

并写入

translator/dictionary:
- <name>

其中, <name> 是下方要创建的 dict (词库) 文件名称, 确保同目录下有 <name>.dict.yaml, 且 <name>.dict.yaml 内的 name 字段为 <name>

创建并写入任意的 <name>.dict.yaml (以 custom_phrase.dict.yaml 为例)

custom_phrase.dict.yaml

写入

---
name: custom_phrase
version: "1.0"
sort: by_weight
...
自定词组 拼音代码 权重
# 此处按照 `词组\t拼音\t权重(不知道可以填写 1)` 格式写自定义词组, 一行一个. 例如:
词组 cizu 1

后重新部署输入法即可

Dolphin 文件管理器无法识别打开方式 / 默认打开方式重置#

  1. 安装依赖包
Terminal window
sudo pacman -S archlinux-xdg-menu
  1. 链接通用的打开方式配置
Terminal window
sudo ln -sf /etc/xdg/menus/plasma-applications.menu /etc/xdg/menus/applications.menu
  1. 刷新 (默认) 打开方式缓存
Terminal window
XDG_MENU_PREFIX=plasma- kbuildsycoca6 --noincremental
  1. 重启 Dolphin 即可

Dolphin 在右键单击文本类文件时界面卡死若干秒#

检查 Dolphin 的 “设置 > 右键菜单” 中 “通过 KDE Connect发送文件” 选项, 若已勾选则取消勾选, 确定或应用尝试是否解决

修改 KDE 系软件主题#

由于 Niri 的 DMS 设置的深色模式无法应用于 KDE 系列软件, 造成应用主题割裂, 此次需要修改 KDE 系软件默认主题

修改 KDE 系列软件主题的关节点在于命令行工具 plasma-apply-colorscheme, 该工具仅在包 plasma-desktop 等中提供

  1. 安装 plasma-desktop 或下载我从该包中提取的 plasma-apply-colorscheme ELF 安装
Terminal window
sudo pacman -S plasma-desktop

或下载 ELF: 当前网站 (实验) / GitHub

WARNING

该 ELF 属于 Plasma 6.6.2, 如果出现 Breaking Change 造成该 ELF 无法使用, 请使用上述安装 Plasma 软件包的解决方法 并将该 ELF 放入

/usr/local/bin

赋予可执行权限

Terminal window
sudo chmod +x /usr/local/bin/plasma-apply-colorscheme
  1. 设置颜色主题
    查看已有的主题列表
Terminal window
plasma-apply-colorscheme --list-schemes

设定主题

Terminal window
plasma-apply-colorscheme <name>

要设定默认的深色主题, 请使用

Terminal window
plasma-apply-colorscheme BreezeDark

为了保证文件选择器等 配套软件主题统一性, 请在全局环境变量配置文件中写入如下配置

同时写入是为了 Niri 和在 Niri 启动前的 Services 全部都可以作用到

/etc/environment
~/.config/niri/config.kdl

environment 部分修改或写入

QT_QPA_PLATFORMTHEME=qt5ct
QT_QPA_PLATFORMTHEME_QT6=qt5ct

并使用 Qt5设置 修改主题配置

若仍旧无效的, 请将 qt5ct 修改为 kde

修改 Kitty 默认 Shell, 字体以及是否连字#

将如下文件

~/.config/kitty/kitty.conf

shell fish (或 shell <any-shell>) 改为你想用的 Shell, 可以只写名称, 例如:

# 修改默认 Shell
shell zsh
# 字体及大小
font_family JetBrainsMono Nerd Font NL
font_size 12
# 禁用连字
disable_ligatures always
# 禁用 单击 打开链接, 新增 Ctrl+单击 打开链接
mouse_map left click ungrabbed no_op
mouse_map ctrl+left release grabbed,ungrabbed mouse_handle_click link
WARNING

由于快捷键 Mod+slash 默认打开的是使用 --single-instance 的 Kitty, 需要重启 Kitty Daemon 才能使配置生效

Terminal window
killall kitty

修改默认应用 (默认打开方式)#

编辑如下配置文件

~/.config/mimeapps.list

该配置文件格式为 <MIME-Type>=<app>.desktop;<second-app>.desktop;...

例如, 要修改默认文件管理器为 Dolphin

inode/directory=org.kde.dolphin.desktop

也可使用如下命令

Terminal window
xdg-mime default <app>.desktop <MIME-Type> <MIME-Type> <...>

例如, 要修改压缩包的默认打开方式为 KDE 的 Ark

Terminal window
xdg-mime default org.kde.ark.desktop application/zip application/x-tar application/x-7z-compressed application/vnd.rar application/x-rar
TIP

修改实时生效

要验证某 MIME-Type 的默认打开方式, 请使用

Terminal window
xdg-mime query default <MIME-Type>

例如:

Terminal window
xdg-mime query default inode/directory

Discord / Chromium 无法打开分享屏幕窗口选择器 (部分情况下屏幕可以正常选择)#

为配置 Gnome 的 XDG Portal 请在如下配置文件

~/.config/xdg-desktop-portal/portals.conf

写入

[preferred]
org.freedesktop.impl.portal.ScreenCast=gnome;
org.freedesktop.impl.portal.Screenshot=gnome;

并重启服务

该配置在部分情况下可能导致: Gnome PipeWire 选择界面可以弹出, 并成功选择; 但当 Chromium 尝试请求并弹出选择窗口后, 不进行任何窗口操作直接单击 “取消”, 再次尝试打开选择窗口无窗口弹出 (OBS 等非 Chromium 仍可在此状况下弹出选择窗口)
可能是因为 Electron 均使用 org.chromium.Chromium 作为 PipeWire 请求者, 导致 XDG Portal 内部状态比被多个 APP 覆写造成无效; 同时, 诸如 Discord 等软件的 WebRTC 实现貌似并不会在分享屏幕结束时通知 XDG Portal, 导致 PipeWire 回话永远无法结束

使用如下命令可以查看正在使用的 Freedesktop 回话

Terminal window
busctl --user tree org.freedesktop.portal.Desktop

我们推荐更换为 KDE 的 XDG Portal xdg-desktop-portal-kde

Terminal window
sudo pacman -S xdg-desktop-portal-kde

并在上述的配置文件内设置文件选择器等的 XDG Portal 实现为 kde

WARNING

切勿同时使用 KDE 与 Gnome 的 XDG Portal 实现, 这样会导致 Gnome 与 KDE 的实现互相争夺, 造成 Gnome 实现难以启动
KDE 窗口选择器无法正常工作, 切勿删除上述两行用于设置使用 Gnome 选择器的配置

[preferred]
default=kde;
org.freedesktop.impl.portal.ScreenCast=kde-screenshot-for-niri;
org.freedesktop.impl.portal.Screenshot=kde-screenshot-for-niri;

替换 XDG Portal 后端会导致一些配置需要更改, 请遵循如下步骤

  1. 配置 Niri Dbus 后端 在
~/.config/niri/config.kdl

找到如下条目

spawn-sh-at-startup "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=niri & /usr/lib/xdg-desktop-portal-gnome"

/usr/lib/xdg-desktop-portal-gnome 改为

Terminal window
/usr/lib/xdg-desktop-portal-kde
  1. 配置带窗口选择功能的 KDE XDG Portal 实现
    由于 Niri 使用了 Mutter Window API (Gnome 格式), 所以官方的 KDE 并不支持选择窗口分享, 我利用 AI fork 了一份目前可以用的 KDE XDG Portal, 让我们来安装它
Terminal window
git clone https://github.com/lovemilk2333/xdg-desktop-portal-kde --depth 1
cd ./xdg-desktop-portal-kde
./build.sh install
  1. 停用/卸载 Mako 服务 (未安装者请跳过)
    在不使用 Gnome XDG Portal 实现后, 为了避免 Mako 抢占 DMS 的 org.freedesktop.Notifications 注册, 我们需要将其禁用或卸载
Terminal window
systemctl --user disable --now mako
# 或者
sudo pacman -R mako
  1. 配置 Dolphin 守护进程 在上述配置文件内新增如下内容, 为避免 Nautilus 被 DBus 自动调起
spawn-at-startup "dolphin" "--daemon"

重启服务以应用配置

已打开的应用需要重启应用生效

Terminal window
systemctl --user restart xdg-desktop-portal
NOTE

若出现文件选择器等颜色主题与配置的主题不符, 请参考 修改 KDE 系软件主题

Niri 禁用截屏声音#

在 Niri 配置文件中注释如下内容

~/.config/niri/config.kdl

注释

spawn-at-startup "~/.config/niri/shorin-niri/scripts/screenshot-sound.sh"

修复 Niri DMS 设置内光标配置选项无效#

在 Niri 配置文件中注释如下内容

~/.config/niri/config.kdl

注释

cursor {
xcursor-theme "xxx"
xcursor-size 30
// hide-after-inactive-ms 15000
}

Niri 安装光标#

创建如下文件夹

~/.icons

并将下载的光标主题解压放入, 符合如下文件结构

~/.icons/<name>/cursors/
~/.icons/<name>/index.themes

Kopia 自启动失败#

使用 AUR 包的 kopia-ui-bin 的开机自启动功能貌似存在问题导致无法成功自启 (可能是是 Niri 导致的), 我们需要自己创建 User Level 的 Systemd Unit 以自启动 Kopia

在如下路径

~/.config/systemd/user/kopia-ui.service

写入如下内容

[Unit]
Description=KopiaUI - Backup Tool
After=network.target
[Service]
ExecStart=/opt/KopiaUI/kopia-ui
Restart=on-failure
[Install]
WantedBy=default.target

并设置开机自启动

Terminal window
systemctl --user daemon-reload
systemctl --user enable --now kopia-ui.service
TIP

当其他软件遇到类似问题时, 可以采用相同的解决方法

Proton (GE) 设置默认 Prefix#

Terminal window
export STEAM_COMPAT_DATA_PATH=/path/to/pfx

编译软件包时 CMake 错误#

若在编译软件包是出现 CMake 版本不兼容问题, 需要强制指定 -DCMAKE_POLICY_VERSION_MINIMUM=x.x (类似如下输出信息)

CMake Error at CMakeLists.txt:3 (cmake_minimum_required):
Compatibility with CMake < 3.5 has been removed from CMake.
Update the VERSION argument <min> value. Or, use the <min>...<max> syntax
to tell CMake that the project requires at least <min> but has been updated
to work with policies introduced by <max> or earlier.
Or, add -DCMAKE_POLICY_VERSION_MINIMUM=x.x to try configuring anyway.

可以使用 yay 的 --editmenu 选项, 并在提示如下内容是输入要修改范围, 例如 1

$ yay -S xxx --editmenu
...
==> 要编辑哪些 PKGBUILD?
==> [N]没有 [A]全部 [Ab]中止 [I]已安装 [No]未安装 或 (1 2 3, 1-3, ^4)
==> 1

然后修改 build() 中包含 cmake 的行, 添加上述提示中所需的 -DCMAKE_POLICY_VERSION_MINIMUM=x.x 参数 (x.x 需为实际版本), 保存后继续安装软件包即可

GTK 配置样式#

打开 GTK Settings 应用程序

修复 Microsoft Edge 在 Linux 上自动重置为亮色模式#

由于未知原因, Microsoft Edge 的 Linux 版本会在浏览器进程完全退出后将外观设置的 “颜色主题” 为深色模式时配置为亮色模式, 而设置为 GTK 则不会.

> 一个可能的临时解决方法, 将 Edge 降级为 Major 143 (`143.x.x.x`) 版本 > ~~F**K U Microsoft~~

可以使用 downgrade 命令

Terminal window
sudo downgrade microsoft-edge-stable-bin

实测, 148.0.3967.54 (正式版本) (64 位) 已经修复, 请大家尽快升级 microsoft-edge-stable-bin

Terminal window
sudo yay -Sy microsoft-edge-stable-bin

修复 Microsoft Edge 会不断激活存在/播放媒体 (特别是视频) 的页面#

当 Microsoft Edge 浏览器的当前标签页为存在媒体的标签页 (例如 https://www.bilibili.com/video/BV*) 时, 将浏览器取消激活窗口后, 仍会在后台时激活导致窗口切换到浏览器, 打断工作

一个可能的解决方法是, 禁用浏览器内的 Use Updated UI for Global Media Controls Flag

可以导航至 edge://flags/#edge-global-media-controls-updated-ui, 然后选择 Disabled 并重启浏览器

使用 Prismlauncher 安装 Minecraft 整合包时出现文件损坏#

https://www.reddit.com/r/PrismLauncher/comments/1ifpbgp/issue_with_modpacks/

当启动 Minecraft 整合包时, 出现了如下日志

Processor failed, invalid outputs:
/home/<user>/.local/share/PrismLauncher/libraries/net/minecraft/client/1.20.1-20230612.114412/client-1.20.1-20230612.114412-slim.jar
Expected: de86b035d2da0f78940796bb95c39a932ed84834
Actual: aea60124ca903ecbb2e825805e318f9d89ac867c
/home/<user>/.local/share/PrismLauncher/libraries/net/minecraft/client/1.20.1-20230612.114412/client-1.20.1-20230612.114412-extra.jar
Expected: 8c5a95cbce940cfdb304376ae9fea47968d02587
Actual: 76e87dbc119daed8dc1861c17160e0c4b6f34d2e
Process exited with code 0.

尝试替换 CachyOS 的 zlib 实现为如下库, 运行如下命令安装

Terminal window
sudo pacman -S zlib lib32-zlib

修复 Nvidia 打开诸如 Minecraft 遇到无法使用 Zink 或者 Forge 显示无法初始化显卡问题#

修改全局环境变量

/etc/environment

添加

__GLX_VENDOR_LIBRARY_NAME=nvidia
__NV_PRIME_RENDER_OFFLOAD=1
TIP

CachyOS 使用 chwd 工具管理 GPU 驱动, 在更新或更换驱动时注意避免与该工具行为产生冲突

如下配置不得加入全局环境变量, 否则会导致 DMS 启动失败

# 减轻爆显存时应用画面卡死情况 (允许必要时将显存分配请求推送到内存)
__GL_ALLOW_UNRESTRICTED_ACCESS=1
# 部分情况下解决 GPU 占用率过低导致 FPS 过低
__GL_THREADED_OPTIMIZATIONS=1

修改 CachyOS 镜像源#

https://discuss.cachyos.org/t/help-how-to-skip-mirror-update-during-installation-network-issues-in-china/20455

禁用 CachyOS 自动测速软件源

Terminal window
sudo systemctl disable --now cachyos-rate-mirrors.timer

依次修改如下文件

/etc/pacman.d/mirrorlist
/etc/pacman.d/cachyos-mirrorlist
/etc/pacman.d/cachyos-v3-mirrorlist
/etc/pacman.d/cachyos-v4-mirrorlist

如果要使用 USTC Mirror 并刷新现有包数据库缓存, 可以使用如下命令

Terminal window
sudo tee /etc/pacman.d/mirrorlist << EOF
Server = https://mirrors.ustc.edu.cn/archlinux/\$repo/os/\$arch
EOF
sudo tee /etc/pacman.d/cachyos-mirrorlist << EOF
Server = https://mirrors.ustc.edu.cn/cachyos/repo/\$arch/\$repo
EOF
sudo tee /etc/pacman.d/cachyos-v3-mirrorlist << EOF
Server = https://mirrors.ustc.edu.cn/cachyos/repo/\$arch_v3/\$repo
EOF
sudo tee /etc/pacman.d/cachyos-v4-mirrorlist << EOF
Server = https://mirrors.ustc.edu.cn/cachyos/repo/\$arch_v4/\$repo
EOF
sudo sed -i '/^\[archlinuxcn\]/{N;N;c\[archlinuxcn\]\nInclude = /etc/pacman.d/archlinuxcn
}' /etc/pacman.conf
sudo tee /etc/pacman.d/archlinuxcn << EOF
Server = https://mirrors.ustc.edu.cn/archlinuxcn/\$arch
EOF
sudo pacman -Syy

由于近期 UTSC Mirror 不太稳定, 推荐使用 NJU Mirror

Terminal window
sudo tee /etc/pacman.d/mirrorlist << EOF
Server = https://mirror.nju.edu.cn/archlinux/\$repo/os/\$arch
EOF
sudo tee /etc/pacman.d/cachyos-mirrorlist << EOF
Server = https://mirrors.nju.edu.cn/cachyos/repo/\$arch/\$repo
EOF
sudo tee /etc/pacman.d/cachyos-v3-mirrorlist << EOF
Server = https://mirrors.nju.edu.cn/cachyos/repo/\$arch_v3/\$repo
EOF
sudo tee /etc/pacman.d/cachyos-v4-mirrorlist << EOF
Server = https://mirrors.nju.edu.cn/cachyos/repo/\$arch_v4/\$repo
EOF
sudo sed -i '/^\[archlinuxcn\]/{N;N;c\[archlinuxcn\]\nInclude = /etc/pacman.d/archlinuxcn
}' /etc/pacman.conf
sudo tee /etc/pacman.d/archlinuxcn << EOF
Server = https://mirrors.nju.edu.cn/archlinuxcn/\$arch
EOF
sudo pacman -Syy

鼠标 UDev DPI#

如果在 ~/.config/niri/config.kdlmouse 配置中将 accel-speed 改为 1.0 (Niri 允许的最大值) 仍然过慢, 可以尝试使用 UDev 规则修改光标 DPI 倍率

  1. 查找鼠标设备
Terminal window
lsusb

找到如下字样

Bus xx Device xxx: ID aaaa:bbbb xxx Mouse
  1. 配置 UDev 规则 新建如下文件
/etc/udev/rules.d/71-mouse-speed.rules

并配置 UDev 规则

ID_VENDOR_ID: 前的 生产商 ID (全小写 16 进制), ID_MODEL_ID: 后的 型号 ID (全小写 16 进制)
LIBINPUT_ATTR_RESOLUTION_HINT 为加(减)速倍率, 100 为 1.0 倍

ENV{ID_VENDOR_ID}=="aaaa", ENV{ID_MODEL_ID}=="bbbb", ENV{LIBINPUT_ATTR_RESOLUTION_HINT}="2000"
  1. 重载并应用 UDev 规则
Terminal window
sudo udevadm control --reload-rules
sudo udevadm trigger

修复浏览器/应用程序无法检测到游戏手柄#

/etc/udev/rules.d/99-gamepad.rules

写入

KERNEL=="js*", MODE="0666"
KERNEL=="event*", ENV{ID_INPUT_JOYSTICK}=="1", MODE="0666"

重载并应用 UDev 规则

Terminal window
sudo udevadm control --reload-rules
sudo udevadm trigger

重启浏览器/无法检测到的应用程序

解决 Niri (Wayland) 复制某进程内容后关闭该进程, 复制的内容无法粘贴 / 解决 Wayland/XWayland 剪切板同步问题#

在 Niri 或其他基于 Wayland 的合成器中, 剪切板内容通常由 source 进程实时持有, 当该进程关闭时, 它所持有的内容也会从剪切板中消失, 导致无法粘贴

要解决该问题, 可以使用 DMS Clipboard Manager 监听剪切板变动, 并对纯文本自动接管任意 source 进程复制的内容, 以免复制文件时类型被修改导致只会存储 file://<path> 无法被文件管理器识别

~/.config/systemd/user/dms-clipboard.sh

写入

#!/usr/bin/env bash
last_hash=""
dms cl watch --json | while IFS= read -r line; do
mime=$(printf '%s\n' "$line" | jq -r '.mimeType')
data=$(printf '%s\n' "$line" | jq -r '.data')
case "$mime" in
text/uri-list
# ignore files to keep copy/cut state
continue
;;
text/*)
;;
*)
continue
;;
esac
hash=$(printf '%s' "$mime"$'\0'"$data" | sha256sum | cut -d' ' -f1)
[ "$hash" = "$last_hash" ] && continue
last_hash="$hash"
printf '%s' "$data" | dms cl copy -t "$mime" >/dev/null 2>&1
done

授予可执行权限

Terminal window
chmod +x ~/.config/systemd/user/dms-clipboard.sh

新建 Systemd Unit

~/.config/systemd/user/dms-clipboard.service

写入

[Unit]
Description=DMS Clipboard Persistence Daemon
After=graphical-session.target
[Service]
Type=simple
ExecStart=%h/.config/systemd/user/dms-clipboard.sh
Restart=always
RestartSec=1
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=default.target

重载并启动服务

Terminal window
systemctl --user daemon-reload
systemctl --user enable --now dms-clipboard.service

自动启动 ~/.config/autostart/*.desktop#

Dex 可以自动解析并启动 .destkop 文件

Terminal window
sudo pacman -S dex

然后在

~/.config/niri/config.kdl

spawn-at-startup 附近写入

spawn-at-startup "dex" "~/.config/autostart/*.desktop"

解决非 UTC 时区用户 Linux 与 Windows 时间相差 UTC ±n\pm n 小时的问题#

在默认情况下, Linux 使用 UTC 硬件时钟, 而 Windows 使用本地时间硬件时钟. 当 Linux 同步网络时间并将当前 UTC 时间写入硬件时钟后, Windows 误认为当前的 UTC 时间为本地时间, 造成与实际时间存在不一致的情况

一般来说, 可以将 Windows 存储的硬件时间设置为 UTC 以解决问题. 在 Windows 上 (以管理员身份) 运行如下 CMD 命令, 即可添加注册表项以告知 Windows 使用 UTC 硬件时钟

Terminal window
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_QWORD /f

后重启计算机即可

在 Niri (DMS) 的最近窗口 (Alt+Tab) 中默认显示全部工作区的窗口#

~/.config/niri/config.kdl

recent-windows > binds 中找到对应的操作, 例如

// Override to disable super+tab
recent-windows {
binds {
Alt+Tab { next-window scope="output"; }
Alt+Shift+Tab { previous-window scope="ouput"; }
Alt+grave { next-window filter="app-id"; }
Alt+Shift+grave { previous-window filter="app-id"; }
}
}

并将 scope= 改为目标值, 例如 all, workspaceoutput

关闭 pipewire-pulse 会自动修改麦克风增益#

修改

/etc/pulse/daemon.conf

写入

flat-volumes = no
安装与初始化 CachyOS
作者
lovemilk (lovemilk233, lovemilk2333)
发布于
2026-03-03