VIA 教學 + 使用 Magic Keycode 切換 MAC/WIN
很久以前講說要寫的 VIA 教學以及要怎麼使用 VIA 來切換 GUI/ALT 來達成不用耗額外一層來分別放 MAC/WIN 用的
WINDOWS 跟 MACOS 鍵盤差別
在 WINDOWS 下時,左下角通常是安排成 CTRL, WIN(GUI), ALT,直接將這個鍵盤用在 MACOS 上的話,會變成 CTRL, CMD(GUI), Option(ALT),所以如果我們能做一個按鈕切換 GUI 跟 ALT 的順序,同一層就都可以用在兩邊系統上了,如果要看怎麼使用的話,可以跳到 Magic Keycodes,下面會先講一下 VIA 基本上怎麼使用
VIA
VIA 是一款圖形化介面,可以馬上更改 QMK 鍵盤 (需將 VIA 功能開啟並燒錄) 的按鍵配置,並不用每次改個按鍵都要重刷一次,雖然並不能甚麼 QMK 功能都從 VIA 設置,但整體方便且簡單許多

當插著鍵盤時,打開 VIA,有的鍵盤如果有被納入的話,是可以馬上出現鍵盤配置的,但如果沒有的話,要額外加入鍵盤 json 設定檔。可以從左上 File -> Import Keymap 選擇鍵盤設定檔,就可以出現以下畫面

這樣就可以來更改設定了。而在 Setting 那邊,可以將 Show Desgin tab 打開,會多一個 Design,可以看到鍵盤電路的接法

但不知道是否能利用這個來寫 QMK 相關的原始碼呢? 這我就不清楚了,目前我手上也沒有我這台 OM64PRO 的 QMK 原始碼。如果有人知道這個是否足夠還是要配上其他資訊才能把 QMK 弄出來,再麻煩在底下留言了,感謝
VIA 基礎設定
先貼一個 QMK 說明文件,很多設定跟解說都可以從這上面找到。切回到 CONFIGURE 可以來設定我們的鍵盤了

左上角:
- KEYMAP 我們現在看到的這個頁面
- MACROS 設定每個 MACRO 要怎麼設置,配合左下角 MACRO 的鍵來執行
- LIGHTING 我這台開這個會跳掉,但 QMK LIGHTING 可以使用,可能要看鍵盤的設定
- SAVE + LOAD 將當前鍵盤設定存下來或者讀取舊的設定檔,這個也是 json 檔,但跟前面題的是不同功用,請勿覆蓋前面的 json
左下角
- Basic Code 鍵盤上看得到的那些鍵,前面兩個有比較特殊的,分別為:空白(KC_NO)跟倒三角形(KC_TRNS),這兩個在解釋上會有點不同。空白是指這個鍵為空,按下去什麼事都不做;但倒三角形則是這層不設置東西,往下一層找(備註 QMK 第0層是排在最底下)。例如我在第一層 Z 設置空白但在 X 設置倒三角形,我按第一層的 Z 鍵什麼事都不會發生,但按第一層的 X 鍵,他會輸出我第零層 X 鍵值 - X 出來
- MEDIA 一些關於多媒體的操作,如上下一首或者調整音量等
- MACRO 用來觸發左上角 MACROS 的設定
- LAYERS 切換鍵盤層的按紐
- SPECIAL 這邊會有一些比較特別的值,例如 GRAVE ESC 或者 Any 等等,會在後面再詳細介紹
- QMK LIGHTING 切換背光模式或者更改明亮度可以在這找到
設定鍵值
1- 先在右上角的鍵盤中選擇要更改的鍵

2- 下方選擇要變更的值
3- (選擇 Any 的話) 要輸入鍵值

4- 設定結束 (馬上生效,可以測試)

