Матричный дождь как скринсейвер и полноценный локер экрана для X11 — с русскими заголовками, которые дождь «расшифровывает» прямо на лету.
English version → · Установка и настройка → · Архитектура →
Потоки кода текут горизонтально, слева направо — и по пути «прорисовывают» заголовок: перед проявляющимся текстом бежит мерцающий матричный скрэмбл, осевшие буквы остаются другим цветом. Кириллица — собственная, нарисованная в стиле Matrix-Code: монолинейный штрих 123/1024 em, квадратные терминалы, срезы 45° вместо кривых.
Рендер — порт GPGPU-пайплайна Rezmason/matrix (дождь, bloom, палитра, MSDF-глифы) с WebGL/regl на Python + moderngl (OpenGL 3.3 core). Логика проявления текста вдохновлена meanwhile.
Всё работает без интернета: ни один процесс проекта не ходит в сеть.
- Единое пространство на всех мониторах. Потоки дождя свободно пересекают границы экранов: каждый процесс-рендерер детерминированно считает симуляцию всего «мира» от общей базы времени и рисует только свой кроп. Мониторов может быть сколько угодно (RandR-автодетект), в том числе с разной ориентацией.
- Заголовки из любой SQLite-базы. Укажите файл и имена колонок — сейвер будет показывать свежие записи за последние N часов, перечитывая базу раз в час. Базы нет? Работает на встроенных фразах.
- Настоящий локер на базе xsecurelock:
перехват ввода, устойчивость к падениям и проверка системного пароля через
PAM — а вид наш: дождь во весь экран и диалог
SYSTEM FAILURE. - Аккуратная типографика. Длинные заголовки разбиваются на две сбалансированные строки по границе слова; фраза никогда не рвётся между мониторами и не появляется на ещё не прорисованном поле.
- Bloom как в фильме — highpass → пирамида размытий → композит; палитры (classic-green, amber, ice-blue, red или своя) и десятки параметров в одном прокомментированном TOML.
- Свой шрифт можно перерисовать: глифы заданы осевыми скелетами в обычном Python-файле, пересборка атласа — одна команда.
![]() |
![]() |
| Сейвер: фразы проявляются сквозь дождь | Локер: ввод пароля, дождь заморожен |
| ОС | Linux + X11 (любой WM; разрабатывалось на DWM). Wayland не поддерживается |
| GPU | OpenGL 3.3+ — подойдёт любой Mesa/NVIDIA этого десятилетия |
| Python | 3.11+ |
| Сборка | cmake, g++, make, curl, git — для msdfgen (генератор атласа) |
| Локер | xsecurelock + xss-lock из репозиториев дистрибутива |
git clone https://github.com/HelpFreedom/matrix-rain-saver.git
cd matrix-rain-saver
./install.shinstall.sh идемпотентен и делает всё сам: создаёт venv на Python 3.11+, ставит
зависимости, собирает msdfgen, скачивает оригинальный матричный атлас и генерирует
объединённый атлас с кириллицей.
Подробности, включая ручную установку и автозапуск по простою, — в docs/INSTALL.md.
# Скринсейвер на все мониторы; выход по любой клавише или движению мыши
.venv/bin/python -m matrixrain --standalone
# Одно окно с заданной геометрией (для отладки и подбора настроек)
.venv/bin/python -m matrixrain --geometry 1920x1080+0+0Разовая настройка:
sudo apt install xsecurelock xss-lock
sudo install -m 644 xsecurelock/pam.d/xsecurelock /etc/pam.d/xsecurelockИспользование:
bin/matrix-lock # заблокировать сейчас
bin/matrix-lock --daemon # покажет команду xss-lock для автоблокировки по простоюПока экран заблокирован, идёт дождь. Окно ввода пароля появляется, как только вы
начинаете печатать пароль — первая же нажатая буква или цифра открывает диалог и
становится первым символом пароля. Движение мыши диалог не открывает (дождь просто
продолжается), Esc закрывает уже открытый диалог. Пока диалог открыт, дождь на
всех мониторах замирает.
Почему именно так, а не «по Esc»
xsecurelock запускает auth-модуль на любой ввод, но передаёт ему разбудившую
клавишу только если она печатная. Это его собственная защита (файл
auth_child.c, функция ContainsNonControl): управляющие клавиши, включая Esc,
отбрасываются всегда, а движение мыши вообще не даёт символов. Поэтому «открывать
окно по Esc» на xsecurelock технически невозможно — этот Esc до модуля не доходит.
Открытие по первой печатной клавише работает надёжно и заодно не теряет первый
символ пароля.
Разблокировка — вашим системным паролем: проверку выполняет штатный
authproto_pam, наш код к паролю не прикасается (и обнуляет буфер после
использования). Неверный пароль — красная вспышка рамки.
По умолчанию ([feed] db = "") базы нет и показываются встроенные фразы — проект
работает сразу после установки. Чтобы показывать свои записи, укажите любую
SQLite-базу с колонкой заголовка и колонкой времени:
[feed]
db = "~/.local/share/matrix-rain/headlines.db"
db_table = "posts"
db_title_column = "title"
db_time_column = "created_at"
window_hours = 20 # берём записи за последние 20 часов
refresh_seconds = 3600 # перечитываем раз в часФайл открывается только на чтение и никогда не изменяется. Строки с пустым
временем игнорируются, дубликаты схлопываются, мусор отсеивается регэкспами
exclude. Никакой базы в комплекте нет — источник данных полностью ваш.
Все параметры с комментариями — в config/default.toml: палитры, скорость и плотность дождя, размер глифов, тайминги проявления текста, bloom, поведение локера, а также переопределения для отдельных мониторов.
Скопируйте файл и правьте только нужные ключи:
mkdir -p ~/.config/matrix-rain
cp config/default.toml ~/.config/matrix-rain/config.tomlПорядок применения: встроенные значения → ваш файл → секция [monitor.<имя>] →
флаги командной строки.
Глифы заданы осевыми ломаными в atlas/skeletons.py — это обычные координаты в единичном квадрате. После правки:
.venv/bin/python atlas/build_atlas.py # пересобрать атлас
.venv/bin/python atlas/preview.py "ПРИВЕТ" # быстрый просмотр без GLЗабавный факт: в оригинальном наборе Matrix-Code нет цифры 6 — в нашем текстовом наборе она есть.
- Wayland не поддерживается — проект целиком построен на X11 (RandR, override-redirect окна, GLX). Портирование потребовало бы отдельного оконного слоя.
- Переключение на другой TTY (
Ctrl+Alt+F2) — общая особенность всех X11-локеров: сам локер его не блокирует. Доступа к вашей разблокированной сессии это не даёт (на других TTY требуется вход), но если нужен полный запрет — включитеDontVTSwitchв конфигурации Xorg. - Абсолютно «непреодолимого» локера в user-space не существует: пользователь с root-правами на машине может всё. Это верно для любого экранного локера.
- Автоматических тестов в репозитории нет — проверки выполнялись вручную.
Подробный разбор архитектуры — ARCHITECTURE.md: фрейм-граф рендера и все шейдеры, синхронизация процессов через flock и файловые флаги, протокол общения с PAM, генерация MSDF-атласа, и почему диалог локера рисуется дочерним окном saver'а (спойлер: композитор).
GNU General Public License v3.0 или новее.
Проект содержит порты MIT-лицензированного кода (Rezmason/matrix, meanwhile) — их копирайты сохранены в NOTICE, как того требует MIT.
Оригинальный матричный MSDF-атлас не хранится в репозитории: его скачивает
atlas/fetch_assets.sh при установке. Начертания матричных глифов восстановлены
сообществом из промо-материалов франшизы — учитывайте это при коммерческом
использовании.
- Black Triangle (@HelpFreedom) — автор и владелец проекта: постановка задачи, направление, дизайн-решения, приёмка.
- Claude (Anthropic) — реализация: порт рендер-пайплайна, оконный слой, генератор кириллического атласа, локер и документация.


