Double Shift RU/EN layout rescue для Linux
lay чинит слово, набранное не в той раскладке: нажал Shift два раза и
продолжил писать.
Статус: alpha. Основной сценарий уже рабочий. Главная зона активной доводки — автопомощь после пробела и редкие desktop edge cases.
curl -fsSL https://raw.githubusercontent.com/radislabus-star/lay-public/main/scripts/install-remote.sh | bashlay — локальный клавиатурный помощник для Linux-пользователей, которые пишут
на русском и английском вперемешку.
Главный сценарий:
Набрал: ghbdtn
Нажал: Shift Shift
Стало: привет
lay не использует буфер обмена для основного сценария и не требует облачной
модели. Он слушает физические клавиши локально, помнит короткий хвост набора и
при команде перепечатывает его в другой раскладке.
По умолчанию double Shift исправляет 1 последнее слово. Области 2 слова
и 3 слова можно включить отдельно в трее.
Установка одной командой:
curl -fsSL https://raw.githubusercontent.com/radislabus-star/lay-public/main/scripts/install-remote.sh | bashПосле установки выйди из сессии и зайди снова. Это нужно для группы input,
доступа к /dev/uinput и desktop-интеграции.
Проверка:
1. Включи русскую и английскую раскладки.
2. Набери ghbdtn.
3. Нажми Shift два раза.
4. Должно получиться привет.
Обновление:
cd ~/projects/lay && bash update.shВ GNOME и KDE обновление также доступно из меню трея: Проверить обновления.
- Double Shift исправляет последнее слово в другой раскладке.
- Replay физически перепечатывает хвост теми же keycode.
- Smart старается не трогать уже нормальные соседние слова.
- Помощь при наборе после пробела исправляет только уверенные ошибки.
- Автоподмена применяет точные пользовательские правила.
- ptah_alexs жёстко ставит раскладку для выбранных окон.
- Прямые RU/EN хоткеи могут включать конкретную раскладку без toggle.
- KDE/X11 backend есть, но покрытие меньше, чем у GNOME Wayland.
Пример Smart-сценария:
good ntrcn -> good текст
Здесь good остаётся на месте, а исправляется только ntrcn.
Для новой установки базовое поведение консервативное:
- double Shift включён;
- область double Shift —
1 слово; - автоматическая помощь после пробела выключена, пока пользователь сам её не включит;
- точная автоподмена выключена, пока пользователь сам её не включит;
- основной вывод идёт через
uinput; - сетевые LLM/API не используются.
Настройки хранятся в:
~/.config/lay/config.json
Основная проверенная среда: Ubuntu/GNOME Wayland с RU/EN раскладками.
Текущая матрица:
- GNOME Wayland — основной и самый зрелый путь.
- KDE/Plasma Wayland — поддерживается, но покрытие меньше.
- X11 — есть native XKB backend, проверяется как экспериментальный путь.
- Sway/Hyprland/другие WM — пока не заявлены как поддержанные.
- Языки — текущая цель только RU/EN.
Поддерживаемые backend'ы:
- GNOME: Shell extension, tray и DBus bridge для переключения раскладки;
- KDE/Plasma: отдельный
lay-kde-trayи переключение черезqdbus6; - X11: native XKB backend через
x11rb.
KDE и X11 уже рабочие, но они моложе GNOME-пути. Если что-то ломается в KDE, X11 или другой сборке Linux, лучше открыть issue с точным примером: что набрано, что ожидалось, что получилось.
Текущая цель проекта — качественная пара RU/EN.
Используется:
- физическое соответствие US ↔ RU;
- Hunspell-словари, если они есть в системе;
- локальные RU/EN правила;
- char n-gram и LEM scoring;
- пользовательские точные замены;
- пользовательский список защищённых слов.
Не заявлено как готовое:
- другие пары раскладок;
- полноценная грамматика русского языка;
- исправление целых абзацев;
- серые inline-подсказки прямо внутри поля ввода.
lay сознательно работает с коротким хвостом текста, который daemon видел через
evdev. Это делает основной сценарий быстрым, но задаёт границы:
- не исправляет произвольное слово под курсором после ручного перемещения;
- не меняет выделенный текст как универсальную функцию;
- не читает весь текст поля и не знает весь документ;
- Enter-autocorrect не включён в публичный стабильный UI, потому что evdev/uinput не может гарантировать порядок "исправить хвост, потом отправить Enter" во всех приложениях;
- IME/preedit и inline-подсказки рассматриваются только как отдельное экспериментальное направление, не как замена текущего быстрого пути;
- автопомощь после пробела остаётся консервативной: лучше пропустить сомнительный случай, чем самовольно испортить текст.
Основные пункты:
Помощь при наборе— осторожная правка после пробела.Автоподмена— точные пользовательские правила.Режим—ReplayилиSmart.Область— сколько слов брать для double Shift, по умолчанию1.Арбитр— LEM и auto-layout настройки.ptah_alexs— жёсткая раскладка по окну.Daemon— запуск, остановка и статус сервиса.О программе— версия, ссылка на GitHub и служебная информация.
lay можно использовать из терминала:
lay "Ye djn ghbvth"
# Ну вот пример
lay "руддщ цщкдв"
# hello world
echo "ghbdtn" | lay
# приветlay-daemon читает клавиатурные события локально, потому что иначе double
Shift rescue невозможен. По умолчанию он не отправляет набранный текст в сеть,
не требует удалённой модели и не ведёт полный keylog.
Опциональный learning log локальный и выключен по умолчанию:
~/.local/share/lay/corrections.jsonl
Диагностические файлы и счётчики тоже локальные:
~/.local/share/lay/recent_actions.jsonl
~/.local/share/lay/learning_candidates.json
~/.local/share/lay/stats.json
На Unix такие файлы создаются с правами 0600.
Стабильное ядро: ручной double Shift и локальная RU/EN конвертация.
Активно оттачиваются:
- автопомощь после пробела;
- пробелы и границы слов после автозамены;
- mixed RU/EN сценарии;
- KDE/X11 edge cases;
- работа в старых/особых текстовых полях;
- экспериментальный IME backend.
Если присылаешь bug report, укажи:
- что набрано;
- что ожидалось;
- что получилось;
- GNOME/KDE/X11 и версия системы;
- включены ли
Помощь при наборе,Автоподмена,Smart, LEM.
Приватный текст перед отправкой лучше заменить на безопасный пример.
- Как это работает
- Проверочный список архитектуры
- Multi-tap Shift scope
- Research: Linux input correction best practices
- Публичные материалы
cargo test
cargo build --release
bash install.shПолная локальная проверка перед публикацией:
scripts/check-lay-full.shlay is a local Double Shift RU/EN layout rescue tool for Linux desktops.
Main workflow:
Typed: ghbdtn
Press: Shift Shift
Result: привет
Quick install:
curl -fsSL https://raw.githubusercontent.com/radislabus-star/lay-public/main/scripts/install-remote.sh | bashAfter installation, log out and log back in so the input group, /dev/uinput
permissions, and desktop integration are picked up.
Main tested target: GNOME Wayland with RU/EN layouts. KDE/Plasma Wayland is supported with a smaller compatibility matrix. X11 has a native XKB backend and is treated as experimental. Other layouts and non-RU/EN pairs are not supported yet.
Known limitations: lay works on a short typed tail, not arbitrary selected
text or the whole document. Enter autocorrect and IME/preedit-style inline
assistance are experimental directions, not the stable default path.
By default lay does not use cloud APIs, does not require an LLM, and does not
send typed text anywhere.
MIT
