Механическая Клава. Выбираем клавиатуру, компоненты и моды

Клавиатуры, как известно, бывают разные: подешевле и попроще из компьютерных магазинов и кастомные — их собирают вручную. Каждая такая клавиатура по‑своему уникальна. Создание кастомных клавиатур — это целый увлекательный мир со своими особенностями и нюансами. Сегодня я расскажу тебе о рынке кастомов, раскладках клавиатур, устройстве корпусов, модах и аксессуарах.
info
О достоинствах механических клавиатур и их устройстве читай в предыдущей статье: «Механическая Клава. Как, зачем и из чего собирать свою клавиатуру».
Масс-маркет-клавиатуры
Напишу несколько строк только о тех масс‑маркет‑клавиатурах, которые не вызывают чувства печали (а какие‑то даже радуют за свои деньги). Учитывая, что я не первый год работаю с механическими клавиатурами, с большинством из них я сталкивался лично. Сталкивался — это значит оказывал техподдержку, ремонтировал их, модифицировал, обслуживал и просто пользовался ими не один день. Итак, поговорим о хороших брендах из категории масс‑маркета.
Varmilo
«Вармилки» могут похвастаться отличным крепким корпусом и крутыми кейкапами разнообразных расцветок. Легенды на кейкапах напечатаны сублимацией, причем напечатаны хорошо. Края легенд резкие и четкие, что свидетельствует о вдумчивом подходе к делу: немногие производители умеют хорошо печатать легенды методом сублимации. Кейкапы имеют свой уникальный профиль, напоминающий классический «Черри», но площадки под пальцы у Varmilo шире. Печатать на такой клавиатуре удобно. Еще в этих клавах с завода установлены неплохие смазанные стабилизаторы.

Теперь о плохом: у Varmilo нет никакого софта, а школьники или бухие мужики каким‑то образом постоянно зажимают комбинации свапа клавиш Win с Fn либо вовсе вырубают кнопку Win, вызывая рыдания у сотрудников техподдержки. Потому что разобраться с проблемой юзеры не в состоянии, даже с инструкцией. Это беда. Кроме этих фишек и управления мультимедиа через зажатый Fn, клавиатура не умеет вообще ничего.
Она становится совершенно беспомощной, если ты хочешь сделать собственную раскладку или назначить клавишам свой макрос. «Вармило» используют переключатели Cherry. Не лучшие переключатели, по крайней мере на 2022 год. Они не имеют смазки, из‑за чего при печати даже на сайлент‑переключателях раздается бешеный лязг и звон пружин — это ужасно. Нюанс: после смазки переключатели «Черри» внезапно становятся очень приятными по тактильным ощущениям и звучат отлично.
Leopold
Это клавиатуры для настоящих мужчин. Классический дизайн корпуса, нестандартный профиль кейкапов под названием Step Sculpture 2. Он напоминает профиль Cherry, но немного пониже. В качестве метода нанесения легенд используется Double Shot. Причем легенды получаются высокого качества, но все же не идеального. Количество расцветок этих клавиатур и кейкапов сильно ограничено, и все они, прямо скажем, на большого любителя.

«Леопольды» используют переключатели Cherry, которые я уже упоминал. У «Лео» нет никакого софта или комбинаций клавиш, только dip-переключатели на дне клавиатуры, сочетаниями которых можно свапнуть пару клавиш. И все. Но самое главное — клавиатура при всей своей простоте сразу же начинает гнить, если на нее что‑то пролить. То есть если вечером за каточкой в танки ты плеснешь на нее немного пива, то утром у клавиатуры может отказать весь нижний ряд клавиш, потому что диоды и прочие радиоэлементы сгниют и окислятся, а без них клавиши не работают. Стабы в «Леопольдах» смазаны «нанослоем», то есть смазка как бы есть, но ее настолько мало, что клавиатура лязгает на всю комнату.
Dark Project
А конкретно — KD87A на Gateron Cap Teal. Сильная сторона этих клавиатур спрятана внутри корпуса. Здесь используются переключатели Gateron Cap Teal: эти свичи Dark Project заказывает напрямую у производителя Gateron. Они имеют не совсем стандартную конструкцию, отличающуюся в лучшую сторону от других клонов Cherry-MX. У обычных MX-переключателей на дне нижней части корпуса находится втулка, в которую входит шток стема (стем — это подвижная часть свича, на которую насаживается кнопка). У серии Cap все инвертировано. Втулка находится на стеме, а шток — на дне корпуса.

Это ощутимо снижает воблинг стема, то есть кнопка на клавиатуре меньше болтается в стороны, если пошевелить ее пальцем. Большинство юзеров подобного эффекта не замечает, но для некоторых людей это важно. Еще переключатели Gateron Cap Teal отлично смазаны с завода, а значит, никакого звона пружин ты не услышишь, стем ходит очень плавно, что дает приятные ощущения при нажатии. Пружины у них длиннее пружин Cherry на 2 мм и находятся в предсжатом состоянии, что тоже сказывается на ощущениях от работы с клавой.
У KD87A крутые акустические характеристики. Стем и нижний корпус переключателя сделаны из POM-пластика, а верхняя часть корпуса — из поликарбоната. POM-пластик в свиче дает басовый звук («тук»), а не высокий («ток»), как на свичах Cherry из нейлона. За счет этого клавиатуры от «Дарков» звучат низко и приятно — не бесяще. Кейкапы — одни из лучших с подсветкой символов: так как это масс‑маркет, людям нужна RGB-подсветка.
У «Дарков» есть свои молды (формы) для отливки кейкапов, а изготавливаются они из совершенно неубиваемого PBT-пластика. Для легенд используется прозрачный ABS-пластик, при этом легенды нанесены методом Double Shot и их невозможно стереть в принципе. На этой клавиатуре установлены стабилизаторы типа PCB-Mount, такие стабилизаторы используют в кастомных клавиатурах. Стабилизаторы этого типа не вставляются в плейт клавиатуры, как стабы Plate Mount, а прикручиваются к плате винтами со стороны дна и имеют более низкие допуски при отливке, за счет чего работают гораздо тише аналогов — они еще и неплохо смазаны. Кроме того, у владельца появляется отличная возможность для последующей прокачки клавиатуры.
Так как в конструкции KD87A используются хотсвапы, можно заменить свичи, а стабилизаторы поставить, как у дорогих кастомов, и получить заметную разницу между магазинным образцом и прокачанной клавиатурой. Пример такого апгрейда можно увидеть здесь. Корпуса у этих клавиатур совершенно обычные, каких‑то супернавороченных материалов не используется, однако радует, что производители прокладывают «шумку» между платой и плейтом. Многие этого не делают. Софт — ну, он есть. Китайский, кривоватый, но позволяющий ремапить кнопки и писать макросы плюс управлять подсветкой. До лидеров рынка, конечно, не дотягивает, но хоть что‑то.
www
Держи ссылочки на программы, которые способны в программном режиме переназначать клавиши и писать макросы. С помощью этого софта ты сможешь сделать почти любую клавиатуру «умной», даже если по умолчанию она ничего не умела. Для Windows это KeyManager, для OS X — Karabiner.
Чем масс-маркет хуже кастомов?
Если кратко — то всем. Во‑первых, программные возможности: кастомную клавиатуру можно запрограммировать именно так, как удобно тебе, а не дядюшке Ляо с фабрики в Шэньчжэне. У стоковых клавиатур софт чаще всего адово кривой и неудобный.
Второй момент — корпуса и материалы. Учитывая, что стоковые клавы рассчитаны на массовые продажи, производители экономят на всем, на чем только можно. Корпуса делают из дешевого и тонкого пластика, переключатели используют тоже самые простые. Чаще всего они либо плохие, либо более‑менее нормальные, в редких случаях хорошие (DP). А вот топ‑переключатели за большие деньги в массовый сегмент никто не ставит, поскольку они могут стоить больше, чем среднестатистическая клавиатура из магазина.
Звук — это вообще та грань, которая отделяет плохую клавиатуру от хорошей. Если твоя клавиатура звучит как ведро с гайками, то, скорее всего, ты будешь заклеймен, осмеян и оплеван. К сожалению, большинство масс‑маркет‑клавиатур звучат настолько мерзостно, что удивительно, зачем их вообще покупают. У самых популярных брендов не встретить ни смазанных переключателей, ни смазанных стабилизаторов. Поэтому при нажатии на пробел пользователь слышит жуткий лязг пластика и металлической скобы, причем настолько громкий, что можно разбудить Ленина в мавзолее.
Кейкапы — чаще всего это ABS-пластик, тонкий, неизносостойкий и покрытый краской, в которой лазером вырезаны легенды, чтобы буковки светились, иначе не купят. Такие кнопки часто ломаются, облезают, шайнятся (затираются до блеска), совершенно отвратительно звучат, так как стенки у них очень тонкие, а хороший звук любит толщину.
Особая боль — это кейкапы на клавиатурах Logitech, особенно те, что юзаются с переключателями RomerG, они же Omron. По мне, так совершенно гадостные переключатели, которые ни черта нельзя заменить MX-совместимыми. Кроме того, на них невозможно натянуть никакие кейкапы, кроме фирменных, которые стоят дороже любого переключателя на рынке, так как компания ими официально не торгует.
Раскладки — это ужас и боль любого, кто пытался поставить на свой Razer или Corsair другой кейкап‑сет. Нет, дружище, производители массовых клавиатур не юзают православный стандарт ANSI или ISO, они пошли собственным путем и извратили нижний ряд так, что, купив дорогой и хороший набор кейкапов, ты даже молотком его не забьешь на клавиатуру. У тебя не сойдется длина пробела или длина некоторых кнопок — Win, Ctrl, Alt.
Ну и конечно же, внешний вид. На рынке полно геймерских клавиатур, демонически сияющих всеми цветами радуги и радующих душу школьников обилием пластиковых рюшек. В сознании детей это выглядит дорого‑богато. На самом же деле — жутко убого.
В качестве альтернативы можно выбрать прилично выглядящую, но все‑таки пластиковую клавиатуру, как у Dark Project, Varmilo, Leopold, либо клаву с металлическим корпусом Vortex, где металл чуть толще фольги. Еще есть полупластиковые Das Keyboard. У этих клавиатур из металла сделана только верхняя панель, но выглядят они прилично, да и вообще клавиатуры неплохие. Их я уважаю, только они требуют обязательно смазать все стабилизаторы системы крепления Costar (редкий тип, идущий из глубины веков, но хороший). Еще придется заменить свичи Cherry приличными, а штатные ABS-кейкапы — PBT… Короче, проще собрать свою кастомную клавиатуру с нуля.
Форматы клавиатур
Формат — это размер клавиатуры и количество кнопок на ней. Форматы бывают стандартные, не очень стандартные, а бывают авторские. Перечислю самые популярные среди стандартных.
100% — full-size-клавиатура с цифровым блоком справа (иногда слева). Все масс‑маркет‑клавиатуры начинали с него, сейчас этот формат постепенно умирает в домашнем использовании. Обычно люди не набирают очень много цифр, а значит, им не нужен цифровой блок. Можно на нем сэкономить и сделать клавиатуру компактнее и дешевле. Кастомы этого формата встречаются чуть чаще цветущего папоротника, увы, он не пользуется популярностью у клавиатурных гиков.

