Πρόσφατα βρήκα πεταμένο ένα μηχανικό πληκτρολόγιο Razer Black Window Elite. Είχε πάνω του μια στρώση σκόνης, και το πλήκτρο ENTER απουσίαζε. Μετά από ένα πολύ καλό καθάρισμα και απολύμανση βρήκα πως το πλήκτρο space ήταν πολύ χαλαρό, 4 πλήκτρα του αριθμητικού πληκτρολογίου δε λειτουργούσαν, και η ροδέλα ρύθμισης του ήχου ήταν εντελώς αναξιόπιστη. Αλλά αποφάσισα να το αναστήσω. Αγόρασα κάποια ανταλλακτικά σε πολύ φτηνή τιμή, το πλήκτρο space ακόμα και με το ανταλλακτικό ήταν χαλαρό, αλλά δεν τόλμησα να αλλάξω τους διακόπτες από φόβο. Με έσωσε ένας φίλος που είχε ένα μικρό που δεν το ήθελε. Επί τη ευκαιρία, έκανα το macro keyboard λίγο ποιο όμορφο Και ιδού το πληκτρολόγιο Φρανκενστάιν:
Τα leds ήταν πανεύκολο να ρυθμισθούν με το OpenRGB ή το RazerGenie, αλλά τα νεκρά πλήκτρα και η ροδέλα ήταν σπαστικά. Ώρα για λίγο Remmaping! Θα μεταφερθεί το αριθμητικό πληκτρολόγιο μια σειρά πάνω και θα απενεργοποιηθεί η ροδέλα.
Remaping πληκτρολογίου
Στο παρελθόν χρησιμοποιούσα το kmonad για αυτό τον σκοπό, αλλά βρήκα το kanata πολύ καλύτερο και συμβατό με το kmonad. Γιατί δεν έγραψα για αυτά; Γιατί μπορείς να κάνεις τόσα πολλά που για να τα περιγράψω ήθελα σελίδες και είχα και έχω κενά στα ποιο προχωρημένα χαρακτηριστικά τους. Αν αντέχεις δες εδώ μια μη πρακτική δοκιμή που είχα κάνει με το kmonad (μέχρι 6 ενέργειες σε ένα πλήκτρο).
Αλλά πίσω στο kmonad. Πρώτα θα πρέπει να το εγκαταστήσουμε. Μιας και είναι γραμμένο σε Rust ο καλύτερο τρόπος είναι με το cargo-binstall για να έχεις και αυτόματες αναβαθμίσεις με το topgrade. Αλλιώς απλά το κατεβάζεις από εδώ.
Ιντερλούδιο: Permissins & Systemd Custom User Target
Για να ενργοποιώ τα πληκτρολόγια, ο καλύτερος τρόπος είναι να χρησιμοποιείς systemd unit services. Και για να τα ομαδοποιώ έχω φτιάξει ένα custom user target.
function install_user() {
cat <<EOF >"${HOME}/.config/systemd/user/macro-keyboards.target"
[Unit]
Description=All Macro Keyboards
Documentation=http://berry.local/code/crusty-desktop/crusty-keyboard
[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable --now macro-keyboards.target
systemctl --user --no-pager status macro-keyboards.target
}
install_user
Αυτό είναι προαιρετικό, τα παρακάτω όμως δεν είναι
sudo groupadd uinput
sudo usermod -aG uinput "$USER"
sudo usermod -aG input "$USER"
και θα πρέπει να βγεις και να μπεις να πάρει τις αλλαγές.
Αρχίζοντας το Remmaping
Θα φτιάξουμε ένα αρχείο με όνομα black-window.elite με τα παρακάτω:
(defcfg
linux-dev (
/dev/input/by-id/usb-Razer_Razer_BlackWidow_Elite-if01-event-kbd
/dev/input/by-id/usb-Razer_Razer_BlackWidow_Elite-if02-event-mouse
)
log-layer-changes no
allow-hardware-repeat false
process-unmapped-keys yes
)
To βασικό είναι να βρεις το σταθερό μονοπάτι της συσκευής με την βοήθεια των udevadm info /dev/input/eventXX και evtest. Διαβάστε εδώ για περισσότερα. Αλλά μισό τι βλέπω δυο συσκευές; Ο λόγος είναι πως η ροδέλα είναι στο mouse, οπότε κάνουμε remmaping και το mouse.
Στη συνέχεια ορίζουμε τα πλήκτρα του πληκτρολογίου που θέλουμε να αλλάξουμε
;; https://github.com/jtroo/kanata/blob/main/parser/src/keys/mod.rs
;; (defsrc
;; esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 ssrq slck pause prev prev pp volu
;; grv 1 2 3 4 5 6 7 8 9 0 - = bspc ins home pgup nlck kp/ kp* kp- mute
;; tab q w e r t y u i o p [ ] ret del end pgdn kp7 kp8 kp9 kp+ vold
;; caps a s d f g h j k l ; ' \ kp4 kp5 kp6
;; lsft z x c v b n m , . / rsft up kp1 kp2 kp3 kprt
;; lctl lmet lalt spc ralt rmet cmp rctl left down rght kp0 kp.
;; )
(defsrc
nlck kp/ kp*
kp7 kp8 kp9
kp4 kp5 kp6
kp1 kp2 kp3
kp0 kp.
kp+ kp- kprt
prev pp next
volu mute vold
)
Εδώ μια σημαντική παρατήρηση. Στο defsrc βάζουμε τα πλήκτρα που θέλουμε να αλλάξουμε μόνο ή όλα με τον τρόπο που δείχνω στα σχόλια. Μιας και με ενδιαφέρει μόνο το αριθμητικό κομμάτι βάζω μόνο αυτό. Η διάταξη δεν έχει καμία σημασία αρκεί να είμαστε συνεπείς.
Στη συνέχεια ορίζω το πρώτο και (μοναδικό στη συγκεκριμένη περίπτωση) layer:
(deflayer base
7 8 9
4 5 6
1 2 3
XX XX 0
XX XX
kp+ kp- kprt
vold next volu
XX pp XX
)
Ιντερλούδιο knomad και ελάχιστα προχωρημένο kanata
Αν είχα το kmonad η μόνη αλλαγή είναι στην αρχή. Αλλά με το kanata θα μπορούσα να το κάνω και ως εξής
;; defsrc is still necessary
(defsrc)
(deflayermap (base)
nlck 7
)
Το παραπάνω βάζει στο numlock το “7”. Επέλεξα το “7” αντί για το “kp7” μιας και δεν έχω numlock (δες στη φωτογραφία γιατί). Η σύνταξη αυτή είναι ο λόγος που προτιμώ το kanata, αλλά εδώ δείχνω ένα τρόπο συμβατό και με τα δύο προγράμματα. Επίσης, στο knomad δεν μπορεί να χειριστεί δυο συσκευές ταυτόχρονο, απο όσο γνωρίζω τουλάχιστον.
Στα παραπάνω κάλυψα μόνο τα εντελώς βασικά. Ο ουρανός είναι το όριο, αλλά μπορείς έστω και με αυτά να κάνεις πράγματα όπως πχ να αλλάξεις τη θέση στο CAPS. Αλλά για ένα ποιο προχωρημένο παράδειγμα μια απλοποιημένη έκδοση του μικρού 3χ3 πληκτρολογίου
(defcfg
linux-dev /dev/input/by-id/usb-wch.cn_CH57x-event-kbd
log-layer-changes yes
allow-hardware-repeat false
)
(defsrc
1 2 3 a b c j k l
4 5 6 d e f m n o
7 8 9 g h i p q r
)
(deflayermap (base)
1 ∅
2 M-up ;; switch window focus
3 ∅
4 M-left ;; switch window focus
;; When press "5" enter launcher mode
5 (multi (layer-switch arrows) M-/ )
6 M-right ;; switch window focus
7 ∅
8 M-down ;; switch window focus
9 ∅
)
;; Used when on launcher mode
(deflayermap (arrows)
1 (multi (layer-switch base) esc)
2 up
3 (macro S-` / )
4 (macro d d g ␣ )
5 (multi (layer-switch base) ret)
6 (macro g o o g l e ␣ )
7 (macro f i n d ␣ )
8 down
9 (macro r e c e n t ␣ )
)
Ώρα για το systemd unit
Θα φτιάξω ένα αρχείο kanata-black-window.service με τα παρακάτω:
[Unit]
Description=Razer Black Window Elite
PartOf=macro-keyboards.target
After=default.target
[Service]
ExecStart=%h/.cargo/bin/kanata --cfg %h/.config/crusty/keyboards/black-window.kbd
[Install]
WantedBy=macro-keyboards.target
Προσέξτε το WantedBy=macro-keyboards.target, αν δεν είχα κάνει το custom target θα ήταν WantedBy=graphical-session.target. Τέλος μια μικρή συνάρτηση που εγκαθιστά τα πάντα στις σωστές θέσεις, αλλά μπορείτε ποιο απλά να γράψετε τις εντολές στο τερματικό.
#!/usr/bin/env bash
current_dir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
keyboard_files="$(readlink -f "${current_dir}/keyboards")"
function install_kbd() {
keyboard="$1"
ctrem "Installing macro keyboard: [green]$keyboard[/]."
mkdir -p "${HOME}/.config/crusty/keyboards"
cp "${keyboard_files}/${keyboard}/${keyboard}.kbd" "${HOME}/.config/crusty/keyboards"
# Systemd user service
service_name="kanata-${keyboard}.service"
cp "${keyboard_files}/${keyboard}/${service_name}" "${HOME}/.config/systemd/user/${service_name}"
systemctl --user daemon-reload
systemctl --user enable --now "${service_name}"
systemctl --user status --no-pager "${service_name}"
}
install_kbd "black-window"

Και αυτό ήταν, ένα άχρηστο πεταμένο και ακριβό πληκρολόγιο, που προσωπικά δεν θα αγόραζα ποτέ απέκτησε νέα ζωή, και μου αρέσει. Εντάξει είναι λιγάκι Φραγκενσταίν ![]()
Αλλά δεν είναι αυτό το θέμα, ελπίζω να πήρατε ιδέες για να φτιάξετε το δικό σας macro keyboard.
