7 let s ErgoDoxem

Letos uplynulo 7 let od zakoupení moji první sady klávesnice ErgoDox. Vzpomněl jsem si na to, když se letos konečně dostala v ToDo listu řada na některé věci, které zde tenkrát nefungovaly (tedy, hlavně multimediální klávesy :-) ) a po dlouhé době jsem do ni zase chvíli hrabal :-)

ErgoDox je open hardware ergonomická klávesnice. Její vznik je datován někdy kolem roku 2012, kdy někdo (Dominic Beauchamp) vytvořil a zveřejnil návrh dle něj ideální ergonomické klávesnice. O něco později se ji chytil massdrop.com (dnes už drop.com :-) ) a v několika vlnách se prodávaly stavebnicové kity. Ono, co je konkrétně potřeba k takové klávesnici: tištěný spoj (ten se dle návrhu nechával vyrábět), mechanické spínače (ty se koupí hotové, ale ono i dnes sehnat je samostatně je dosti pracné... nebo... ne pracné, ale stojí obvykle více, než celá konzumní mechanická klávesnice), nějaký microcontroller (zde použito Teensy a nějaký I/O expander), krabička a pár obyčejných elektronických součástek (diody, rezistory, konektory, ...). Massdrop to tedy prodával jako stavebnici, kdy všechny tyhle komponenty přišly zabalíkované s hezkým obrázkovým návodem na složení dohromady. Tenkrát jiná možnost nebyla, tedy kromě nákupu jednotlivých komponent samostatně. Dnes se dá zakoupit již zkompletovaný ErgoDox EZ; byť cenově vychází asi ještě o něco dráže, než na kolik tenkrát přišla tahle stavebnice.

Někdy z kraje roku, po pár měsících čekání a jedné návštěvy celnice, mi přišla tedy první stavebnice se spínači Cherry MX Blue. Navzdory mé vrozené šikovnosti klávesnice už první večer fungovala a nastala první fáze učení se psát. U ErgoDoxu, narozdíl od prehistorických psacích strojů z dob starověkého Egypta běžných klávesnic jsou klávesy zarovnány do sloupů nad sebe. Na tohle trvalo nejdéle si zvyknout (zhruba týden), ačkoliv již pak člověk nechápe, jak někdo může na těch rozšoupnutých řadách psát. Jelikož jsem disponoval dvěmi pracovními stanicemi, u kterých jsem trávil nejvíce času, tak jsem po tomto úspěchu s některou z dalších objednávek kupoval druhou stavebnici - tentokrát se spínači Cherry MX Clear. A obě dvě klávesnice mi dodnes slouží, v podstatě (s výjimkou notebookové klávesnice, atd.) jako jediné používané. A to i po přežití letošních změn :-)

Firmware

Jak již padlo, v ErgoDoxu bylo Teensy MCU. To tehdy disponovalo USB portem a dostatečnými parametry na obsluhování klávesnice. Teensy ve stavebnici přišlo úplně čisté a bylo potřeba do něj nahrát program, aby se jako klávesnice začala chovat. Zní to složitě, ostatně v té době Arduino taky neznal úplně každý jako dnes, ale fungovalo to na úplně stejném principu. Prostě se to připojilo přes USB, nahrál se do toho program a ono to fungovalo. Jedna z výhod až takhle otevřené klávesnice je, že s tím obslužným programem se dají dělat celkem psí kusy a u každé klávesy se dá vysvětlit, co má dělat. Není nikde nic natvrdo řešeno :-) Massdrop tehdy vzal opensource firmware, co byl pro klávesnici napsán a vytvořil pro něj webový konfigurátor. Ve webové aplikaci si šlo tedy graficky vyklikat co na které klávese má být. Navíc jak tehdejší firmware, tak i konfigurátor uměly již vrstvy (ono tedy v případě ErgoDoxu je to tak trochu nutnost, jelikož oproti klasické klávesnici má poměrně o dost kláves méně). Vrstvy fungují zhruba tak, že v každé (použité) vrstvě se klávesám přiřadí nějaká funkce, co mají dělat (klávese A že je A, enteru enter, atd). A vrstvy se mezi sebou můžou (například další klávesou přepínat). Takže při zapnutí klávesnice funguje na první vrstvě. Ale nastavenou klávesou mohu přepnout na jinou vrstvu a tím pádem se klávesy začnou chovat jinak. Navíc obvykle přepínání vrstev i v tomhle firmwaru se lišilo - buď se do dané vrstvy přeplo stiskem nastavené klávesy. Anebo jejím držením (a tedy vrstva přestala být aktivní po pouštění této klávesy). Uvedu reálný příklad - jak jsem říkal, kláves je méně a namátkou zde chybí třeba celá řada tlačítek F1 - F12. Ty mám tedy strčené v další vrstvě na stejných klávesách, kde je jinak číselná řada spolu s diakritickými znaky. Takže za normálního stavu píšu diakritická písmenka (nebo číslo se shiftem). Nicméně při držení speciální klávesy, která mě přepíná do další vrstvy, mi stejné klávesy najednou fungují jako F1, F2, ... F12.