Формат 80%, он же TKL (tenkeyless) — это клавиатуры без цифрового блока. Золотая классика. 75% — почти то же самое, но в более компактной компоновке без кнопок Scroll Lock, Insert, Pause и нескольких других. Мой личный фаворит в лице клавиатуры GMMK PRO. Формат 65% — это когда от формата 75% отрезали ряд функциональных и парочку других клавиш. 60% — это формат 65%, от которого отрезали еще несколько кнопок и убрали стрелки. Особенно любим поклонниками компактных размеров и минимализма.
Раскладки клавиатур
В одном и том же формате можно встретить клавиатуры с разным количеством и расположением клавиш. Например, раскладка WKL (winkeyless) — это фактически TKL (tenkeyless), но без двух клавиш Win. Клавиша пробела в этой раскладке увеличена с 6,25 юнита до 7 юнитов, а Ctrl и Alt с 1,25 юнита до 1,5. Еще часто делают разные раскладки на клавиатурах формата 60%. Тут и ANSI, и Tsangan, и клавы со сплит‑пробелами, и даже стрелки умудряются запихивать в формат 60%. Подробнее о раскладках можно прочитать тут.

Разрядка рядов
Разрядка рядов — это промежутки между рядами клавиш. К примеру, обратим внимание на GMMK PRO. У этой клавиатуры формата 75% ряд функциональных клавиш отделен промежутком от цифрового ряда, а правый столбец и стрелки отделены от буквенного блока клавиш.

Бывают клавиатуры, где ряд функциональных клавиш имеет разрядку, а стрелки и правый столбец клавиш примыкают к буквенному блоку, — так устроена, например, Percent Studio Trio75. Еще встречаются самые компактные варианты без разрядки вовсе, такие как KBD75.
Стаггер
Стаггер — это сдвиг рядов клавиш относительно друг друга. Если ты внимательно посмотришь на свою клавиатуру, то увидишь, что клавиши расположены не друг над другом, а с небольшим смещением. Классический стаггер — то, на чем печатает большинство людей. Также бывает вертикальный стаггер, этот метод сдвига используется в некоторых эргономичных клавиатурах, например Jorne или Cornelius.

Еще бывает матричный стаггер, на нем делают ортолинейные клавиатуры, у них нет никакого сдвига рядов клавиш относительно друг друга. Например, Atlas.
Эргоклавиатуры
Главное отличие эргономичных клавиатур от обычных — в изменении положения рук при печати. Эргоклавиатуры дают возможность держать руки более естественно для человека. Также эргоклавиатуры имеют различные сдвиги рядов и различное количество клавиш. Среди них встречаются как монолитные, например X-Bow, TGR Alice, Kinesis, так и разделенные на две части, каждая под свою руку, например Ultimate Hacking Keyboard, ErgoDox EZ. Такие клавиатуры называют эргосплитами. Кстати, эргосплиты особенно любимы в сообществе open source, часто продаются и собираются как DIY-наборы. Яркие примеры — Lily58, Sofle, Jorne, Corne, Jian, Jiran.
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
На пути к идеальной клавиатуре
Я программист и, как вы догадываетесь, некоторое время провожу за набором кода. Это занятие обычно заключается в переносе мысли из пространства между дужками очков в пространство за монитором. Пока нейроинтерфейсы редки, легаси требования делают печать достаточно сложной, в ней участвуют мозг, глаза, руки, клавиатура, компьютер и монитор. Хотелось бы смотреть только на монитор, а не переводить взгляд на клавиатуру. При этом попадать по нужной клавише, быстрее печатать и меньше опечатываться, меньше двигать запястьем и пальцами.
Ответ — эргономическая клавиатура. Под катом процесс рождения двух. Уберите детей подальше от экранов, есть сцены технопорно.

Программируя, печатаешь код и на скорость не жалуешься, это не узкое место. Больше времени уходит на подумать. Что раздражает, так это опечатки — когда их исправляешь, мысль теряется. И разглядывание кнопок вместо экрана не способствует её возвращению.
Вроде бы, умею печатать вслепую, но хочется подсмотреть, где клавиши. И это отвлекает. Вроде бы, печатаю всеми десятью пальцами. Но сейчас Y и B нажал левой рукой, затем правой. А сейчас какой жать? И это тоже отвлекает. К тому же, наблюдательные заметили, что обычно печатают девятью пальцами: пробел большой и жмут на него одним большим пальцем. Даже если чередуют, то пользы/информации от такого большого пальца мало.
Не только я один пришёл к выводу, что у обычных клавиатур есть проблемы и стали их решать.
- Ряды сдвинуты друг относительно друга на половину или четверть размера клавиши. Это наследие рычажных печатных машинок. Поэтому придумали ортоклавиатуры в строгую декартову клеточку.
- Одинаковая высота столбцов, но разная длина пальцев. Тогда колонки для длинных пальцев сдвинули вверх.
- Большой пробел неэффективно использует большие пальцы. Разбили его на отдельные кнопки и назвали это тамб кластер.
- Цифровой блок мешает мышке. Убрать! И стало Tenkeyless.
- Много кнопок на большой площади заставляют смещать кисть. В ответ обрезали кнопки, до которых не достать из домашней позиции (ASDF JKL;). И появились 60%, 40%, 20%, стенографические и двухкнопочные клавиатуры.
- Мембранные клавиатуры дают слабую тактильную и звуковую обратную связь. Поэтому, непонятно, нужно ли дальше продавливать клавишу или можно переходить к следующей. Вернулись к старой ламповой механике, иногда с громким кликом.
- Раскладка далека от оптимальной и до частых кнопок слабым пальцем далеко тянуться. Как архиватор сжимает файл, так новые раскладки ужали перемещение пальцев в зависимости от статистики.
- Руки растут из плеч, а не из груди и приходится гнуть кисти. Распилили половинки, чтобы повернуть или поставить на ширину плеч. Назвали это сплит.
- На клавиши нанесена маркировка, которая провоцирует подглядывать. Тут всё просто — не маркировать!
- Все люди разные и у каждого своя идеальная клавиатура. Стали делать свою эргономичную клавиатуру. И я стал делать.
Эпизод 1
Начал с таких дополнительных условий:
- Без подсветки. Проще, да и меньше отвлекать будет.
- Навесной монтаж, без печатной платы. Так исключён дополнительный технологический этап, который или долго осваивать, или долго ждать доставки.
- Моносплит, то есть половинки разделены пространством, но в одном корпусе. Тогда если одна рука лежит на клавиатуре, то вторую можно положить не глядя. А в сплите не понятно как целиться во вторую половину. И под вопросом необходимость рук на ширине плеч в ущерб простоте.
- Встроенная подставка под запястье. Показалось, это удобно.
- Малый размер не более 30 см х 20 см, чтобы поместиться в мой настольный ЧПУ фрезерный станок.
- 44 клавиши, просто для начала, а в меньшее не помещается русская раскладка.
- Шаг между клавишами стандартный 19 мм, размер 18 мм и 1 мм щель.
- Материал — древесина. Выглядит оригинально, красиво, трогать приятно и пыль да стружка древесная в доме лучше, чем иная другая.

Первым делом положил пальцы на лист бумаги и отметил кончики. Сделал то же самое на пластилине. Дорисовал карандашом кнопки и промерил расстояния. Перенёс рисунок в векторный редактор, там подровнял и распечатал. Повторил процедуру несколько раз другими способами, которые пришли в голову. Заказал свитчи и колпачки, и пока они шли, стал переносить в CAD. Попробовал несколько программ и понял, что они хороши, да не очень — нужно таскать всё мышкой. Как оказалось, скриптом легче. От CAD мне нужно только визуализировать скрипт, промерять расстояния и генерировать gcode (векторный 3D путь, по которому будет летать конец фрезы ЧПУ станка). Очень понравилась идеология ImplicitCAD, но в части gcode он сыроват. Да и другие CAD сложно заставить генерировать gcode, который не будет долго летать по одному и тому же месту несколько раз.

