如何在 Linux 上实现屏保

1986 字
10 分钟
如何在 Linux 上实现屏保
Note

此教程实现的最终效果灵感来源于 Omarchy 屏保,且实现的桌面环境为 KDE Plasma,在其他桌面环境下的效果暂未可知。

对于很多 Linux 极客与桌面美化爱好者来说,Omarchy 发行版中最吸睛的特色之一,莫过于其独具一格的终端 ASCII 字符屏保。在系统空闲进入待机状态时,全屏黑底终端缓缓浮现出炫酷的 ASCII 艺术字,伴随着各种粒子流动、解密扫描、雨滴坠落等终端视觉特效轮番登场;只需轻触任意按键,便能毫无滞后感地唤醒系统并回到工作桌面。

然而,Omarchy 默认深度绑定了 Hyprland 及其定制环境。那么,在主流且强大的 KDE Plasma 桌面环境下,我们能否复刻出同样行云流水、极客范十足的字符动画屏保呢?

答案是肯定的。本文将带大家通过 GPU 加速终端 Kitty、高性能终端特效引擎 ttfx 以及 KDE Plasma 自带的电源管理机制,打造一个专属于自己的终端字符屏保。同时,考虑到不同用户的 Shell 使用习惯,本文提供同时兼容 Bash 与 Fish 的两套脚本实现。

核心工具与原理解析#

整套方案的核心实现非常轻量,仅依赖几个优秀的开源工具与系统原生功能:

  1. 终端模拟器:Kitty

    Kitty 是一款基于 GPU 加速的跨平台现代化终端模拟器。它具备极快的启动速度,并且原生支持 --start-as=fullscreen(启动即全屏)与 --override background_opacity=1(强制覆盖背景为纯黑不透明,避免桌面壁纸透出)。

  2. 字符特效引擎:ttfx

    ttfx 是知名终端视觉特效项目 TerminalTextEffects (TTE) 的 Rust 高性能实现。相较于 Python 原版,Rust 编写的 ttfx 是单个自包含的可执行静态二进制文件,启动飞快且内存占用极低,内置数十种视觉效果,极其适合屏保循环渲染。

  3. 空闲触发器:KDE Plasma 系统设置中的电源管理

    KDE Plasma 自带的「电源管理」模块内置了空闲动作监听,支持在系统空闲指定分钟后执行自定义脚本,无需额外安装复杂的空闲守护进程。


准备工作#

1. 安装 Kitty#

在大多数主流 Linux 发行版中,Kitty 均可通过系统包管理器直接安装:

Terminal window
sudo pacman -S kitty
Terminal window
sudo dnf install -y kitty
Terminal window
sudo apt update && sudo apt install -y kitty
Tip

也可以参考 Kitty 官方安装指南 使用官方独立安装脚本进行安装。

2. 安装 ttfx#

ttfx 采用 Rust 编写,推荐直接通过 Rust 的包管理器 cargo 进行安装:

Terminal window
cargo install ttfx

安装完成后,请确保 ~/.cargo/bin 已经加入到你的系统 PATH 环境变量中。

可以通过运行 ttfx --help 检查是否安装成功。若成功安装,可以看到包含 beams、blackhole、decrypt、fireworks、matrix 等数十种动效子命令的帮助文档。

Note

如果你的系统尚未配置 Rust 环境,也可以前往 omacom/ttfx Releases 下载预编译的二进制包,或使用 upstream Python 版本的 TerminalTextEffects(pip install terminaltexteffects)。

3. 准备 ASCII 艺术字文本#

我们需要一份作为屏保展示内容的纯文本文件。你可以使用 FIGlet、toilet 或在线 ASCII Art 生成器制作自己的名字、Logo 或座右铭。

创建保存屏保文本的目录,并将 ASCII 艺术字保存至 ~/.local/share/screensaver/<文件名>.txt:

Terminal window
mkdir -p "$HOME/.local/share/screensaver"
cat << 'EOF' > "$HOME/.local/share/screensaver/black-cyan.txt"
____ __ ___ ________ __________ _____ _ __
/ __ )/ / / | / ____/ //_/ ____/\ \/ / | / | / /
/ __ / / / /| |/ / / ,< / / \ / /| | / |/ /
/ /_/ / /___/ ___ / /___/ /| / /___ / / ___ |/ /| /
/_____/_____/_/ |_\____/_/ |_\____/ /_/_/ |_/_/ |_/
EOF
Terminal window
mkdir -p $HOME/.local/share/screensaver
printf '%s\n' ' ____ __ ___ ________ __________ _____ _ __
/ __ )/ / / | / ____/ //_/ ____/\ \/ / | / | / /
/ __ / / / /| |/ / / ,< / / \ / /| | / |/ /
/ /_/ / /___/ ___ / /___/ /| / /___ / / ___ |/ /| /
/_____/_____/_/ |_\____/_/ |_\____/ /_/_/ |_/_/ |_/ ' > $HOME/.local/share/screensaver/black-cyan.txt

你可以根据个人喜好替换其中的字符内容。


编写屏保控制脚本#

创建脚本目录并新建屏保脚本 ~/.local/bin/ascii-screensaver。

由于不同 Shell 之间的语法差异,请根据你偏好的环境选择对应版本的脚本:

