Зажали клавишу — говорите. Отпустили — текст уже в буфере обмена, вставляйте через Ctrl+V куда угодно: в письмо, в мессенджер, в документ.
Страница проекта · In English · Краткая справка Markdown · llms.txt
Golos — бесплатная программа с открытым исходным кодом для голосового ввода текста на русском языке в Linux/X11. Зажмите правый Ctrl, скажите фразу и отпустите клавишу: GigaAM v3 локально распознает речь, поставит знаки препинания и положит текст в буфер обмена. После однократного скачивания модели интернет, видеокарта, регистрация и подписка не нужны. Аудио и распознанный текст на диск не записываются.
| Для чего | русская диктовка по удержанию клавиши на компьютере с Linux |
| Система | Linux/X11; установщик для Debian, Ubuntu, Mint и родственных систем |
| Распознавание | GigaAM v3 e2e-rnnt, ONNX int8, только русский |
| Измеренная скорость | RTF 0.31 на двухъядерном i7-2640M 2011 года |
| Ресурсы | 217 МБ на диске; ~65 МБ в ожидании / ~304 МБ с моделью |
| Приватность | локально; ноль соединений во время диктовки; аудио и текст не сохраняются |
| Цена и лицензия | бесплатно, MIT |
Один раз откройте терминал (Ctrl+Alt+T), скопируйте туда эти три строчки все сразу и нажмите Enter:
git clone https://github.com/geft1310-hue/golos.git
cd golos
./install.shУстановщик сам проверит, чего не хватает, и скажет, что делает. Он может один раз спросить пароль от компьютера — тот же, которым вы входите в систему; это нужно только если каких-то системных компонентов не окажется.
Скачается около 217 МБ — это сама модель распознавания. Один раз.
В конце спросит, запускать ли Golos автоматически при включении компьютера. Ответить можно и потом — этот переключатель есть в настройках программы.
Запустить сразу после установки:
./run.shВозле часов появится значок микрофона — значит, всё готово.
Нужен Linux с графическим сервером X11, микрофон и примерно гигабайт свободной
памяти. Установщик рассчитан на Ubuntu, Mint, Debian и их родню (там, где команда apt).
Текущая версия на Wayland не работает.
Golos использует X11-механизм XGrabKey, чтобы узко захватить одну удерживаемую
клавишу. Универсального равноценного способа сделать тот же сценарий во всех
окружениях Wayland сейчас нет. Golos определяет Wayland при запуске и честно
об этом говорит, вместо того чтобы запуститься и молчать в ответ на нажатия.
Ubuntu, Fedora и многие свежие сборки GNOME и KDE по умолчанию используют Wayland. Выйдите из системы, на экране входа нажмите шестерёнку, выберите сеанс Xorg и войдите снова.
- Поставьте курсор туда, куда хотите написать текст.
- Зажмите правый Ctrl (тот, что справа от пробела) и не отпускайте.
- Внизу экрана появится окошко:
● Запись, бегущие полоски и таймер. - Говорите.
- Отпустите клавишу. Окошко покажет
Распознаю…, потом✓ Скопировано. - Нажмите Ctrl+V.
Полоски в окошке — не украшение. Это проверка, что микрофон вас слышит. Если он
молчит, надпись честно поменяется на ● Не слышу — значит, дело в микрофоне,
а не в распознавании.
Говорить можно сколько угодно: длинная речь автоматически режется по паузам между
фразами и склеивается обратно, ничего не теряется. При долгой диктовке в углу
окошка появится счётчик вида 2/3 — это куски, а не ошибка.
Короткое случайное касание клавиши (меньше трети секунды) игнорируется, чтобы программа не дёргалась зря.
| Пункт меню | Что делает |
|---|---|
| Скопировать последний текст | Вернуть в буфер то, что распознали до этого |
| Настройки… | См. ниже |
| Пауза (не слушать клавишу) | Отпускает горячую клавишу, чтобы она снова работала как обычная |
| Выход | Закрыть программу |
Во время записи значок меняется — видно, что микрофон включён.
- Клавиша для диктовки — нажмите «Назначить» и нажмите желаемую клавишу. Лучше выбирать клавишу, которая сама по себе ничего не делает: правый Ctrl, правый Alt, клавиша с меню. Обычные буквы назначать не стоит — вы не сможете их печатать.
- Микрофон — если их несколько.
- Распознавание — три варианта: «точнее, со знаками препинания» (по умолчанию), «быстрее, тоже со знаками препинания» и «самая быстрая, без знаков препинания». Разница между первыми двумя — примерно полсекунды на каждые десять секунд речи и чуть больше ошибок у быстрого. Менять стоит, только если ждать действительно долго. Каждый вариант при первом выборе один раз скачивается (около 215 МБ), программа спросит согласия и покажет, сколько качать.
- Освобождать память после простоя — через сколько минут выгружать модель из памяти. По умолчанию 5 минут. Выключать не рекомендуется: модель занимает около 270 МБ, а при следующем нажатии клавиши она подгружается заранее, пока вы говорите, так что задержки вы не заметите.
- Очищать буфер обмена через N секунд — по умолчанию выключено. Полезно, если диктуете что-то, чему не место в буфере надолго. Чужой скопированный текст программа не тронет — очищается только то, что положила она сама.
- Запускать при входе в систему.
Написано честно, включая неудобное.
- Не выходит в интернет. Проверено на работающей программе: сетевых соединений
ноль, открыты только внутренние каналы к экрану, звуку и панели задач.
Распознавание целиком локальное. Единственное исключение — разовое скачивание
модели, и его делает отдельная программа (
tools/fetch_models.py): её запускает установщик, а потом — только вы сами, если смените вариант распознавания в настройках. В самой диктовке кода для работы с сетью нет вообще, поэтому «ноль соединений» — проверяемый факт, а не обещание. - Не пишет вашу речь на диск. Звук живёт только в памяти и обнуляется сразу после распознавания. Файлов записи не остаётся.
- Не сохраняет распознанный текст. История последних 20 фраз (для пункта «скопировать последний текст») держится в памяти и стирается при выходе. Проверено поиском по диску: продиктованная фраза-маркер не находится нигде.
- Не отдаёт текст менеджеру буфера обмена «на хранение». В Linux программа может попросить систему запомнить скопированное так, чтобы оно пережило её закрытие — и тогда продиктованное осело бы в истории буфера, то есть на диске. Golos такой запрос не делает намеренно.
- Не пишет ваш текст в журнал. В логи попадает только длина распознанного («распознано символов: 43»), а не сам текст.
Программе нужна одна клавиша на всю систему, и она берёт её самым узким способом,
какой есть в X11: просит у системы конкретно эту клавишу, а не поток всех нажатий
(как делают многие подобные программы через библиотеку pynput — те видят вообще всё,
что вы печатаете, включая пароли).
Но полной изоляции здесь не бывает, и вот что показал эксперимент на этой машине:
Пока горячая клавиша удерживается, остальные нажатия достаются Golos и до активного окна не доходят. В проверке из трёх синтезированных нажатий в поле ввода не дошло ни одного, а перехватчик увидел все три.
Что это означает на практике:
- Пока вы держите правый Ctrl, печатать не получится — буквы не появятся в окне, куда вы печатаете. Это не поломка, а свойство того, как X11 устроен. Отпустите клавишу — всё сразу работает как обычно.
- Формально в этот момент программа видит нажатия. Поэтому в коде чужие нажатия отбрасываются первой же строкой обработчика: не сохраняются, не разбираются, не логируются ни на каком уровне. Смотреть на них нечему и негде.
- Окно диктовки при этом ничего не перехватывает — важно, что запись идёт в момент, когда вы говорите, а не печатаете.
Так устроена любая программа с глобальной горячей клавишей под X11 — просто про это обычно не пишут. Под Wayland такое в принципе невозможно.
Файлы модели скачиваются с Hugging Face один раз, из репозитория с зафиксированным номером версии. При каждом запуске программа сверяет контрольные суммы файлов и сообщит, если что-то изменилось.
Формат ONNX выбран сознательно: это описание вычислений, а не программа — из него ничего не запускается. Официальный способ загрузки GigaAM выполнял бы скачанный python-код на вашем компьютере; здесь этого не происходит.
Папки ~/.config/golos и ~/.local/share/golos создаются с правами, при которых
их не видит никто, кроме вас.
Значок не появился, в терминале ругань про клавишу. Правый Ctrl уже занят другой программой. Откройте настройки и назначьте другую клавишу — например, правый Alt.
Окошко появляется, но полоски не двигаются и написано «Не слышу». Дело в микрофоне, не в программе. Проверьте в системных настройках звука, что выбран нужный микрофон и он не выключен. В настройках Golos можно выбрать конкретное устройство.
Первое распознавание после долгого перерыва идёт чуть дольше. Так и задумано: модель освобождает память, когда не используется, и подгружается обратно. Загрузка идёт одновременно с вашей речью, поэтому обычно вы её не замечаете — но если сказать одно короткое слово, задержка будет заметна.
Написано «Ничего не распознано». Либо было слишком тихо, либо клавишу отпустили раньше, чем начали говорить.
Хочу временно вернуть обычный правый Ctrl. Значок возле часов → «Пауза». Программа физически отпускает клавишу, а не делает вид.
Совсем убрать из автозапуска.
Настройки → снять «Запускать при входе в систему». Или удалить файл
~/.config/autostart/golos.desktop.
Замерено на этой машине (i7-2640M 2011 года, 2 ядра, 8 ГБ памяти — то есть на слабом железе; на более новом будет быстрее).
| Что | Сколько |
|---|---|
| Память, когда программа ждёт | ~65 МБ |
| Память, когда модель загружена | ~304 МБ |
| Возвращается системе при выгрузке | 238 из 273 МБ |
| Загрузка модели с диска | 1.7–1.9 с (успевает, пока вы говорите) |
| Скорость распознавания | ~0.31 — то есть 10 секунд речи распознаются за 3.1 с |
| Место на диске | 217 МБ на модель |
| Сетевой обмен во время работы | ноль |
Программа — один процесс. Пока вы не нажали клавишу, микрофон не открыт, модель не загружена, и она практически ничего не потребляет.
golos/
├── __main__.py связывает всё вместе, главный цикл окон
├── hotkey.py перехват клавиши (X11 XGrabKey)
├── audio.py микрофон и данные для полосок
├── asr.py распознавание, ленивая загрузка, нарезка длинной речи
├── clipboard.py буфер обмена и история в памяти
├── config.py настройки в ~/.config/golos/config.json
└── ui/ окошко с эквалайзером, значок, настройкиТяжёлая работа вынесена в отдельные потоки, окно рисуется отдельно — поэтому интерфейс не подвисает во время распознавания.
В папке bench/ лежат скрипты, которыми всё вышеперечисленное измерялось —
их можно перезапустить в любой момент:
| Скрипт | Что проверяет |
|---|---|
benchmark.py |
скорость и память на разных настройках |
test_asr.py |
что распознавание работает и длинная речь режется по паузам без потерь |
test_memory.py |
что память действительно возвращается системе |
test_privacy.py |
что продиктованное не оседает на диске |
test_grab_exposure.py |
куда уходят нажатия во время удержания клавиши |
test_hotkey.py |
что удержание даёт ровно одно нажатие, без автоповтора |
test_audio.py |
что микрофон слышит и полоски считаются верно |
test_overlay.py |
что окошко не ворует фокус |
test_platform.py |
что X11, Wayland и запуск без экрана различаются верно |
Запускать так: .venv/bin/python bench/test_privacy.py
Нет. Golos работает на процессоре. Замер RTF 0.31 получен на двухъядерном ноутбучном процессоре 2011 года.
Нет. Распознавание локальное, PCM-буфер обнуляется после обработки, распознанный текст живёт только в RAM. Отдельная программа один раз выходит в сеть, чтобы скачать модель.
Wispr Flow требует интернет и всегда распознаёт речь в облаке, а Linux не поддерживает. Superwhisper умеет работать локально, но официальной версии для Linux у него тоже нет. Golos бесплатен, локален и сделан для Linux/X11, зато понимает только русский и имеет меньше функций. Ссылки на первоисточники есть в полном сравнении.
Для интерактивной русской диктовки на процессоре GigaAM намного быстрее в указанном независимом замере. Whisper разумнее для множества языков, видеокарты и некоторых шумных записей.
Для автоматических помощников: русская Markdown-справка · llms.txt · расширенный контекст.
| 🐧 Linux (X11) | работает, это и есть текущая версия |
| 🪟 Windows с установщиком | в работе |
| 🤖 Android — голосовой клавиатурой | в работе. Заменит кнопку микрофона Google в любом поле ввода, но со знаками препинания |
| 🌊 Wayland | невозможно, пока не появится соответствующая возможность в самом Wayland |
Если попробовали и что-то не заработало — напишите об этом в Issues. Такие сообщения полезнее всего.
Модель GigaAM v3 — SberDevices, лицензия MIT. Запуск без PyTorch — onnx-asr, лицензия MIT. Сам Golos — тоже MIT: берите, копируйте, переделывайте.