Кратко расскажу, как gcode превращается в движения фрезы. Фреза вставляется в цангу фрезера, который размещён на портале, а он каретками перемещается по нашему родному трёхмерному декартовому пространству. Каретки движутся вращением винтов. Винты вращаются шаговыми двигателями. Шаговый двигатель поворачивается, притягиваясь своими полюсами к катушкам, по которым бежит ток в одном направлении и отталкиваясь от катушек с током в другом направлении. Ток большой, мелкая микросхема не справится с его управлением. Этим занимается драйвер шагового двигателя, который на вход каждый момент времени принимает 2 бита STEP (нужно ли сделать шаг) и DIR (влево или вправо) на слабом токе, а на выходе даёт большой ток нужного направления в обмотках двигателя. Для трёх двигателей получается нужно 6 бит 30 000 раз в секунду вынь да положь в жёстком реальном времени. Не успеешь, выйдет рассинхрон, и вместо задуманной траектории фреза пойдёт в лес, то есть в дерево не там, где надо. Для настольного компьютера управление в жёстком реальном времени — это реальная проблема. Но не из-за недостатка процессорной мощи, а скорее от её избытка, утилизацией которой занимается операционная система, переключаясь 1000 раз в секунду между задачами. Когда переключится, точно неизвестно, как шедулер захочет. Поэтому генерацией STEP/DIR сигнала занимается микроконтроллер на Ардуинке под управлением прошивки grbl, а на вход получает тот самый gcode. Но тут другая проблема: gcode’а могут быть мегабайты, а памяти на Ардуине считанные килобайты. Приходится кормить её мелкими порциями по USB, как съест кусок, дать новый. Хорошо то, что кормить уже нужно не в жёстком реальном времени, а в мягком, и обычный ноутбук с bCNC прекрасно с этим справляется.

Немного о том, как заготовка превращается в изделие. К металлическому столу станка болтами прикручивается деревянный жертвенный стол, потому что его не жалко. К нему крепится заготовка. Материал вынимается сначала концевой фрезой большого диаметра, затем в углах и на чистовую фрезой малого диаметра. Но контурам пробегаю фаску угловой фрезой или закруглённой фасонной. Гладкие криволинейные поверхности делаются сферической фрезой. После каждой смены фрезы нужно выставлять начало координат по высоте. Начало каждого прохода очень ответственный момент. Нужно уменьшить скорость и внимательно наблюдать за фрезой. Если она начала что-то портить или повела себя необычным образом, нужно срочно останавливать процесс, пока заготовка или фреза необратимо не пострадали. Например, фреза может уйти глубже, вырвать заготовку, не вращаться, дымиться, давать пыль вместо стружки, летать по другой траектории, быть не того диаметра или профиля. Затем заготовка переворачивается и таким же способом обрабатывается со второй стороны. Всего инструмент меняется с десяток раз. Самый ответственный момент в конце обработки, когда почти готовое изделие держится на тонких поддержках и его легко вырвать. Придётся начинать всё заново, так как обратно крепко и точно не приклеить и не доделать. Процесс фрезеровки очень напоминает отладку на проде, когда ошибки чинятся на лету и их цена велика.


Первый отладочный прототип корпуса делал из сосны потому, что знал, что испорчу. Второй уже делал из бука. Есть пара мелких ошибок: не поднял фрезу после замены и она летела чуть испортив заготовку, и при установке начальной высоты проткнул фрезой заготовку. Корпус фрезеровал день. Потом полдня доработки напильником.

Следующий этап — пайка навесным монтажом. Я раньше думал, что не умею паять. А оказалось это паяльник не умеет паять. Паяльная станция с регулировкой температуры творит чудеса и паяет сама. Нужно только держать жало в нужном месте, мазать флюсом, да подносить припой. Задача присоединить кнопки к микросхеме. Но кнопок 44, а управляемых пинов у Pro Micro только 18. В то же время у проводника два конца — куда ток входит и откуда выходит. Одни пусть будут рядами, а другие колонками, в сумме не больше 18. Этими концами можно управлять отдельно. Напряжение подаётся на весь ряд и считывается по очереди с каждой колонки. Нажатая кнопка его пропустит и мы его прочтём, не нажатая не пропустит. И число их комбинаций находится через умножение, то есть максимум наша Pro Micro может обслужить 9 9=81 кнопок. Нужно 44 кнопки. Можно 11 4, но мне больше подходит 6 колонок 8 рядов (4 слева и 4 справа). Схема нехитрая, опять привет Декарту, на этот раз в 2D. Хитрость появляется тогда, когда 3 кнопки нажмутся одновременно. Ток начнёт гулять от рядов к колонкам и обратно и покажется, что четвёртая кнопка, которая составляет квадрат с тремя нажатыми, тоже нажата. Чтобы ток шёл от рядов к колонкам, но не обратно, добавляются диоды. В качестве шины для ряда используется проводник самого диода, а для столбцов нужен изолированный провод, чтобы не было замыкания с рядами. Самая сложная часть это прикрепить ряды и колонки к Pro Micro, так как места мало.


На кнопки поставил купленные сферические колпачки, но они мне не понравились — острой гранью резали пальцы. Несколько дней рисовал и за день выпилил свои. Ножку сделал круглой 5.5 мм. Боялся, что она отломается, но держатся они крепко.

Настал черёд прошивки. Свою с нуля писать долго, поэтому взял QMK. Чтобы её сконфигурировать, нужно указать сколько в клавиатуре рядов и колонок, к каким пинам они подключены, как повёрнуты диоды (от рядов к колонкам или наоборот), как электрические ряды (8 штук) и колонки (6 штук) отображаются на ряды (4 штук) и колонки (14 штук) раскладки, а также саму раскладку. Процесс настройки раскладки может продолжаться вечно, я начал с QWERTY. Уместился в 3 слоя. Слои редко можно встретить в обычный клавиатурах. Чаще всего слоями Fn ряд совмещают с медиаклавишами на ноутбучных клавиатурах. Но когда клавиш только 44, без слоёв не обойтись. Кроме слоёв есть и другие способы присвоить разное значение одной и той же кнопке.
Под Linux чтобы залить прошивку, нужно отключить один сервис и собрать проект, указав свою конфигурацию.
sudo systemctl disable ModemManager.service sudo make gor:default:avrdude
Сборка остановится на ожидании перезагрузки микроконтроллера и в первый раз нужно замкнуть пин RST на землю. В дальнейшем удобно вынести кнопку перезагрузки в раскладку.

Всё первая версия моей клавиатуры готова. При использовании многое понравилось.
- Разнесённость левой и правой половин.
- Достаю до всех клавиш в домашней позиции
- Гладкая приятная не скользящая текстура бука.
- Цилиндрическая форма колпачков с закруглённым низом и поднятыми боками хорошо позиционирует палец.
Не обошлось без недостатков.
- Подставка оказалась высокой и сильно добавила габаритов.
- Угол поворота двух боковых столбцов для мизинца заставляет излишне его отгибать.
- Большой угол поворота половин.
- Визуально сложная раскладка.
- Жёсткие чёрные Cherry свитчи — сложно долго удерживать слои большим пальцем.
- Не заменить свитчи без пайки.
- Мало клавиш, особенно не хватает навигации и цифр / спец. символов на основном слое.
Эпизод 2
Недостатки не позволили с комфортом пользоваться клавиатурой по назначению. В то же время, своей массой и монолитностью она замечательно смотрится в интерьере, как оленьи рога или другой трофей охотника. Спустя полгода решил сделать новую версию клавиатуры с новыми требованиями.

Чтобы понять что мне нужно, отбракованные пластиковые колпачки прикрепил к пластилину и начал пробовать варианты размещений. Обнаружил, что мне удобнее держать пальцы не над его столбцом, а сбоку. Тогда по столбцу палец двигается по дуге почти не сгибаясь. Одновременно с этим, запястье лежит под углом и не нужно поворачивать левую и правую половину. Единственное, что остаётся, это сдвинуть столбцы по высоте. Также заметил, что 19мм шаг между клавишами оставляет между пальцами много места. А при повороте кисти пальцам становится ещё свободнее. Поэтому решим попробовать ужать шаг.
- Совместимость с обычной раскладкой.
- 70 кнопок, навигационные кнопки, цифровой ряд.
- 16 мм шаг, меньше не позволяют свитчи. Щель между клавишами 0.5 мм.
- Плоские колпачки с фаской 2 мм, которая нужна, чтобы соседние колпачки не мешали пальцу опуститься на 4 мм при нажатии.
- Ножки у кнопок сделал прямоугольными в надежде на меньший люфт стема.
- Визуально простой дизайн.
- Минимальные габариты.
- Материал полосатая лиственница.
- Возможность замены свичей без пайки в разъёмах Kailh.
- Очень мягкие свитчи Gateron Clear для большого пальца и навигации, чтобы комфортно долго держать.
- Щёлкающие Gateron Blue и тихие Silent Brown на выбор для остальных клавиш.

Паять тонким проволочным припоем с нанесённым на него флюсом 70 кнопок оказалось даже легче, чем 44, нанося флюс вручную. А вот соединять ряды и столбцы к Pro Micro оказалось значительно сложнее из-за плотной компоновки.

Текущая раскладка QWERTY, до Colemak и прочих ещё не дорос.