#!/usr/bin/env bash
kitty --start-as=fullscreen \
--class=ascii-screensaver \
--override background_opacity=1 \
bash -c '
bash -c "
while true; do
ttfx \
--canvas-width 0 \
--canvas-height 0 \
--anchor-canvas c \
--anchor-text c \
--reuse-canvas \
--random-effect \
-i \"$HOME/.local/share/screensaver/black-cyan.txt\"
done
" &
anim_pid=$!
read -s -n 1 -r key
pkill -TERM -P "$anim_pid" 2>/dev/null
kill "$anim_pid" 2>/dev/null
wait "$anim_pid" 2>/dev/null
'
#!/usr/bin/env fish
kitty --start-as=fullscreen \
--class=ascii-screensaver \
--override background_opacity=1 \
fish -c '
fish -c "
while true
ttfx \
--canvas-width 0 \
--canvas-height 0 \
--anchor-canvas c \
--anchor-text c \
--reuse-canvas \
--random-effect \
-i \"$HOME/.local/share/screensaver/black-cyan.txt\"
end
" &
set anim_pid $last_pid
read -s -n 1 key
pkill -TERM -P $anim_pid 2>/dev/null
kill $anim_pid 2>/dev/null
wait $anim_pid 2>/dev/null
'

脚本关键参数解析#

  • Kitty 启动参数:
    • --start-as=fullscreen:启动时强制进入全屏状态,遮蔽任务栏与顶栏。
    • --class=ascii-screensaver:指定窗口类名,方便后续有需要时在窗口管理器中单独针对该类名编写规则。
    • --override background_opacity=1:强制将背景不透明度设为 1.0(纯黑不透明)。即使你日常使用的 Kitty 终端设置了毛玻璃或半透明背景,屏保启动时也不会透出桌面内容。
  • ttfx 动效参数:
    • --canvas-width 0 与 --canvas-height 0:将画布大小自适应设置为全终端窗口尺寸。
    • --anchor-canvas c 与 --anchor-text c:分别将画布和文本锚点定位在正中心(Center),保证文本在屏幕居中显示。
    • --reuse-canvas:动效交替时复用当前画布,避免全屏闪烁。
    • --random-effect(或 -R):每次循环随机挑选不同的字符动画效果。
    • -i "$HOME/.local/share/screensaver/black-cyan.txt":指定读取的 ASCII 艺术字文件路径。

赋予执行权限并测试#

为脚本赋予可执行权限:

Terminal window
chmod +x ~/.local/bin/ascii-screensaver
Tip

请确保 ~/.local/bin 在当前系统的环境变量 PATH 中。 此时你可以直接在终端中输入 ~/.local/bin/ascii-screensaver 进行测试。若配置无误,屏幕将立刻切换为全屏 ASCII 动效;敲击键盘任意键即可退出。


在 KDE Plasma 中配置空闲自动触发#

编写好脚本后,只需将其交由 KDE Plasma 的电源管理接管即可。

  1. 打开 系统设置。
  2. 在左侧导航栏中找到 系统 -> 电源管理。
  3. 将 空闲时 下拉选项设置为需要的超时时间(例如:空闲 5 分钟后运行)。
  4. 在下方的可执行文件路径框中,点击「选择…」或者直接填入脚本路径:
    ~/.local/bin/ascii-screensaver
    (或者完整绝对路径,如 /home/black/.local/bin/ascii-screensaver)。
  5. 点击右下角的 应用(A) 保存配置。

KDE Plasma 电源管理配置
KDE Plasma 电源管理配置

配置完成后,当系统静置无操作达到设定时间(例如 5 分钟)后,KDE Plasma 便会自动唤起全屏终端屏保。


进阶技巧:绑定快捷键#

除了等待系统空闲自动触发外,你还可以像 Omarchy 一样为屏保设置一个随时随地手动触发的全局快捷键:

  1. 打开 系统设置 -> 键盘 -> 快捷键 -> 新增。
  2. 添加一个新的命令快捷键:
    • 名称:ASCII Screensaver
    • 命令:~/.local/bin/ascii-screensaver
    • 触发快捷键:例如 Meta + S(即 Super + S)。

保存后,只需按下快捷键,即可一键进入屏保模式。


总结#

通过现代化的 GPU 终端 Kitty 搭配 ttfx 强大的文本特效引擎,再结合 KDE Plasma 原生易用的电源管理与空闲动作,我们无需安装庞杂繁琐的第三方屏保管理器,就能在任何常规 Linux 桌面环境下轻松复刻出 Omarchy 般炫酷的字符屏保。

无论是想要展示个性化的 ASCII Logo,还是享受终端字符带来的视觉盛宴,赶紧去打造属于你的终端字符屏保吧!

支持与分享

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

打赏
如何在 Linux 上实现屏保
https://blog.blackcyan.top/posts/custom-screensaver-kde-plasma/
作者
墨青BlackCyan
发布于
2026-10-16
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
墨青BlackCyan
三点几了,饮茶先啦
公告
欢迎来到墨青的博客!
分类
标签
站点统计
文章
12
分类
3
标签
50
总字数
9,563
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.10
文章许可
CC BY-NC-SA 4.0