В прошлой статье я подробно рассказал про свою макрос-клавиатуру: про железо, характеристики и немного затронул ваши комментарии 🙂 ссылка на статью. И теперь пришло время рассказать про софт.
Привет, Хабр!
В прошлой статье я подробно рассказал про свою макрос-клавиатуру: про железо, характеристики и немного затронул ваши комментарии 🙂 ссылка на статью
И теперь пришло время рассказать про софт.
Почему лично для меня софт — это очень важная часть клавиатуры.
Я считаю что , как бы хорошо была собрана макрос-клавиатура, без нормального и удобного софта она остаётся просто набором кнопок. Да, удобным, но всё равно ограниченным. Ведь именно в софте ты видишь фирменный стиль, графику и подход к деталям, шрифты и фирменные цвета. Это первое, с чем пользователь взаимодействует осознанно.
Даже в магазине, выбирая пакет молока, мы в первую очередь смотрим на дизайн упаковки — часто вообще подсознательно. И если дизайн «так себе», появляется ощущение, что и само молоко будет таким же.
Если на упаковке сделали всё спустя рукава, то и на производстве, скорее всего, не заморачивались. Не факт конечно! но ощущение возникает именно такое.
С софтом всё работает точно так же. Он либо вызывает доверие и желание работать дальше, либо сразу оставляет чувство «ну такое».

Приложение 23procg
Почему QMK / VIA шляпа!Я с уважением отношусь к людям, которые делают QMK и VIA. Для кастомных клавиатур они закрывают огромное количество задач. Когда я начинал свой проект в 2020 году, у QMK и VIA не было нормальной поддержки крутилок. А для меня энкодеры — это важно!
Также с инженером мы изначально планировали уходить от Arduino и подобных микроконтроллеров в сторону собственного чипа. Вложить столько сил в железо и при этом не сделать свой софт? Это как-то не солидно.
Плюс есть ещё момент с санкциями и всей этой историей. Если бы я заточил клавиатуру под QMK или VIA, а потом из-за внешних ограничений что-то пошло не так, вполне мог бы возникнуть сценарий, при котором устройства у людей просто превратились бы в «тыкву» — без возможности обновления и поддержки. Вероятность небольшая, но прецеденты есть. Достаточно вспомнить, как некоторые проекты на Linux в определённый момент ограничили доступ для пользователей из России.
С чего я началТак как я дизайнер и в своей карьере я делал сайты для сервисов доставки, проектировал приложения с анимацией для Татнефти и Лукойла. Поэтому сделать приложение для себя было несложно и, что важнее, действительно интересно.

дерево вариантов дизайна
Так как я не программист, я выбрал Python — он прост для входа и хорошо подходит для быстрого прототипирования. Ключевым фактором стала кроссплатформенность: хотелось писать один код и сразу получать результат и на Windows, и на macOS.
В качестве первой библиотеки я выбрал Tkinter. Она простая, но на старте полностью закрывала мою задачу. PyQt5 тогда казалась сложной. Сейчас, поработав с PyQt6, я понимаю, что этот путь был возможен, но учить язык и одновременно осваивать сложную библиотеку на старте было бы тяжелее. На данный момент софт пишется на CustomTkinter, это хорошая библиотека.
Связь между клавиатурой и программой
первый рабочий код, отправляет текст из ентри в сериал и дальше на ардуйно
Приложение и клавиатура общаются через простой текстовый синтаксис команд. Отправляемый из приложения через serialport на клавиатур Например, команда @key1_shift+r говорит устройству: «назначь на первую клавишу макрос Shift + R». Клавиатура сама разбирает команду, сохраняет её и выполняет без участия компьютера.
Жёсткое разделение ответственности
софт — UI, логика, удобство;
клавиатура — исполнение, скорость, стабильность.
Независимость от платформы
сегодня Python + Tkinter,
завтра хоть C++, Swift или веб-интерфейс.
Протокол не меняется.
Прошивка не зависит от UI
софт можно переписать,
клавиатура продолжит работать без него.

Выбор набора
Приложение сейчас выглядит так.
Для начала в среднем левом блоке выбирается набор макросов, который будет использоваться. Доступно два набора — первый и второй. На самой клавиатуре они идентифицируются цветами: зелёным и фиолетовым. Это сделано специально, чтобы во время работы сразу было понятно, какой набор активен, без необходимости смотреть в софт.
После выбора набора в правом большом блоке открывается сетка клавиш, стилизованная под физическую клавиатуру. Вокруг неё дублируется цвет активного набора — ещё один визуальный маркер, который помогает не ошибиться при редактировании. Если требуется настроить крутилки, достаточно нажать на элементы в виде энкодеров — интерфейс автоматически переключается в режим редактирования крутилок.