Эксплуатация опять выявила некоторые недостатки.
- Люфт клавиш иногда приводит к тому, что они цепляются друг за друга. Решается шлифовкой и увеличением толщины боковых граней, добавлением юбки.
- Фаска с верхней поверхностью даёт угол 135 градусов. Неприятно на него натыкаться, нужно зашлифовать и скруглить.
- Плоский верх колпачков не позиционирует палец. Цилиндр лучше.
- Не шлифовал верх колпачков, оставил слегка рельефную текстуру, которая немного раздражает палец.
- Большой палец натыкается на переднюю фаску и углы. Клавишу нужно сделать толще и закруглить передний край.
- Большой палец слишком близко к основному ряду.
- Сбоку видны свитчи.
- Вытаскивая свитч для замены, нужно придерживать разъём. Можно ценой 2 мм добавить слой, аналогичный печатной плате, в отверстия которого будет вставляться разъём.
- Тихие свитчи не понравились, похож на мембранную клавиатуру.
- Текстурой бук понравился больше, чем лиственница.
Но достоинства перевешивают.
- Смещения рядов позволяют не глядя позиционировать большие пальцы.
- Дуговые движения по рядам очень удобны.
- 16 мм шаг идеален. Пальцы не мешают друг другу и малым движением достают везде. Но нужно привыкать.
- Визуальная простота.
- Компактность.
- Понравились щёлкающие свитчи. Мягкие свитчи легко долго держать.

Теперь клавиатурой можно пользоваться, чем и собираюсь заняться.
Клавиатура своими руками под свои руки

Для меня всё началось вот с этого топика о механических клавиатурах, желания научиться печатать быстрее (к своему стыду до недавних пор печатал двумя пальцами, несмотря на 25летний стаж программирования), и появившихся недавно неприятных ощущений в кистях после рабочего дня (да и вообще времени, проведённого за компьютером).
Провёл короткое исследование о том, что вообще есть из клавиатур для программистов и тех, кто много печатает, и написал вот этот обзорный топик. Купил себе Happy Hacking Lite (минималистичная клавиатура с мембранными переключателями), но печатать на ней оказалось ещё менее удобно, чем на ноутбучной, в основном из за ещё более компактного расположения клавиш.
Вскоре появился топик, в котором автор рассказывал о новоприобитённой им Truly Ergonomic, пожалуй, практически идеальной клавиатуры с моей точки зрения, но в комментариях автор же отметил, что спустя два месяца использования так и не смог совсем пересесть на неё, а положение рук совсем не так и удобно, как рекламируется.
Чуть позже появился топик о Kinesis Advantage, по отзыву автора к которой тоже не так легко привыкнуть, а цена так и просто пугает.
Изыскания
По ссылке из первого топика я вышел на сайты фанатов любителей клавиатур, американский и европейский, на которых люди доделывали, переделывали и делали клавиатуры с нуля. Я заштудировал их, узнал всё (о многом я расскажу в этом топике), что нужно для сборки клавиатуры с нуля, заказал все нужные детали и инструменты, и стал ждать.
Список необходимого — ниже, а пока для затравки расскажу о двух наиболее интересных проектах эргономических клавиатур, которые я нашёл, и которые и вбили в мою голову мысль «Я тоже могу».
BlueCube

Клавиатура от домашнего умельца, работающего в компании, занимающейся изготовлением изделий из пластика.
ErgoDox

Клавиатура, прошедшая эволюцию от Key64, через DoxKB, и дошедшая до стадии массового производства (правда, со самостоятельной сборкой из деталей) по цене в $200.
Проектирование

Обе клавиатуры из предыдущего раздела отличаются от типичных клавиатур тем, что в них заметно меньше клавиш. Это сделано за счёт отказа от блока цифровых клавиш, блока стрелок и блока функциональных клавиш. Стоит задуматься, так ли уж они часто используются, и нельзя ли вместо F1 нажимать Fn-1 или какое-то другое сочетание клавиш.
Клавиши на BlueCube, Ergodox расположены ровными колонками, а не ровными рядами. Такое же расположение клавиш используется и в Truly Ergonomic, TypeMatrix и ещё нескольких клавиатурах. Сделано это по двум причинам, во-первых — разница в длине пальцев, средний типично длиннее остальных, а мизинец — короче, и им всем не слишком удобно лежать на одном ряду. Во-вторых, при использовании метода быстрой десятипальцевой печати, если положить указательные на клавиши с засечками, F и J, а остальные на клавиши по бокам от них, попробуйте достать безымянным пальцем левой руки до клавиши X, не двигая остальных пальцев, или средним левой руки до клавиши C. Расположение клавиш ровными колонками решает обе эти проблемы.
Ещё один важный момент, используемый в BlueCube, это совмещение клавиш модификаторов с такими клавишами, как пробел, Tab и т.п. следующим образом: если клавиша нажата одиночно, то результирующий символ — пробел, а если клавиша зажата, а в этот момент нажата, а потом отпущена, другая клавиша, например ‘q’, то первая клавиша интерпретируется как модификатор, например, Shift, и результирующим символом получается Q.
Стоит также заметить, что большой палец, который практически не используется при печати на обычной клавиатуре, тут задействован больше, аналогично клавиатурам от Maltron и Kinesis. Однако, блок клавиш под большие пальцы не кажется таким уж удобным, что на ErgoDox (и аналогичный на Maltron и Kinesis Advantage), так и на BlueCube, где их приходится загибать аж до основания мизинца.
Поскольку ничто не сдерживало меня в том, как будет выглядеть клавиатура, я решил просто положить руки на бумагу, и понять, куда мне бы было удобно доставать пальцами, не слишком сильно перемещая кисти рук. В итоге у меня получился вот такой набросок:

который я тут же перенёс в векторный редактор, но уже с клавишами, на которые нанёс и символы, расположив их более-менее традиционно:
Итого у меня получилось, что пальцы достают до 50 клавиш, и вроде бы как все нужные клавиши на местах (хотя и не всегда на своих, если смотреть с точки зрения традиционных раскладок). Достаточно ли будет 50ти клавиш, учитывая то, что на традиционных клавиатурах 104 клавиши (в крайнем случае 87, в варианте без блока цифровых клавиш)? С использованием модификатора Fn это становится возможным, ведь сочетания букв и Fn обычно не используются, и можно на них повесить всё, что не влезло, но по каким-то причинам нужно, например, стрелки, Home, End, PgUp и PgDn.
Коричневые квадраты под запястьями обозначают мягкие подкладки.
Индикаторы? Я не пользуюсь Caps Lock’ом, отдельного цифрового блока нет, так что не нужен и NumLock, а для чего нужен ScrollLock многие, наверняка даже и не знают. Так что отметаю индикаторы.
Слегка смущает блок клавиш под мизинец, если вдруг кто-то другой решит воспользоваться моей клавиатурой, его мизинец сможет оказаться короче моего семиоктавного, поэтому блок под мизинец я решил сделать поворачивающимся, от такого, как на рисунке, до параллельного другим колонкам клавиш.
Ещё один аспект — это естественное положение рук, которое скорее ближе к вертикальному расположению ладоней, нежели к положению ладонями вниз, к которому мы все привыкли. Это одна из причин, по которым я не купил клавиатуру Truly Ergonomic и не успокоился. Это склоняет к тому, чтобы сделать клавиатуру разделённой на две половинки, как Kinesis Freestyle и Ergodox с BlueCube’ом, и наклонённой.
Итак, клавиатура по плану получается раздвоенная, с уменьшенным количеством клавиш, со сдвинутым блоком под большие пальцы, с вертикальными ровными колонками, по вертикали сдвинутыми относительно друг друга, левый и правый блоки под наклоном (регулируемым, потому что разные источники советуют наклон от 15 до 90 градусов относительно вертикальной поверхности, и сдвигающимся регулируемыми блоками под мизинцы, без индикаторов.
Детали
Краткий список того, что нужно:
— клавишные переключатели;
— колпачки на переключатели;
— диоды (зачем они нужны — чуть позже);
— микроконтроллер, позволяющий клавиатуре быть USB устройством, и считывающий состояние переключателей;
Плата

Поскольку шанс на безошибочное проектирование печатной платы с первой попытки для себя оцениваю, как крайне низкий, с ЛУТом и фоторезистом опыта не имею, цену на производство под заказ в единичном объёме — высокой, то решил сделать навесную проводку. Материал — текстолит, использующийся в обычных печатных платах. У друга, по счастью, залежались несколько пластин стеклотекстолита, которые я и одолжил. Шикарный материал, по удобству использования сравнимый только с синей изолентой.
Микроконтроллер

Несмотря на свой юношеский задор по поводу светлого будущего ARM-контроллеров, я тем не менее выбрал устройство на базе более традиционного AVR. Из наиболее подходящих для данного применения был выявлен Atmega32u4, с 32КБ ПЗУ, достаточным количеством портов ввода-вывода, работающий в режиме ведомого USB устройства, а также умеющий общаться по I 2 C. То, что клавиатура будет без традиционной печатной платы, привело к необходимости взять контроллер на выносной плате, и я выбрал наиболее компактный — Teensy. Вариантов достаточно много, даже от того же производителя, и даже есть отечественные аналоги, хотя они почему-то дороже.
Переключатели
Выбор клавишных переключателей заключался лишь между механическими от Cherry, марки известной многим по клавиатурам, и многочисленными китайскими клонами ныне не выпускающихся переключателей Alps.
Cherry выпускает две основные линейки переключателей, низкопрофильные Cherry ML, и более часто используемые MX, выпускаемые в следующих основных модификациях:
— чёрные (линейной силы нажатия, средней упругости, не щёлкающие);
— красные (линеные, лёгкие, не щёлкающие), популярны в игровых клавиатурах;
— серые (тактильные, упругие, не щёлкающие);
— прозрачные (тактильные, средней упругости, не щёлкающие);
— зелёные (тактильные, средней упругости, щёлкающие);
— голубые (тактильные, лёгкие, щёлкающие);
— коричневые (тактильные, лёгкие, щёлкающие);
— белые (тактильные, средней упругости, умеренно щёлкающие).

Исходя из личных предпочтений, мне понравились прозрачные.
Отличаются переключатели ещё способом установки. Есть вариант для монтажа на печатную плату, и для монтажа на дополнительную пластину. У первых есть два дополнительных столбика для большей устойчивости, а вторым для устойчивости нужна дополнительная пластина. В эту дополнительную пластину можно защёлкивать и первый вариант.
Существует ещё множество модификаций MX, но это одна из тех деталей, которые приобрести не так просто, либо не так дёшево, тем более в малых количествах, а в не слишком популярных модификациях — и подавно. На Ebay их продают чуть не по 4 доллара за штуку, у поставщиков электронных компонент выбор совсем мал. Замечательно то, что на клавиатурных форумах организовывают групповые покупки, в одну из которых я и вписался. К сожалению, нужно было либо ждать, либо брать, то, что есть, и я взял голубенькие (выбирая из красных, коричневых и голубых), в варианте с установкой на печатную плату.
Колпачки
Изначально я хотел купить какую-нибудь старую механическую клавиатуру, выпаять из неё переключатели и снять колпачки, но так ничего путного и не нашёл.
Раз уж покупать новые — так выбирать. Хороший выбор у WASD Keyboards, я решил попробовать взять разные клавиши, и взял набор из 39 клавиш алфавитного блока, и два набора цветных на пробу, к которым в комплекте идут также клавишные демпферы для уменьшения щёлкающего эффекта (щёлкающего эффекта колпачков по плате, а не внутреннего щёлкающего эффекта переключателя). Также нужны клавиши увеличенного размера, и я взял несколько клавиш, обычно использующихся как Tab (1.5x), Alt (1.25x) и Caps Lock (1.75x), разных цветов.
Сейчас в основном используются колбачки цилиндрической формы, у которых каждый ряд клавиш имеет свой профиль.
У меня в наборах не оказалось ни одной клавиши из цифрового ряда E:

Диоды
Диоды, а именно 50 шт. 1N4148 в корпусе DO-35, которые оказалось проще и дешевле купить с доставкой из Англии, чем в местных супермаркетах, торгующих электронными компонентами.
«Лего для взрослых»

Детали и инструменты.
Макет
Железо

Чтобы не тратить зря время, я решил собрать макет и потрогать руками, что же из всего этого может выйти, и не тратить время, если вдруг не понравится такой промежуточный результат. Вот, что у меня получилось:
Рука (левая, я решил поступить по принципу примерки обуви) лежит удобно, достаёт до всех клавиш. Решено, продолжаю.
Микроконтроллер
Teensy идёт с зашитой прошивкой под названием «мигающая лампочка». Удивительно, но при подключении его USB шнуром к компьютеру, маленький диодик действительно начинает моргать. На сайте есть ещё одна прошика для примера, называющаяся «быстро миграющая лампочка», я скачал её и залил на устройство, и лампочка действительно стала мигать быстрее. Залил изначальную — опять медленее. Ну что ж, вполне неплохо, стробоскоп уже можно делать.
Небольшие копошения с исходниками примера с сайта под названием «USB клавиатура», и каждые 8 секунд на экране печатается символ пробела, а при замыкании GND с любым из входов на экране появляются два символа, обозначающи порт и номер ноги, например B1. Ток мизерный — 135мкА. Ещё удача.
Теория
Как же подключить 50 (а на обычных клавиатурах вдвое с лишним больше) клавиш к микроконтроллеру с 25 портами ввода-вывода, оставив несколько на такие вещи, как мышь?
Всё достаточно просто, нужно распределить клавиши по рядам и колонкам, сформировав матрицу. Подавая напряжение на колонку A, и сняв это напряжение с рядов 2 и 3, можно понять, что сейчас клавиши на пересечении этих рядов и этой колонки находятся в нажатом состоянии. Напряжение подаётся на колонки поочерёдно. Таким образом, грубо говоря, не нужно количество портов ввода-вывода равное количеству клавиш, а достаточно квадратного корня из этого количества, в моём случае — 8×7, то есть 8 выходов и 7 входов (или наоборот).
Однако, у этого метода есть один серьёзный недостаток, проявляющийся в блокировании и пропадании нажатий:
На этом рисунке видно, что при нажатых клавишах W, E и D, и при напряжении, поданном на колонку B, происходит ложное срабатывание клавиши S. Бороться с этим явлением и призваны диоды: 
Более подробно об этом можно прочитать тут.
Вдобавок к этому, стандарт USB привносит серьёзное ограничение для подключаемых к нему устройств печатного ввода, в 6 одновременно нажатых (не-модифицирующих) клавиш. Некоторые производители обходят это ограничение, эмулируя подключение нескольких USB устройств. Честно говоря, сталкивался с этим ограничением только по юности, когда денег на MIDI клавиатуру не было, а хотелось сыграть жирный аккорд. Но так, на заметку.
Небольшая пауза на раздумье
Мне в разные моменты начинало казаться, что клавиш слишком много (да-да, как бы это смешно ни звучало при всего 50ти клавишах!). И когда я заказал всего 50 переключателей без всякого запаса, и когда пытался дотянуться мизинцами до крайних четырёх клавиш на макете, и когда начал думать о том, что седьмая колонка клавиш поведёт за собой необходимость тянуть между половинками клавиатуры дополнительный провод вдобавок к шлейфу. Вдобавок ко всему на этих изначально планируемых клавишах должны были расположиться Escape, Tab, Backspace и Enter, которые уже есть на клавишах под большие пальцы. Дублировать особого смысла нет. И если уже привыкать к новой клавиатуре, так сразу, без путей отступления.
Схема

Схема настолько проста, что даже нет особого смысла её рисовать.
Колонки и строки в матрице соответствуют клавишам, клавиши блока большого пальца — четвёртый ряд.
Подаём напряжение с колонки на все входящие ноги переключателей этой колонки. С выходящей ножки переключателя — на анод диода. Выходы с катодов всех переключателей в строке соединяем, и подключаем к входу строки.
Для правой половины клавиатуры требуется 6 выходов и 4 входа, на левой — ещё 6 выходов, а входы можно использовать те же. Получается матрица 12×4, итого аж 18 входов-выходов, что несколько неэкономично. Буду использовать матрицу 6 на 8, которую легко представить, как одну половину клавиатуры, расположенную не слева, а снизу от другой, итого получается 14 портов ввода-вывода.
Получается, что в левую половину клавиатуры нужно будет вести 10 жил. Купленные мной штырьковые разъёмы всего на 10 жил, и их ровно-ровно хватает.
Ножки на контроллере могут быть в двух режимах: вход или выход. Вход может быть открытым, в этом случае, если он не замкнут, он может шуметь, и лучше перевести его в режим с включённым встроенным подтягивающим резистором, чтобы в случае, если он не замкнут на землю, он всегда был в состоянии 1. Выходы ставим по умолчанию с состояние 5В, а во время чтения конкретной колонки опускаем до 0В, чтобы при его замыкании со входом последний переходил в состояние 0, означающее нажатие кнопки. Такой вариант подключения приводит к некому недоразумению в виде того, что ток «течёт» от входов в к выходам.
Существуют и другие варианты подключения, где всё более-менее логично, но они предусматривают дополнительные внешние элементы, такие как один на все выходы или несколько внешних резисторов (для экономии портов с чтением через АЦП), но мне кажется, что если есть контроллер с достаточным количеством портов, он и сам должен справляться с тем, как у него какую ножку куда замкнули, поэтому — самый простой вариант, хотя на первый взгляд и не самый понятный.
Ножки микроконтроллера на Teensy выведены не все, а те, что выведены — идут вразнобой. Из «цельных» портов есть только B. Частично выведенные — F (нет ножек F2, F3), D (две ножки на нижнем торце платы, не имеют собственно ножек, а ещё два совмещены с I 2 C, C (есть только ножки C6 и C7).
На микроконтроллере используем ножки PF0, PF1, PC6, PC7, PF4-PF7 используем под выходы, PB0-PB5 под входы (с подтягивающим резистором). Оставляем ножки PD0 и PD1 под I 2 C, который пригодится позже для подсоединения мыши/трекпоинта. Ножку PD6 не трогаем, потому что она соединена с размещённым на плате светодиодом, который может питаться током, поданным на эту ножку, и опускать напряжение с 5В до ~1.7В.
Железо
Плата
Текстолит предназначен для вытравливания на нём проводящих дорожек. Поскольку это в моём случае не нужно, фольгу с него придётся снять. Сделать это не так просто, так как она значительно толще и крепче той, которую мы все привыкли снимать с шоколадок. Трудно с самого начала — зацепить уголок этой фольги, далее, если снимать её толстыми полосами, усилие приходится применять большое, а если тонкими — норовит порваться, и приходится заново искать уголок. Мне удалось выявить достаточно простой способ: зацепить с угла, и полосой 1-1.5см вести по спирали к центру платы.
На текстолите остаются занятные узоры, позволяющие понять, как именно фольга снималась. 
Очень рекомендую надевать перчатки, а снимать фольгу пасатижами, в противном случае царапины неизбежны.
Сверление

Я сделал набросок того, как переключатели должны располагаться на плате (платах, ибо получается как минимум 4 куска, а для лучшей компоновки на текстолите аж 6 кусков). Для того, чтобы они на ней закрепились, плату нужно просверлить. Для каждого переключателя это 7 отверстий, два по 0.8мм, два по 1.2мм, два по 1.6мм, и одно, центральное 4мм.
Сверлить сразу по распечатке не слишком удобно, поэтому из старой алюминиевой задней крышки мобильника я сделал трафарет:
Резать и сверлить алюминий дело непростое, он греется, летит во все стороны, поэтому рекомендую использовать специальные защитные очки. Как и во время проведения других операций.
Вот как выглядит переключатель, вставленный в трафарет.

Увы, кулачковый патрон дрели предназначен для свёрел c хвостиком максимального диаметра 3.4мм, но сверло на 3.5мм вполне устойчиво закрепилось. Для высверливания им отверстия 4мм пришлось совершить несколько круговых движений. Не рекоммендую повторять такое.
Сверлил изначально на деревянной подложке, и где-то на сотом отверстии сверло 0.8мм сломалось под корень, из за того, что текстолит сдвинулся относительно подложки в тот момент, когда сверло было опущено. Позже сверлил так, что под тектолитом ничего не было.

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

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

Нарезка
Плат нужно аж целых 6 кусков. Теоретически можно было сделать и два, но 1) размер тектолитовых кусков не позволяет 2) даже если бы позволял, то получалось бы это не слишком экономично 3) есть возможность при сборке поиграть положением плат относительно друг друга.