Webový konfigurátor byl jinak super. Šlo si tam vše jednoduše vyklikat, následně aplikace stiskem tlačítka zkompilovala firmware a stáhla ho. Ten se pak jen nahrál do Teensy a fungovalo to. To co mi ovšem nefungovalo (a nejvíc mi vadilo) byly multimediální klávesy. Tedy, v mém případě hlavně změna hlasitosti. Ve firmwaru i webovém konfigurátoru pro ně podpora byla, ale nikdy to nefungovalo. A tak jsem letos konečně začal zkoumat, jestli by to nějak nešlo opravit... a našel jsem qmk.fm.

QMK je opensource firmware pro klávesnice; nejen tedy pro ErgoDox. Nicméně ErgoDox EZ se nachází mezi řadou podporovaných klávesnic (a naštěstí "sériový" ErgoDox EZ až na jednu malou drobnost je prakticky identický s massdropí stavebnicí, takže bez jakýchkoliv úprav QMK na klávesnici funguje). Také je k dispozici sofistikovaný webový konfigurátor, kde se klávesy dají naklikat a pak následně stáhnout zkompilovaný firmware. Vyjma toho, že multimediální klávesy v něm normálně fungují, umí QMK ještě další řadu velice zajímavých věcí. Z nichž jsem některé vyzkoušel a tak si je oblíbil, že mi na klávesnici již zůstaly. Zaujaly mě konkrétně tyto funkce:

  • sticky modifikátory - u modifikátorů jako ctrl, alt, shift... ale i případně přepínačů vrstev lze použít sticky variantu, kde stačí stisknout klávesu modifikátoru, pustit ji a následně zmáčknout další klávesu, kde se modifikátor na tenhle jeden stisk naaplikuje
  • tap vs hold - klávesám lze přiřazovat různou funkci podle toho, jestli se klávesa drží nebo je stisknuta. Mám například na jedné klávese namapované meta, která mi v OS zobrazí náhled se všema oknama. To platí, když to tlačítko jen stisknu. Pokud ho ovšem držím, jsem přepnutý do druhé vrstvy a mohu mačkat klávesy v druhé vrstvě, dokud ten přepínač držím.
  • kombinace modifikátorů - modifikátory na jedné klávese lze kombinovat. Mohu tedy mít jednu klávesu, která se tváří jako ctrl+alt+shift zároveň (tedy když ji držím a k ní stisknu třeba A, výsledkem bude ctrl+alt+shift A). Stejná variace se dá kombinovat i s přepínáním vrstev (tedy že mě klávesa přepne do vrstvy X, ale každá klávesa v ní bude mít ještě modifikátor - třeba ctrl)
  • tap dance - lze nastavit akce na sekvence kláves. Tedy dvojí rychlé stisknutí klávesy může provést něco jiného, než stisknutí jedno, atd.

Osobně jsem kombinaci výše zmíněných funkcí využil, zejména na různé akce ve window manageru. Takže ačkoliv mám množství kláves tak akorát na písmena, tak zároveň mohu velice jednoduše vhodnými stisky dvou kláves (pod kterými jinak třeba i ty písmena jsou) na jednu ruku přesouvat okna po ploše, mezi monitory, atd. Doopravdy jednou rukou.

Co se týče té zmíněné odlišnosti - ErgoDox EZ má LED podsvětlení celé klávesnice. Nebo takněco. Původní ErgoDox měl akorát 3 klasické LEDky na 3 konkrétních spínačích. Pokud se tedy vezme firmware z konfigurátoru tak jak vypadne, LEDky nesvítí. Nikdy. Na funkci to jinak nemá vliv. Nicméně, LED se dají rozfungovat, jen už je potřeba vzít zdrojáky firmwaru a upravit si to (konfigurátor nabídne stažení i zdrojáků, takže stále si lze vyklikat mapu, stáhnout to, upravit a zkompilovat u sebe). Moje změna byla, že jsem do souboru s mojí mapou (keyboards/ergodox_ez/keymaps/XXX/keymap.c) přidal na konec souboru tenhle kus kódu:

  1. uint32_t layer_state_set_user(uint32_t state) {
  2.   if (biton32(state) == 0) {
  3.     ergodox_right_led_3_off();
  4.   } else {
  5.     ergodox_right_led_3_on();
  6.   }
  7.   return state;
  8. }
  9.  
  10. void led_set_kb(uint8_t usb_led) {
  11.     if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
  12.         // Turn capslock on
  13.         ergodox_right_led_2_on();
  14.     } else {
  15.         // Turn capslock off
  16.         ergodox_right_led_2_off();
  17.         }
  18.          if (usb_led & (1<<USB_LED_NUM_LOCK)) {
  19.         // Turn numlock on
  20.         ergodox_right_led_1_on();
  21.     } else {
  22.         // Turn numlock off
  23.         ergodox_right_led_1_off();
  24.         }
  25. }