Нижний блок
Нижний правый блок — это редактор макросов.
Разберём его слева направо.
Сначала идут чекбоксы модификаторов — системных и функциональных клавиш, таких как Ctrl, Shift, Alt и других. Они позволяют быстро собрать комбинации без ручного ввода.
Далее расположен выбор типа нажатия.
Режим «Одно нажатие» делает клавишу обычной — она срабатывает как стандартная кнопка.
Режимы «Удержание» и «Два нажатия» работают в паре и задают альтернативную логику. Клавиша с таким режимом больше не ведёт себя как простая: на ней одновременно существуют два макроса — один для короткого удержания и второй для двойного нажатия.
Ниже находится поле ввода текста. Оно используется как для простых комбинаций вроде Ctrl + C, так и для ввода полноценного текста или паролей.
В финале можно либо полностью очистить клавишу, либо сохранить готовый макрос, назначив его на выбранную кнопку.

Сохранение макроса
Итак, что готовится к релизу и что бы я хотел поправить.
В первую очередь сейчас делается библиотека макросов. Базовое приложение уже готово, и из-за этого приходится проходиться почти по всему софту заново, аккуратно приводя всё к единой логике. Это не самая быстрая часть работы, но без неё релиз просто не имеет смысла — макросы должны быть переиспользуемыми, а не существовать каждый сам по себе.
Отдельная история — работа с подсветкой. С функциональной точки зрения в клавиатуре уже есть всё необходимое, но с дизайном интерфейса для этого блока я долго не мог определиться. В итоге подсветка так и осталась в статусе «не доведено», хотя технически она полностью работает. Это тот случай, когда код готов, а визуальная часть всё ещё ждёт своего решения.
Из явных вещей, которые хочется добавить, — drag & drop. Идея простая: брать готовый макрос и просто закидывать его на нужную клавишу, без лишних кликов и сохранений. Это сильно ускорит работу, особенно когда макросов становится много.
Ещё один важный момент — запись макросов. В идеале хочется, чтобы программа просто «слушала» клавиатуру, пока пользователь вводит комбинацию в поле ввода, и сама превращала это в макрос. Но тут уже появляются ограничения: такие механики часто триггерят антивирусы, и есть риск, что приложение начнут блокировать или помечать как подозрительное.
Я довольно громко прошёлся в заголовке и в начале статьи по QMK и VIA, но на самом деле мне на них пох**. Я делаю свою макрос-клавиатуру, в которую уже вложено много сил и времени. И если уж силы нашлись на железо, то на софт они точно найдутся.
Для меня собственное приложение — это не «альтернатива» существующим решениям, а логичное продолжение устройства. Оно живёт вместе с клавиатурой и развивается под реальные рабочие сценарии, а не под универсальный набор фич «для всех».
Отсюда и мысль про расширяемость. Функциональность софта можно и нужно развивать: добавить трекер рабочего времени, простой таск-менеджер или другие инструменты, которые реально помогают в работе. Всё-таки клавиатуру покупает человек, который проводит за ней часы, и лёгкий софт в комплекте может стать полезным дополнением, а не просто утилитой для настройки кнопок.
Ну и, конечно, ИИ-помощники. Сейчас без них уже никуда. И я вполне допускаю, что со временем в софте появится какая-нибудь киллер-фича, встроенная не ради галочки, а органично — как часть рабочего процесса.
Спасибо, что дочитали! обнял приподнял, ушел делать клавиатуру дальше :-)
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Макрос-клавиатура которую я делал 5 лет | 0 | 16.98 | 17-01-2026 |
| 2 | Товароучёт + Честный Знак: как написать свое ПО для работы с маркировкой настольных игр | 0 | 8.23 | 14-07-2026 |
| 3 | Linux диванного гитариста. Часть 2. Кемпер для бедных | 0 | 9.13 | 11-05-2026 |
| 4 | Индикация смены раскладки клавиатуры в виде лампы с RGB-светодиодом для Gnome | 0 | 8.97 | 13-02-2026 |
| 5 | Гайд по безопасности вайб-кодинга: что сделать, чтобы не слить данные в прод | 0 | 7.56 | 26-06-2026 |
| 6 | How White Label Prop Firm Software Took Over This Market? | 0 | 8.57 | 06-08-2026 |
| 7 | Как я устал от CVAT и в соло написал десктопный инструмент для авторазметки датасетов на PyQt5 | 0 | 9.01 | 01-07-2026 |
| 8 | Инвертируем зависимости одного FastAPI-эндпоинта | 0 | 12.98 | 23-06-2026 |
| 9 | Изучаем возможности Matrix SDK для Rust | 0 | 10 | 07-07-2026 |
| 10 | Epomaker EA75 Max Keyboard Review (PC) | 0 | 9.72 | 21-07-2026 |