Межплатные соединения

Для того, чтобы не пришлось тянуть провода между половинками клавиатуры, я использовал шлейфы, подобные тем, которые использовались для подключения накопителей на жёстких дисках к материнском платам, только с меньшим количеством жил, и разъёмы IDC/BH. Конечно, более правильно было бы использовать витую пару, но мне нужно больше, чем 8 проводов, а разъём 8P8C тоже не слишком компактен (а разьём 10P10C и 10жильную витую пару не так просто найти). Ещё вариант был бы использовать мультиплексор портов ввода вывода на шине I 2 C, но это усовершенствование я решил отложить.
К слову сказать, IDC разъёмы угловой и прямой мне достались совершенно разные. Прямой не паялся никак, и ножки из него вываливались при малейшем нагревании, а угловой паялся хорошо. Внешне не отличались ничем.
Пайка

О пайке могу сказать одно — это не мой конёк. Тяп-ляп, но работает.
Прошивка
Проба пера
Итак, у меня получился кусок клавиатуры, и пора бы проверить, работает ли всё это так, как я предполагал.
К Teensy идёт некоторое количество примеров, в том числе USB HID (устройство интерфейса с человеком), в вариантах для клавиатуры и мыши. С первого из этих примеров и выросла прошивка.
В оригинальном примере идёт расчёт на то, что входы переключателями замыкаются на землю, а при матричном подключении всё немного по-другому, на часть ножек периодически подаётся напряжение, и в этот период состояние других ножек читается. Для того, чтобы ножки работали в качестве выходов, нужно их в этот режим перевести.
В общем приближении порядок такой: инициализируем порты и USB; в цикле поочерёдно подаём напряжение на выходы, читаем входы, если значение на входе соответствует нажатой клавише, а в предыдущем цикле чтения она не была нажата — посылаем код клавиши по USB.
Я не большой специалист в C, а уж когда речь доходит до копания в макросах, я слегка теряюсь, поэтому код может быть слегка неуклюж, но общий смысл должен доносить:
Да простит читатель мою привычку делать комментарии на английском.
Код прошивки
#include #include #include #include #include "usb_keyboard.h" #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) uint8_t matrix[8][8]= < /*B0*/ , // Top row /*B1*/ , // Home row /*B2*/ , // Bottom row /*B3*/ , /*B6*/ , // Top row /*B5*/ , // Home row /*B4*/ , // Bottom row /*D7*/ >; int main(void) < uint8_t state=0, prev_state[8] = ; setup_pins_and_usb(); while (1) < // B0 PORTB = 0b11111110; _delay_ms(5); state = PINF; read_row(state, prev_state[0], matrix[0]); prev_state[0] = state; // B1 PORTB = 0b11111101; _delay_ms(5); state = PINF; read_row(state, prev_state[1], matrix[1]); prev_state[1] = state; // B2 PORTB = 0b11111011; _delay_ms(5); state = PINF; read_row(state, prev_state[2], matrix[2]); prev_state[2] = state; // B3 PORTB = 0b11110111; _delay_ms(5); state = PINF; read_row(state, prev_state[3], matrix[3]); prev_state[3] = state; // B6 PORTB = 0b10111111; _delay_ms(5); state = PINF; read_row(state, prev_state[4], matrix[4]); prev_state[4] = state; // B5 PORTB = 0b11011111; _delay_ms(5); state = PINF; read_row(state, prev_state[5], matrix[5]); prev_state[5] = state; // B4 PORTB = 0b11101111; _delay_ms(5); state = PINF; read_row(state, prev_state[6], matrix[6]); prev_state[6] = state; PORTB = 0b11111111; // D7 PORTD = 0b00000000; _delay_ms(5); state = PINF; read_row(state, prev_state[7], matrix[7]); prev_state[7] = state; PORTD = 0b10000000; >> void read_row(uint8_t state, uint8_t prev_state, uint8_t keys[]) < uint8_t mask, i; mask = 1; for (i=0; i> i) == 0 && ((prev_state & mask) >> i) == 1 ) < usb_keyboard_press(keys[i], 0); >mask = mask > void setup_pins_and_usb() < // set for 16 MHz clock CPU_PRESCALE(0); // Configure PB0-PB6, PD7 as outputs, high state DDRB = 0b01111111; DDRD = 0b10000000; PORTB = 0b01111111; PORTD = 0b10000000; // Configure PF0, PF1, PF4-PF7 as inputs, pullup enabled DDRF = 0x00; PORTF = 0xFF; // Initialize the USB, and then wait for the host to set configuration. // If the Teensy is powered without a PC connected to the USB port, // this will wait forever. usb_init(); while (!usb_configured()) /* wait */ ; // Wait an extra second for the PC's operating system to load drivers // and do whatever it does to actually be ready for input _delay_ms(1000); >
Проверил — работает. Удача.
«Фирмовая» прошивка
Можно продолжать городить огород и тут, но в прошивках кроется не меньше тонкостей, чем в железе. И мне пришла в голову мысль использовать готовую прошивку. Из имеющегося в сети наиболее заслуживающими внимания показались две:
Clavis. Использовалась в одном моде старой терминальной клавиатуры Wyse WY-85. В принципе, выглядит неплохо настраиваемой, но из коробки не хватает кое-каких возможностей, которые есть во второй прошивке.
TMK Keyboard. Очень матёрая прошивка, использующаяся в десятке (если не в десятках) клавиатурных модов и доморощенных клавиатур. Из коробки обладает следующими возможностями:
— многослойность раскладок (можно использовать один слой для дополнительных полезных символов, наподобие типографского дефиса и т.п.);
— эмуляция движений мыши с помощью клавиш;
— умеет посылать коды системных клавиш: Power Down, Sleep, Wake Up, Volume Down/Up, Mute, Next/Prev track, Play, Stop и других;
— передача множества одновременных нажатий (не ограничиваясь лимитом USB на 6 клавиш);
— настраиваема до мельчайших деталей;
— работает с клавиатурными «фокусами», а именно умеет те же физические клавиши использовать для разных назначений в зависимости от типа нажатия;
— консоль отладки прошивки.
Поначалу была проблема с залипанием клавиш, но к моменту, когда я всё дособрал, проблема уже была решена. Мой код можно найти тут.
Раскладка
#define KEYMAP( \ K00,K01, K02,K03,K04,K05, K40,K41,K42,K43, K44,K45, \ K10,K11, K12,K13,K14,K15, K50,K51,K52,K53, K54,K55, \ K20,K21, K22,K23,K24,K25, K60,K61,K62,K63, K64,K65, \ T30,T31,T32,T33,T34, T70,T71,T72,T73,T74 \ ) < \ < KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05 >,\ < KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15 >,\ < KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25 >,\ < KC_0, KC_##T30, KC_##T31, KC_##T32, KC_##T33, KC_##T34 >,\ \ < KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45 >,\ < KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55 >,\ < KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65 >,\ < KC_##T70, KC_##T71, KC_##T72, KC_##T73, KC_##T74, KC_0 >\ > static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = < /** Layer 0: (lowercase char) * * ` q w e r t y u i o p = * \ a s d f g h j k l ; ' * [ z x c v b n m , . / ] */ KEYMAP( \ GRV, Q, W, E, R, T, Y, U, I, O, P, EQL, \ SLSH, A, S, D, F, G, H, J, K, L,SCLN,QUOT, \ LBRC, Z, X, C, V, B, N, M,COMM, DOT,BSLS,RBRC, \ FN0, FN1, FN2, FN3, FN4, FN9, FN8, FN7, FN6, FN5 ), /** Layer 1: (symbols and navigation) * * 1 2 3 4 5 6 7 8 9 0 - * ↰ ↑ ↳ ⤒ ← ↓ ↑ → * ← ↓ → ⤓ */ KEYMAP( \ NO, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,MINS, \ NO, NO,PGUP, UP,PGDN,HOME, LEFT,DOWN, UP,RGHT,SCLN,QUOT, \ NO, NO,LEFT,DOWN,RGHT, END, NO, NO, NO, NO, NO, NO, \ FN0, FN1, FN2, FN3, FN4, FN9, FN8, FN7, FN6, FN5 ) >; /* * Fn action definition */ // TODO: use [1] = KEYMAP(. ) to prevent from changing index of element? static const uint16_t PROGMEM fn_actions[] = < ACTION_LAYER_TAP_KEY(1, KC_SPC), // FN0 = L1 symbols ACTION_MODS_TAP_KEY(MOD_LSFT, KC_SPC), // FN1 = Shift with tap Space ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ESC), // FN2 = Ctrl with tap Escape ACTION_MODS_TAP_KEY(MOD_LALT, KC_TAB), // FN3 = Alt with tap Tab ACTION_MODS_TAP_KEY(MOD_LGUI, KC_DEL), // FN4 = Meta with tap Del ACTION_LAYER_TAP_KEY(1, KC_ENT), // FN5 = L1 symbols ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), // FN6 = Shift with tap Enter ACTION_MODS_TAP_KEY(MOD_RCTL, KC_BSPC), // FN7 = Ctrl with tap Backspace ACTION_MODS_TAP_KEY(MOD_RALT, KC_RALT), // FN8 = Ctrl with tap Backspace ACTION_MODS_TAP_KEY(MOD_RGUI, KC_TAB) // FN9 = Meta with tap Tab >;
Матрица
/* Column pin configuration * col: 0 1 2 3 4 5 * pin: F0 F1 F4 F5 F6 F7 */ static void init_cols(void) < DDRF = 0b00000000; PORTF = 0b11111111; >static matrix_row_t read_cols(void) < return (PINF&(1<<0) ? 0 : (1<<0)) | (PINF&(1<<1) ? 0 : (1<<1)) | (PINF&(1<<4) ? 0 : (1<<2)) | (PINF&(1<<5) ? 0 : (1<<3)) | (PINF&(1<<6) ? 0 : (1<<4)) | (PINF&(1<<7) ? 0 : (1<<5)); >/* Row pin configuration * row: 0 1 2 3 4 5 6 7 * pin: B0 B1 B2 B3 B6 B5 B4 D7 */ static void unselect_rows(void) < // Hi-Z(DDR:0, PORT:0) to unselect DDRB = 0b01111111; DDRD = 0b10000000; PORTB = 0b01111111; PORTD = 0b10000000; >static void select_row(uint8_t row) < // Output low(DDR:1, PORT:0) to select switch (row) < case 0: PORTB &= ~(1<<0); break; case 1: PORTB &= ~(1<<1); break; case 2: PORTB &= ~(1<<2); break; case 3: PORTB &= ~(1<<3); break; case 4: PORTB &= ~(1<<6); break; case 5: PORTB &= ~(1<<5); break; case 6: PORTB &= ~(1<<4); break; case 7: PORTD &= ~(1<<7); break; >>
Ещё одна пауза на раздумьё
На глаза попался ещё один очень интересный экземпляр самодельной клавиатуры, отличающийся от остальных простотой конструкции, а именно той пластиной, на которой крепятся переключатели.
Мало того, что снизу платы торчат контакты, так они ещё теперь все обвешаны проводами. Нужно что-то вроде нижней крышки. Куски платы разрознены, а закрепить их между собой надёжно и устойчиво на купленных мной столбиках для соединения печатных плат и винтиках — непростая задача. Идеально было бы, если бы она также выполняла роль подставки, придающей всей конструкции желаемый наклон.

