Chi usa tastiere meccaniche personalizzate conosce QMK e ZMK, i firmware che permettono di riprogrammare ogni singolo tasto e di costruire layer, cioè livelli alternativi in cui gli stessi tasti fanno cose diverse. Il problema è che quei firmware girano solo su hardware costruito apposta, mentre la tastiera del portatile, quella dell’ufficio o la Logitech da pochi euro restano come sono uscite dalla fabbrica.
Kanata risolve il problema: è un rimappatore di tastiera scritto in Rust che si mette in ascolto sotto il sistema operativo, intercetta la pressione fisica dei tasti e la trasforma prima che arrivi alle applicazioni. Funziona su Windows, Linux e macOS con lo stesso file di configurazione, e riproduce buona parte delle funzioni di QMK, tra cui layer multipli, tasti che fanno una cosa se premuti e un’altra se tenuti, macro, sequenze e output Unicode.
Il progetto è arrivato a circa 7.700 stelle su GitHub e la versione stabile è la 1.12.0, pubblicata il 5 luglio 2026, che introduce proprio le funzioni capaci di rendere affidabile la parte più delicata del software.
Il risultato pratico si vede subito. Il Caps Lock diventa Escape quando lo tocchi e apre un layer con le frecce sotto le dita, quando lo tieni premuto, i simboli che sul layout italiano richiedono contorsioni con AltGr finiscono a portata di indice, e i modificatori si spostano sulla fila centrale. Nessun acquisto, nessuna saldatura, solo un file di testo.
Installazione, tre sistemi operativi e tre livelli di attrito
Kanata non ha un installer e non ne ha bisogno. Dalla pagina delle release si scarica l’archivio della propria piattaforma e si ottiene un eseguibile singolo, da lanciare puntandolo a un file di configurazione. Chi ha già la toolchain Rust può invece compilarlo con cargo install kanata.
Su Windows l’archivio contiene diverse varianti dello stesso programma, e la scelta conta più di quanto sembri.
- Architettura. Le sigle
x64earm64indicano il processore della macchina. - Interfaccia. La variante
ttygira in una finestra di terminale che deve restare aperta, mentreguisi riduce a un’icona nell’area di notifica. - Intercettazione.
winIOv2usa gli hook nativi di Windows, mentrewinterceptrichiede il driver Interception, che lavora a un livello più basso e funziona in più applicazioni ma ha un difetto noto capace di disabilitare tastiera e mouse fino al riavvio.
Per iniziare, la variante gui abbinata a winIOv2 è la scelta più ragionevole. Si avvia da PowerShell così.
.\kanata_gui_winIOv2_x64.exe --cfg $env:USERPROFILE\kanata\kanata.kbd
Su Linux serve un passaggio in più, perché il programma deve leggere i dispositivi di input e scrivere su /dev/uinput. Si può lanciare con sudo, ma è più pulito concedere i permessi al proprio account una volta sola.
sudo groupadd --system uinput
sudo usermod -aG input $USER
sudo usermod -aG uinput $USER
sudo modprobe uinput
sudo tee /etc/udev/rules.d/99-input.rules > /dev/null <<EOF
KERNEL=="uinput", MODE="0660", GROUP="uinput", OPTIONS+="static_node=uinput"
EOF
sudo udevadm control --reload-rules && sudo udevadm trigger
Dopo il logout e il rientro, groups deve mostrare input e uinput. Se non li vedi subito, newgrp uinput -c kanata concede i permessi per la sessione corrente, e a quel punto kanata --cfg ~/.config/kanata/kanata.kbd parte senza privilegi di root.
Su macOS la situazione è la più macchinosa. Il sistema non permette a un programma qualsiasi di generare eventi di tastiera, quindi kanata si appoggia al driver Karabiner VirtualHIDDevice, la cui versione supportata è indicata in ogni release (attualmente la v6.2.0). Installato il driver, l’eseguibile va lanciato con sudo e vanno concessi i permessi di accessibilità e monitoraggio input nelle impostazioni di sistema. Il mouse come sorgente di input non è supportato.
La griglia su cui si costruisce tutto, defsrc e deflayer
La configurazione di kanata è un file di testo con estensione .kbd, scritto in una sintassi a parentesi che ricorda il Lisp ma che nella pratica si legge come una tabella. Due blocchi sono obbligatori.
Il primo, defsrc, elenca i tasti fisici che kanata deve gestire, disposti sulla pagina come sono disposti sulla tastiera. Il secondo, deflayer, definisce cosa fa ciascuno di quei tasti. La corrispondenza è puramente posizionale, cioè il terzo elemento di un layer descrive il comportamento del terzo tasto elencato in defsrc.
Qui arriva il punto che riguarda direttamente chi scrive in italiano. I nomi dei tasti seguono la convenzione del layout americano, perché quello che viaggia dalla tastiera al computer non è la lettera stampata sul tasto ma un codice di posizione. È il sistema operativo a decidere, in un secondo momento, che quel codice corrisponde a ò invece che a ;.
Di conseguenza una tastiera italiana ISO si descrive con i nomi americani, secondo questa corrispondenza.
| Nome in kanata | Tasto sulla tastiera italiana |
|---|---|
grv | \ e | (a sinistra dell’1) |
- | ' ? |
= | ì ^ |
[ | è é |
] | + * |
; | ò ç |
' | à ° |
\ | ù § (accanto a Invio) |
102d | < > (a sinistra della Z) |
Con questa tabella in mano, la configurazione minima che trasforma il Caps Lock in Escape su una tastiera italiana diventa leggibile.
(defcfg
process-unmapped-keys yes
)
(defsrc
caps
)
(deflayer base
esc
)
L’opzione process-unmapped-keys yes dice a kanata di tenere sotto osservazione anche i tasti che non hai elencato in defsrc. Non serve per una rimappatura banale come questa, ma diventa necessaria appena si usano i tasti a doppia funzione. Senza, il software non vede gli altri tasti che premi e non riesce a capire se stavi tenendo premuto un modificatore o stavi solo digitando in fretta.
Nei layer c’è poi un simbolo che userai di continuo, l’underscore _, che indica un tasto trasparente, cioè che mantiene il comportamento del layer sottostante. Serve a definire un layer specificando solo i tasti che cambiano, lasciando invariato tutto il resto.
Costruisci il primo layer
Il classico punto di partenza è il layer di navigazione. L’idea è semplice, ovvero tenendo premuto un tasto comodo la mano destra si trasforma in un blocco di frecce e comandi di scorrimento, senza spostarsi verso l’angolo in basso a destra della tastiera. Il tasto comodo per eccellenza è il Caps Lock, che occupa una posizione ottima per una funzione che quasi nessuno usa.
L’azione che serve si chiama tap-hold e accetta quattro parametri, ovvero la finestra entro cui una seconda pressione rapida viene interpretata come ripetizione, i millisecondi dopo i quali scatta la funzione di tenuta, l’azione da eseguire al tocco e quella da eseguire alla tenuta.
(defcfg
process-unmapped-keys yes
)
(defsrc
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e r t y u i o p [ ]
caps a s d f g h j k l ; ' \ ret
lsft 102d z x c v b n m , . / rsft
lctl lmet lalt spc ralt rmet menu rctl
)
(defalias
cap (tap-hold 200 200 esc (layer-while-held nav))
cw (caps-word 2000)
)
(deflayer base
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e r t y u i o p [ ]
@cap a s d f g h j k l ; ' \ ret
lsft 102d z x c v b n m , . / rsft
lctl lmet lalt spc ralt rmet menu rctl
)
(deflayer nav
_ f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 del
_ _ _ _ _ _ _ home up end pgup _ _
_ @cw _ _ _ _ _ left down rght pgdn _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ lrld
_ _ _ _ _ _ _ _
)
Da questo momento un tocco sul Caps Lock produce Escape, mentre tenendolo premuto le lettere u i o p diventano Inizio, Freccia su, Fine e Pagina su, e la fila sotto (j k l ò) diventa Sinistra, Giù, Destra e Pagina giù. La fila dei numeri si trasforma nei tasti funzione, comodo per chi ha una tastiera senza fila F o con i tasti multimediali in primo piano.
Due dettagli meritano attenzione. Il primo è lrld, l’azione di ricarica a caldo. Premendola, kanata rilegge il file di configurazione senza essere riavviato, e se il file contiene un errore continua a usare la versione precedente invece di lasciarti con la tastiera bloccata. Metterla su un tasto del layer di navigazione è la cosa più utile che puoi fare mentre sperimenti.
Il secondo è caps-word, che attiva il maiuscolo solo per la parola in corso e si disattiva da solo dopo lo spazio o dopo il timeout indicato. È il Caps Lock come avrebbe dovuto essere fin dall’inizio, e sul layout italiano trasforma anche il trattino in underscore, pratico per chi scrive codice.
Simboli e AltGr, il caso specifico del layout italiano
Il layout italiano ha un difetto strutturale per chi programma o scrive in Markdown. Le parentesi quadre, le graffe, la tilde, il backtick, la chiocciola e il cancelletto non hanno un tasto proprio e si ottengono solo con combinazioni AltGr, spesso a due mani. Un layer di simboli risolve il problema alla radice, mettendo tutti quei caratteri sulla mano sinistra mentre la destra tiene premuto un tasto.
Per definire un layer in cui cambiano pochi tasti conviene usare deflayermap, una variante più compatta di deflayer in cui si scrivono coppie di tasto e azione invece di riprodurre l’intera tastiera. Le azioni sfruttano i prefissi previsti per gli accordi in uscita, tra cui RA- (o AG-) per AltGr, S- per Shift e C- per Control.
(defalias
sym (layer-while-held simboli)
)
(deflayermap (simboli)
a RA-; ;; @
s RA-' ;; #
d RA-[ ;; [
f RA-] ;; ]
e RA-S-[ ;; {
r RA-S-] ;; }
g RA-e ;; €
q RA-= ;; ~
w RA-- ;; `
_ _
)
Il funzionamento si basa sul fatto che kanata invia al sistema la combinazione fisica e non il carattere, ed è il layout italiano attivo a tradurla nel simbolo giusto. Se alterni più layout i risultati cambiano di conseguenza, quindi conviene verificare ogni combinazione la prima volta.
Su Windows c’è però un’insidia da conoscere, perché il sistema tratta AltGr come Control sinistro più Alt destro. Appena metti ralt in defsrc rischi comportamenti strani, tasti che restano premuti o accordi che non arrivano alle applicazioni.
Il software offre due opzioni di defcfg per attenuare il problema, cioè windows-altgr cancel-lctl-press e windows-altgr add-lctl-release, che rispettivamente eliminano la pressione fantasma di Control o aggiungono il rilascio mancante. Il consiglio pratico però è più semplice, ovvero lasciare ralt fuori da defsrc e affidarsi al layer di simboli, che genera le combinazioni AltGr in uscita senza doverle intercettare in ingresso.
Home row mods, la funzione più desiderata
La funzione che spinge la maggior parte delle persone verso kanata sono gli home row mods, cioè Shift, Control, Alt e il tasto Windows spostati sulle otto lettere della fila centrale, attivi solo quando quelle lettere vengono tenute premute.
L’attrattiva è evidente, soprattutto per chi ha problemi ai mignoli, perché Ctrl+C diventa un movimento in cui nessun dito lascia la posizione di riposo. La configurazione di partenza è un tap-hold per ogni tasto della fila centrale, con i modificatori disposti in modo simmetrico.
(defvar
tap-time 200
hold-time 180
)
(defalias
a (tap-hold $tap-time $hold-time a lmet)
s (tap-hold $tap-time $hold-time s lalt)
d (tap-hold $tap-time $hold-time d lctl)
f (tap-hold $tap-time $hold-time f lsft)
j (tap-hold $tap-time $hold-time j rsft)
k (tap-hold $tap-time $hold-time k rctl)
l (tap-hold $tap-time $hold-time l ralt)
)
Chi la prova così, però, si scontra quasi subito con lo stesso muro. Quando si scrive velocemente le dita non premono e rilasciano un tasto alla volta in sequenza pulita, ma si sovrappongono.
Digitando una parola come sedia, la s è ancora giù quando arriva la e, e quella sovrapposizione è indistinguibile da una tenuta volontaria. Al posto della parola ti ritrovi con un Alt+E che apre un menu.
Le contromisure classiche sono due, entrambe presenti da tempo. La prima è tap-hold-release-keys, che accetta una lista di tasti in grado di forzare l’interpretazione a tocco, per cui elencando i tasti della mano sinistra una raffica su quel lato non può più produrre modificatori sinistri. La seconda è tap-hold-tap-keys, che non anticipa mai l’attivazione del modificatore e aspetta sempre la scadenza del timeout.
La versione 1.12 ha reso questo lavoro molto meno artigianale. La direttiva defhands permette di dichiarare una volta sola quali tasti appartengono alla mano sinistra e quali alla destra, mentre l’azione tap-hold-opposite-hand usa quell’informazione per applicare la regola che in molti scrivevano a mano da anni, ovvero il modificatore si attiva solo se il tasto successivo è sulla mano opposta.
(defhands
(left q w e r t a s d f g z x c v b)
(right y u i o p h j k l ; n m , . /))
(defalias
a (tap-hold-opposite-hand 180 a lmet)
s (tap-hold-opposite-hand 180 s lalt)
d (tap-hold-opposite-hand 180 d lctl)
f (tap-hold-opposite-hand 180 f lsft)
j (tap-hold-opposite-hand 180 j rsft)
k (tap-hold-opposite-hand 180 k rctl)
l (tap-hold-opposite-hand 180 l ralt)
)
Sempre nella 1.12 è arrivata require-prior-idle, disponibile su tutte le varianti di tap-hold. Se hai premuto un altro tasto negli ultimi n millisecondi, la tenuta viene risolta subito come tocco. È la regola che distingue sto scrivendo da sto per dare un comando, ed è il parametro che più incide sul numero di attivazioni sbagliate.
Il mio consiglio, se decidi di provarli, è di introdurli una mano alla volta, tenere il timeout alto all’inizio (200-220 ms) e abbassarlo solo quando smetti di sbagliare, mettendo in conto una settimana di adattamento prima di giudicare.
Avvio automatico
Kanata non si installa come servizio e non parte da solo, quindi chiuso il processo la tastiera torna normale. Su Linux la soluzione più pulita è un servizio systemd a livello di sessione, documentato direttamente nel repository.
[Unit]
Description=Kanata keyboard remapper
[Service]
Environment=PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin
Type=simple
ExecStart=/usr/bin/sh -c 'exec $$(which kanata) --cfg $${HOME}/.config/kanata/kanata.kbd --no-wait'
Restart=on-failure
RestartSec=3
[Install]
WantedBy=default.target
Il file va salvato in ~/.config/systemd/user/kanata.service e attivato con systemctl --user daemon-reload seguito da systemctl --user enable --now kanata.service. L’opzione --no-wait è necessaria, perché altrimenti il programma attende un input prima di uscire e il riavvio automatico non funziona.
Su Windows si crea un’operazione pianificata che parte all’accesso, eseguita con privilegi elevati in modo che la rimappatura resti attiva anche sulle finestre di sistema. Il comando va lanciato da un prompt come amministratore, e conviene tenere eseguibile e configurazione in una cartella senza spazi nel percorso per evitare problemi di virgolette.
schtasks /create /tn "Kanata" /sc onlogon /rl highest ^
/tr "C:\kanata\kanata_gui_winIOv2_x64.exe --cfg C:\kanata\kanata.kbd"
Restano alcuni limiti da dichiarare.
- Sicurezza. Un rimappatore che intercetta tutti i tasti ha, tecnicamente, le stesse capacità di un keylogger, e su Linux concedere al proprio account i permessi su
inputeuinputamplia la superficie di rischio se esegui software non affidabile. - Privilegi su Windows. Senza diritti di amministratore la rimappatura non si applica alle finestre di sistema come il prompt UAC.
- Giochi. Alcuni titoli con sistemi anti-cheat leggono l’input a un livello che kanata non copre, o peggio ne segnalano la presenza.
- Wayland. Il meccanismo Unicode può non funzionare affatto, e serve appoggiarsi a
wtypetramite l’azionecmd. - Tempo. Una configurazione seria richiederà giorni di aggiustamenti, e nel frattempo la tua tastiera si comporta in modo diverso da qualsiasi altra, compresa quella del computer in ufficio.
Un investimento che ripaga chi passa la giornata sulla tastiera
Kanata appartiene a quella categoria di strumenti che non risolvono un problema urgente ma ne eliminano uno cronico, di quelli che hai smesso di notare, come il mignolo che si allunga verso Control decine di migliaia di volte l’anno, la mano che abbandona la posizione per raggiungere le frecce, le parentesi quadre che sul layout italiano richiedono una combinazione a due mani.
Il mio parere, dopo aver guardato da vicino come è fatto, è che il valore stia nella gradualità più che nella completezza. Le configurazioni monumentali che si trovano su GitHub, con otto layer e cinquanta alias, sono affascinanti da leggere e pessime da adottare, perché si copiano, si usano per due giorni e si abbandonano.
Il percorso che funziona parte da tre righe, cioè Caps Lock che diventa Escape e apre un layer di navigazione, usate finché non diventano automatiche. Solo dopo ha senso aggiungere il layer di simboli, che sul layout italiano è probabilmente il guadagno più immediato, e solo alla fine valutare gli home row mods, la parte con il rapporto tra beneficio e frustrazione meno favorevole.
Il progetto non nasconde le proprie ruvidezze, perché la sintassi a parentesi spaventa i primi minuti, la documentazione è organizzata come un manuale di riferimento più che come una guida, e l’avvio automatico richiede lavoro manuale su ogni sistema. In cambio ottieni su una tastiera da pochi euro quello che i produttori di tastiere programmabili vendono a trecento, con un file di testo che ti porti dietro da Windows a Linux senza cambiare una riga.