LAYERS 介紹
QMK 的 layers 是從將數字大排在最上面(最優先)而第0層最低,如果多層有打開的狀況,會優先使用最上面的值,而如果用 KC_TRNS 倒三角形的話,就會在往下面找,通常預設都是第0層為預設層(一直開啟),其他層都會關閉,所以可以在其他層短暫開啟,那按下去的鍵就會變成該層的鍵。更詳盡的解釋可以看 Keymap
- MO(layer): 當壓著的時候切到指定層,該鍵位在指定層要用 KC_TRNS (我目前測起來感覺沒差,但也按不到所設定的值)
- TG(layer): 開關指定層
- TT(layer): 跟 MO 用途一樣,但按多次(預設5次)時會變成將指定層開關如 TG
- OSL(layer): 短暫開啟指定層直到按下第二個鍵
- TO(layer): 打開指定層,關閉其他層(除預設層外)
- FN1(FN3)/FN2(FN3): 預先設置好的按著的時候是 FN1/2 但搭配 FN2/1 會是 FN3
- Space Fn1/2/3: 按一次是空白鍵,按住是 Fn1/2/3
非在 LAYER 裏頭,需要使用 SPECIAL Any 來設置
- DF(layer): 設置預設層
- LM(layer, mod): 像 MO 一樣但會同時壓著 MOD (如 ALT/CTRL等)
- LT(layer, kc): 壓著時使用指定層,按一次是輸出按鍵,例如前面所設置 LT(1, KC_CAPS) 就是 按住時用第一層,但按一次就會是 CAPSLOCK
SPECIAL 介紹
- 一些需要 SHIFT 的鍵例如 ( ) ^ 等
- 切換輸入如日文的片平假名
- GRAVE ESC - ESC` (VIA 按紐) 一個蠻重要的功能,在比較小的鍵盤上,通常不會有 F 那一列也就不會有 ESC,這個設置後可以把 ESC 跟 `~ 放在一起,設置好後,正常按是 ESC,配合 SHIFT 是 ~,配合 WIN(GUI) 則是 `;但在 MAC 中 ` 是沒辦法這樣按的因為 CMD(GUI) 配合此鍵會變成 CMD + ` 會變成切同應用程式的不同視窗。
- Space Cadet Shift - LS(, LC(, LA(、RS), RC), RA)、SftEnt,利用左右功能鍵達到輸入左右括號,例如 LC( 按一次是 ( 長壓就是正常左 CTRL,而 RA) 按一次是 ) 長壓是右 ALT,最後的 SftEnt 按一次是 ENTER 長壓是右 SHIFT。
類似功能可以看 Mod-Tap MT(mod, kc) 長壓是 mod 但按一次是輸出 kc,mod 可以多個功能鍵組合(用|),但 kc 只能一些基礎鍵 (0x99 KC_SEPARATOR 之前),所以只能組出 [] 這種,() {}這種就得要額外搭配 SHIFT,如 MT(MOD_LCTL | MOD_LSFT, KC_RBRC) 長壓輸出左 CTRL+SHIFT 但按一次輸出 ] 配合 SHIFT 就有 } - Toggle NKRO 開關全鍵無鬼鍵
- 一些系統操作如睡眠、調整螢幕亮暗等
- 滑鼠操作
- 一些讓鍵盤發出聲音等 (這個我就不太懂)
- Any 可以設一些 VIA 內建沒有的,例如前面講述到 MT/LT 或者是等等介紹的 Magic KeyCodes,注意有的鍵是只能用 VIA 所用的代稱,例如 KC_RBRC 可以但是 KC_RIGHT_BRACKET VIA 是認不出來的,另外有的只能使用 HEX 時溜進位來使用。如果輸入的 HEX 碼 VIA 認得出來,他也會用他的表示法顯示,例如
MT(mod, kc) = (QK_MOD_TAP | (((mod)&0x1F) << 8) | ((kc)&0xFF)) = 0x6000 | (((mod)&0x1F) << 8) | ((kc)&0xFF)
此算式可在此 #define MT(mod, kc) ... 找到,MT 所使用的 MOD 表 mod_bits (非KC_),而一般 KC 表可在 hid_keyboard_keypad_usage 找到,因此MT(MOD_LCTL | MOD_LSFT, KC_RBRC) = MT(0x01|0x02, 0x30) = 0x6330
,設置好會發現他出現 ADV,可以把滑鼠移上去就會顯示更詳細的資料,如果沒有出來切到 KEY TESTER 再切回來應該就會有了。如果 VIA 無法表示,但該 HEX 是可以用的,就會直接出現 HEX 值如圖片空白鍵附近的 0x5c15,如果失敗可能會是空白或者上一次弄 Any 的值

Magic Keycodes
這邊除了防鬼鍵 Toggle NKRO (MAGIC_TOGGLE_NKRO) 已經有在 VIA 中之外,其他都只能用 HEX 碼設定,而相關 HEX 表可以在這裡搜尋相關的 MAGIC_... 找到。
- MAGIC_TOGGLE_NKRO - 0x5c14 用 Any 輸入進去後可以發現,會出現 NKRO 跟使用 Toggle NKRO 設置後一樣的
- MAGIC_TOGGLE_ALT_GUI - 0x5c13 切換 GUI 跟 ALT,也就是最前面提到可以拿來切換 WIN/MAC 的使用環境,當我現在是 CTRL, GUI(WIN), ALT 按下此鍵就可以變成 CTRL, ALT, GUI 在 MAC 上就會是 CTRL, Opt, CMD 了,那在暗一次就可以切換回來。這也是上面那張圖我所設的功能,在 VIA 中他就只會顯示 0x5c13
- MAGIC_TOGGLE_GUI - 切換 GUI 這個比較不建議使用,因為前面的 enum 是用算的,假如鍵盤有更改這些預設值,我們是沒辦法知道的,再更改的情況下,就不確定我們推出來的 HEX 碼正不正確,所以不建議去使用這個,而是用 MAGIC_NO_GUI 跟 MAGIC_UNNO_GUI 來達成
- MAGIC_NO_GUI - 0x5c06 關閉 GUI,有的人玩遊戲可能想要關掉 Win 鍵就可以使用這個
- MAGIC_UNNO_GUI - 0x5c0f 開啟 GUI,配合上述 MAGIC_NO_GUI 來達到 MAGIC_TOGGLE_GUI 的功能
還有其他例如切換 CTRL 跟 CAPSLOCK 或者切換 CTRL 跟 GUI 等功能可以從 QMK Magic Keycodes 來找有沒有自己想要的功能。
結語
VIA 可以很方便使用圖形化介面來設定,且設定是馬上生效,所以測試起來就方便很多,不用改一個鍵要從 QMK 然後再把它用進鍵盤中,這裡大致上介紹了 VIA 跟 QMK 可以做到的一些設定,並介紹一些沒有在 VIA 的選項中但可以使用的功能,如 LT, MT 又或者 Magic Keycodes 等,利用 HEX 碼達成方便切換 Win/Mac 按鍵順序的功能。我個人也還在嘗試 VIA 能怎樣設置讓鍵盤可以按得比較方便,如果有任何想知道的功能,或者我講不清楚的地方,歡迎在底下留言。
參考資料
- VIA
- QMK 說明文件
- Quantum Keycodes 可用來查詢指令以及 Magic Keycodes 的 HEX
- Keycodes 可用來查詢基本鍵的 HEX