Поиск по сети показал, что оргстекло обладает рядом уникальных качеств, такими как малый вес, пластичность при нагреве до 140 градусов, возможность резки лазером и отрезной машинкой, сверления, а также очень невысокой стоимостью.
Похоже, что затея с текстолитом была неправильным инженерным решением, и я купил лист оргстекла толщиной 1.5мм.

Ко всему прочему, я примерил, и мне показалось излишне большим расстояние между кнопками под большие пальцы, я решил его слегка уменьшить, буквально сдвинуть на миллиметр, но это позволит приблизить дальнюю клавишу почти на полсантиметра. Попробовал использовать и клавиши стандартного 1х размера, с ними можно было бы ещё чуть уплотниться, но нажимать на них боковой поверхностью большого пальца оказалось совсем не так удобно.
Корпус
Многие уже перестали замечать, из чего сделаны ценники и подставки под товары в магазине, а сделаны они обычно как раз из этого самого оргстекла. Способов сгибания два, первый — это нагрев паяльной лампой по линии сгиба, и сгибание по деревянной линейке. Чреват пузырьками в материале, возгоранием, а ко всему прочему невысокой точностью. Второй способ — сгибание под собственным весом вдоль нагретой проволоки. Вполне подходящий способ для достаточно тонкого оргстекла.
Проба сгибания

Мне понадобилось: метр нихромовой проволоки, четыре шурупа, доска. Некоторые руководства в интернете говорят о том, что нихромовая проволока растягивается при нагреве, и крайне необходимо использовать растягивающую прожину. По моим скромным подсчётам по данным википедии, увеличение объёма нихрома составляет чуть менее миллиметра при нагреве на 200’C и длине проволоки в 30см.
Перед сгибанием очень важно не забыть снять с оргстекла защитную плёнку.

Попытки нагреть проволоку керамическим элементом паяльника провалились, равно как и универсальным блоком питания на 1А, включённом на 1.5В. Сопротивление участка провода длиной 30см около 1 Ом, и при токе в 1А получается мощность в 1Вт, что по поим расчётам может нагреть проволоку до 150’C за 500 секунд, и только при условии, что тот не будет остывать, а он будет.
Нужно что-то помощнее, и я взял старый блок питания AT, и подключил к концам провода землю и 5В. Эффект не заставил себя ждать, провод очень быстро нагрелся до температуры, когда капля воды на нём мнгновенно испарялась.
Проволока всё же растягивается, причём настолько сильно, что провисает на пару миллиметров, что делает линию сгиба неровной, а по бокам слегка лучше прилегает с сгибаемому листу, нагревает его больше, даже слегка оплавляя. Для пробы, конечно, пойдёт, и тех «растяжителей» в виде столярных дюбелей достаточно, но чтобы сделать красиво и ровно, нужно что-то более надёжное.


Конструкция получается крепкая, прогибается очень слабо, ноутбук сидит на ней как влитой.
Упор для запястий
Не нашёл в русском языке аналога английскому wrist rest, поэтому пусть будет «упор», хотя подразумевается, что это та вещь, на которой кисть отдыхает, когда запястья лежат на ней. Мне досталась от купленной жене клавиатурной подставки-манипулятора (достойной отдельного поста), там был упор для клавиатуры, и для мыши. Последний не пользовался у жены спросом и поэтому я не преминул его использовать в своих целях.
Поскольку упор один, а половины у клавиатуры две, его придётся распилить пополам. А ещё лучше удалить все царапающие гладкие поверхности скобы.


И удобно подсоединить к конструкции.
Рука на таком лежит удобно, и можно найти несколько положений, в которых она совершенно расслабленна.
Внутри — два слоя геля, внутренний пожёстче, а снаружи, под слоем кожезаменителя, помягче, и даже чуть липкий.

Чтобы конструкция не скользила по столу, я купил специальные клеящиеся ножки.
Прорезание
Для того, чтобы переключатели встали на оргстекло, неоходимо сделать в нём прорези под них, и защёлкнуть. Прорези делаются на фирменном оборудовании, но делается это быстро и стоит не дорого.

В первой версии корпуса из оргстекла я сделал отверстия чуть большего размера, чем нужно, примерно на 0.3мм, и переключатели чуть заметно гуляли по горизонтали. Версия два дала мне возможность чуть поправить расположение клавиш под большие пальцы, не использовать гравировку (в месте гравировки материал становится тоньше аж на треть), и собственно уменьшить размер отверстий.
С версией два была следующая проблема. На нижней (вторая версия) переключатели не защёлкиваются (такие маленькие штучки сверху и снизу посередине каждого переключателя). Сначала я подумал, что слишком сильно уменьшил отверстия, но оказалось (. ), что толщина акрилового листа 1.5мм может достигать 1.8мм, а что переключатели расчитаны на 1.5-1.68мм. Такой подставы я не ожидал, но мне повезло, что я заказал четыре «половинки» сразу, и две из них оказались нормальной толщины, и переключатели защёлкивались в них как нельзя лучше.

Смягчители

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

Я решил попробовать все, хотя и ограничен в количестве. Чёрные пошли на «домашнюю» строку, красные — наверх, синие — вниз. Цветным клавишам и крайним колонкам колечек не досталось.
Крепление контроллера
У меня были межплатные стойки SP3, и я попробовал просверлить отверстия в оргстекле, но как-то не слишком хорошо они входят в отверстие даже 5мм, а мой лимит на точное сверление — 3.5мм, так что я откусил у них защёлки-крепления, просверлил вдоль оси, и прикрепил контроллер вот таким незатейливым способом, пропустив жилы витой пары кругом.

Держится просто отлично.
Да, конечно пришлось почти всё перепаивать заново, но имея в этом деле уже какой-никакой опыт это уже немного легче и быстрее. Немного поменял назначение входов-выходов, чтобы проще было со шлейфами и IDC разъёмами (PF0, PF1, PF4-PF7 под выходы, PB0-PB3 под входы левой половины, PB4-PB6, PD7 под входы правой половины).

Сгибание
Пробное сгибание было в принципе не так и плохо, но хотелось линию сгиба сделать поровнее, и я приделал пружину, вынутую из дверного замка с защёлкой.