Funguje to jednoduše - první LED funguje jako numlock, druhá jako capslock a třetí svítí pokaždé, když je aktivní nějaká jiná, než první (základní vrstva).

Krabička

Co se týče obalu, do kterého je klávesnice uzavřena, nebyla stavebnice od Massdropu nějakou hitparádou. Ostatně 3D tisk nebyl v té době úplně pokročilý, plastovou krabičku na zakázku na pár kusů nikdo nevyrobí... plechovou možná ano, ale bude stát více než zbytek klávesnice... Takže krabička na klávesnici byla zhotovena z akrylátových plátů. Tedy v podstatě vhodně nařezaných kusů plexiskla, která se skládaly na sebe a tím z nich vznikla krabička. Ne že by to principiálně bylo ošklivé, ale problém ošklivosti vznikal při skládání. Pokud se přes sebe dá 5 kusů průhledného plexiskla, potom nečistota na jednom z nich je ve výsledku vidět. A nečistota tam bude, pokud se krabička neskládá v laboratorním prostředí. A ne jedna. Navíc dle Murphyho zákonů vlivem času se další nečistoty vloudí mezi smontované pláty, ale žádné se nedostanou ven. Takže ten celek prostě vždycky vypadá poněkud špinavý, ať se člověk snaží sebevíc.

Druhý možná omyl byl, že z tehdejších dvou možností jsem si vybral krabičku s místem pro zápětí. Tedy o kus větší, kde pod klávesnicí bylo místo. Původní myšlenka byla nalepit tam gelové podložky jako polštářky. K tomu také nikdy nedošlo a po nějakých dalších úpravách pracovního místa to ani nikdy nebylo potřeba, protože jsem se v těch místech rukou klávesnice nedotýkal. Takže celá ta klávesnice vlastně byla akorát zbytečně o nezanedbatelný kus větší.

No, doba 3D tisku za tu dobu pokročila, tak jsem se podíval, jestli by nešla nějaká nová, fešná krabička vytisknout (tou dobou jsem měl seskládanou už druhou, větší, 3D tiskárnu... o které jsem asi ještě nepsal :-) ). Až jsem našel tento model. Model je naprosto parádní, skvěle vymyšlený, se zámky, celé to jde krásně smontovat a vypadá to moc dobře. A řekl bych, že je to opět příjemné zlepšení proti předchozímu stavu :-) Jedinou vadou na kráse zůstává jedna skutečnost, na kterou jsem při prvotním sestavování stavebnic zapomněl... a kdybych nezapomněl, tak bych se na to asi vykašlal :-) Problém totiž je, že jeden z akrylátových plátů, se, tak jak to u mechanických klávesnic bývá časté, dával pod spínače. Tedy konkrétně mezi spínače a tištěný spoj. Což znamená, že pro kompletní demontáž původní krabičky bylo nutné všechny spínače odletovat a znovu naletovat. (A ve své podstatě u toho tištěného modelu se to skládá stejně - spínače jsou také naletované přes plát...). Navíc vlivem nějakých dalších komplikací (se sloní nohou a tak podobně) jsem si to odletování dal vícekrát. Takže po mnoha usilovných hodinách jsem značně zkrátil čas, za který umím vyletovat spínač z tištěného spoje... a vyměnil krabičku :-) Výsledek vypadá takto:

Závěrem

Motivace pořídit si ergonomickou klávesnici se u mě zjevila po zdárném naučení se psaní všemi deseti, kdy jsem se sice naučil psát, ale s některými písmeny jsem měl kvůli rozšoupnutým řadám neustálý problém. Opravdové psaní všemi deseti jsem se pro změnu učil po té, co se mi na rukou začal objevovat CTS nebo jiné formy RSI. Po sedmi letech se dá zhodnotit, že po této změně se problémy nikdy neobjevily v takové intenzitě jako dříve a tedy z tohoto pohledu klávesnice patrně fungovala velice dobře (byť to nebyla jediná změna). Psaní na klávesnici je velice příjemné a i ostatní práce díky vrstvám a tedy možnosti vytřískat z málo kláves opravdu mnoho je velice pohodlná. A teď po těchto změnách mohu říci, že už mi doopravdy funguje snad všechno, takže mi ty dvě historické klávesnice asi ještě chvíli vydrží :-)