Надписи на клавиши

Несмотря на то, что с конкретной раскладкой я ещё не определился, использовать ли QWERTY, Colemak, Workman-P или что ещё, но шрифт для клавиш я уже выбрал, это Neuropol Nova от Typodermic. Выбран из за футуристичности, отличной проработки и возможности сделать трафарет. Ко всему прочему, автор любезно согласился на использование этого коммерческого шрифта в моих целях. Трафарет нарезан там же, где и оргстекло, и выглядит примерно так:
Раскладка
Раскладка на текущий момент:
` q w e r t y u i o p =
\ a s d f g h j k l ; ‘
[ z x c v b n m , . / ]
Русские буквы находятся на тех же клавишах, что и обычно. Расположение стандартное, только буква Х уехала влево вниз, слева от Я.
Ряд модификаторов (цветные) включает в себя как модифицирующие клавиши, так и обычные. Модифицирующие срабатывают при нажатии в комбинации, а при однократном нажатии — обычная.
Однократное:
Рыж Жлт Зел Роз Сир Сир Роз Зел Жлт Рыж
Spc Spc Esc Tab Del Tab AGr Bsp Ent Ent
Комбинация:
Lr1 Sft Ctl Alt Met Met AGr Ctl Sft Lr1
Второй слой, работает в комбинации с рыжими клавишами. Стрелок, на мой взгляд, их даже перебор. Два варианта, для фанатов Vim — справа (hjkl), и для фанатов WASD — слева (dxcv на самом деле).
1 2 3 4 5 6 7 8 9 0 —
↰ ↑ ↳ ⤒ ← ↓ ↑ →
← ↓ → ⤓
Итоги
Трудозатраты
Скоро топик читается, да нескоро дело делается.
Если бы я изначально правильно спроектировал конструкцию, то в принципе на всё ушло бы часов 10. А так — два месяца на ожидание некоторых деталей, и ещё три месяца на сборку и доработку всего этого.
Финансы
| Деталь | Цена |
|---|---|
| Микроконтроллер Teensy 2.0 с ножками | 780 |
| Переключатели Cherry MX MX1A-E1JW (голубые) | 1110 |
| Колпачки на переключатели | 900 |
| Оргстекло | 150 |
| Нарезка оргстекла | 350 |
Не стал включать такие мелочи, как припой, провода, шлейф, разьёмы и диоды. Последние мне достались чрезвычайно недорого, несмотря на дорогую доставку, но если размазать по общей сумме заказанного, то получается что-то около 25 копеек за штуку при магазинной цене в 6 руб.
Мне досталась бесплатно подставка под запястья, можно её купить примерно за 20 долларов.
Довольно много потратил на инструменты, но это мне ещё не раз пригодится. Некоторые недорогие из них (пинцет с жароустойчивыми пластиковыми рычажками, которые сразу поплавились при 200’C, лупа, через которую ничего не видно, кусачки, которые не очень кусают), были дешёвыми, но служили очень недолго.
Впечатления
Пока печатал на этой клавиатуре не так много. Наверняка найду что улучшить в раскладке. В целом — удобно, даже очень.
Предвижу комментарии типа «а как же xxxx клавиша?». В моей модификации tmk_keyboard задействовано всего два слоя. Можно добавить ещё хоть 30 штук, и запихнуть туда все возможные клавиши.
На комментарии типа «а как вы будете нажимать сочетания клавиш xxx+yyy+zzz?» могу ответить, что специально выбирал себе программное обеспечение, чтобы не мучить пальцы (Linux, Awesome, Vim, Chromium+Vimium, Zathura). Самое сложное сочетание из тех, которыми я пользуюсь это Ctrl+Meta+[1-9], совмещение нескольких виртуальных рабочих столов на текущий. Сейчас работает нажатием оранжевой, зелёной, сиреневой и клавишей цифры на верхнем ряду, не слишком удобно, но определённо придумаю, как попроще это сделать.
Усовершенствования, которые я хочу сделать в версии 2
Нашёл замечательный расширитель портов ввода-вывода NXP PCF8574AP в корпусе DIP. Можно межплатный шлейф заменить на тонюсенький четырёхжильный провод. Пока не понимаю, стоит ли связываться с I 2 C, по слухам протокол очень небыстр, и много времени в работе прошивки тратится именно на него. Как вариант — использовать регистры сдвига 74HC164 и 74HC165.
Есть сильное желание заменить Teensy на голый AVR с количеством вводов и выводов достаточным для одной половины клавиатуры, а вторую половину доверить PCF’ам. Есть ещё вариант сделать на базе микроконтроллера от Microchip, PIC18F25K50, он ещё дешевле, а помимо прочего ему не нужен внешний кварц для работы с USB.
Сделать печатную плату, чтобы не было этого навесного монтажа, желательно тонкую и гнущуюся. В идеале на неё уже напаять все компоненты, такие как контроллер, диоды, конденсатор, кнопку программирования.
Добавить трекпоинт на датчике Холла, желательно между клавишами HJNM, и три кнопки под мышь (возможно, использовать клавиатурные). Пока не понял, где рукам будет удобно их находить.
Попробовать прозрачные или красные (после вот этой заметки) переключатели Cherry MX.
Сделать корпус из фанеры 1.5мм вместо оргстекла. Не так красиво выглядит, но. Фанера легко поддаётся обработке, менее хрупка. При должной обработке достаточно долговечна и стойка к влажности. Её труднее сгибать, но при такой толщине должно быть не так уж и тяжело. Ко всему прочему можно сделать конструкцию из нескольких листов, сделав прорези и штыри, чтобы её можно было собирать-разбирать, по принципу лего. Есть уверенность, что толщина фанеры не гуляет по площади листа на +20% в отличии от оргстекла.
Сделать недорогую, регулируемую по положению и с креплением для обеих половин клавиатуры руку-манипулятор, крепящуюся на плоскую поверхность.

PS
И да, конечно, как я мог забыть!
Как прокачать клавиатуру на Mac и повысить свою продуктивность

В закладки

Не все пользователи Mac знают о функции Press and Hold, которая появилась еще в Mac OS X 10.7 Lion в далеком 2011 году. Разработчики добавили возможность быстро вводить специальные символы при долгом нажатии на определенную кнопку по аналогии с виртуальной клавиатурой на iPhone и iPad.
Данная функция не стала популярной из-за отсутствия настроек и узкой направленности. Мало кому пригодятся в работе такие символы:
Давайте сделаем Press and Hold действительно полезной и настроим функцию под себя.
Подготовка
Одной из особенностей OS X El Capitan является система SIP (System Integrity Protection), направленная на обеспечение целостности системы. Изначально пользователи и приложения не имеют возможности редактировать системные файлы.
Риск удалить или испортить что-то нужное сведен к минимуму, но нам же необходимо изменить работу системной функции OS X.

Отключаем SIP.
1. Перезагружаем Mac, после звукового сигнала зажимаем клавиши ⌘+R до появления индикатора загрузки. Так мы попадем в режим восстановления системы (подробнее об этом и других режимах загрузки OS X можете прочитать тут).
2. После загрузки в строке меню открываем раздел Утилиты и запускаем Терминал.
3. Пишем команду:
csrutil disable
4. Нажимаем Enter и перезагружаем компьютер.
Ничего страшного после отключения SIP не произойдет, мы же как-то жили без этой системы все предыдущие годы. Однако, если сильно переживаете, после проделанных манипуляций можете заново включить защиту.
Для этого проделайте аналогичные манипуляции в режиме восстановления, но в терминале используйте команду:
csrutil enable

После загрузки системы в Finder переходим по следующему пути:
/System/Library/Input Methods/PressAndHold.app/Contents
Ищем папку Resources. Открываем её свойства, снимаем блокировку (замок в правом нижнем углу) и разрешаем пользователям вносить изменения. В самой папке аналогичным образом получаем разрешение для файлов Keyboard-ru.plist и Keyboard-en.plist.
Настройка

Дальше все просто, открываем файл для нужного языка в приложении TextEdit и видим такой код:
Находим букву, и добавляем любые символы для отображения во всплывающем меню через пробел. Обратите внимание, что меню может иметь разный вид для строчной и заглавной буквы. Если хотите, чтобы всплывающие символы были одинаковыми в обоих регистрах, нужно добавить их для большой и маленькой буквы.
Изначально не все буквы имеют меню Press and Hold. Чтобы добавить меню для нужной буквы, в начале файла после первого тега dict вставьте такой блок кода:
Добавляйте по блоку для каждой нужной клавиши и не забывайте про строчные и заглавные буквы. Для того, чтобы одна клавиша всегда выдавала одинаковое меню, нужно внести изменения в файлы для русской и английской раскладок.
Специфические символы можно быстро найти в панели Эмодзи и символы. Простым перетаскиванием добавляем нужные в код.

Не забудьте заглянуть в параметры и включить все разделы.
Изменения вступят в силу после сохранения файла (некоторые приложения нужно перезапустить, если изменения не появятся сразу).
Результат

Всего за несколько минут можно настроить быстрый доступ к любимым символам и смайлам. Теперь не придется использовать автозамену или запоминать названия кодов для эмодзи.
Решение определенно понравится активным пользователям мессенджеров и социальных сетей, блогерам и редакторам, программистам и верстальщикам.
Обратите внимание, что после появления меню Press and Hold не обязательно курсором выделять нужный символ, достаточно нажать цифру с его номером на клавиатуре.
Ещё по теме
- 10 секретов клавиши Alt (Option) в OS X
- 5 способов прокачать самую бесполезную клавишу на Mac