原有ZMK固件添加对ZMK STUDIO支持踩坑指南
干嘛大叔
编辑于 2025年02月09日 15:50
收录于文集
共4篇

键盘群里苦ZMK无法实时改键久矣,前几天ZMK推出了可用的ZMK STUDIO,群友奔走相告,有大佬写了教程,于是踩在大佬的肩膀上给原有的sofle和Dactyl键盘增加了对ZMK studio的支持。作为一知半解的小白,不出意外地出了很多意外,最后磕磕绊绊地改成功了,把过程分享出来,抛砖引玉,供各位大佬以及小白参考。

我的方法肯定不是最优解,但是能跑通我也就不改了,万一改废了我也没有解决能力。

本文仅针对在github修改,我没有搭建本地环境,就不班门弄斧了。


以分体键盘为例,给原有固件增加ZMK studio支持,至少需要修改

build.yaml

*.conf(*是键盘名称,我的键盘是Dactyl,就是修改dactyl.conf文件,以下相同)

*.dtsi

这三个文件,

如果你的键盘引用了ZMK主分支以外的分支,还需要修改

west.yml

文件(后面会详细介绍)。

同时,如果你之前没有

*.json

文件的话,现在还需要做一个physical layouts文件。

因为每个人的习惯不同,这几个文件的位置不固定,但是zmk文件夹里就那几个文件,应该也好找,我就不放截图了,实在不行github还有搜索功能对不对。

1.制作physical layouts文件(已有的请跳过)

physical layouts文件可以理解为用代码的形式描述键盘布局,有两种方式可以做:

一种是先去KLE网站画键盘配列,然后把raw data粘贴到转换网站,转换完再粘贴到zmk physical layouts转换网站;

一种是直接手搓json,然后粘贴到zmk physical layouts转换网站。

两种方式工作量差不多,第一种简单一点。

1.1在KLE网站画配列

1.1.1

https://www.keyboard-layout-editor.com/

这个网站可以比较直观的画出键盘配列,基本上DIY键盘的第一步都会到这个网站画配列(因为要生成定位板文件),怎么操作我就不赘述了。

1.1.2 画好配列后,把raw data复制到

https://qmk.fm/converter/

粘贴到input里面,点击convert,自动转换成json的格式

1.1.3 把output里面的内容复制到

https://zmk-physical-layout-converter.streamlit.app/

粘贴到JSON description栏,点击update DTS using this按钮,自动转换成ZMK studio支持的格式

1.2 手搓json文件

1.2.1 如果手上有别的键盘的json文件,可以直接修改。重点是row、col、x、y这几项内容,lable的内容无所谓,转换的时候会自动被剔除

1.2.2 然后按1.1.3的操作,转换成zmk studio支持的格式。

2.修改dtsi文件

2.1 在dtsi文件里,把上一步生成的physical layout代码粘贴到其他的#include 之后

注意:转换网站转出来的代码默认的开头是

#include <physical_layouts.dtsi>

/ {

  physical_layout0: physical_layout_0 {

    compatible = "zmk,physical-layout";

    display-name = "LAYOUT";

    kscan = <&kscan0>;

    transform = <&matrix_transform0>;

为了便于区分,最好是把

physical_layout0: physical_layout_0

display-name = "LAYOUT";

改为你自己的键盘名称,我的改成了

#include <physical_layouts.dtsi>

/ {

  dactyl_layout: dactyl_layout {

    compatible = "zmk,physical-layout";

    display-name = "dactyl";

kscan = <&kscan0>;

    transform = <&matrix_transform0>;

2.2 在chosen部分把

zmk,matrix-transform = &default_transform;

改为

zmk,physical-layouts = &physical_layout0; (加粗部分以上一步的键盘名称为准,改就全改,不改就全不改,以下不再赘述)

2.3 在文件末尾添加

&dactyl_layout{

transform = <&default_transform>;

kscan = <&kscan0>;

};

zephyr_udc0: &usbd { 

    compatible = "nordic,nrf-usbd"; 

    status = "okay"; 

};

这段代码的第一部分是必加的,第二部分是usb logging相关,大佬说不加会报错,反正我加了编译成功了,没试过不加。

3.修改conf文件

CONFIG_ZMK_STUDIO=y

CONFIG_ZMK_STUDIO_LOCKING=n

CONFIG_ZMK_STUDIO_LOCK_ON_DISCONNECT=n

在conf文件里添加这三段代码,分别是启用zmk studio,关闭zmk studio锁定和断开连接时锁定(我猜的)

4.修改west文件

某些键盘添加了基础之外的新功能,比如模拟鼠标移动等,在west文件里引用的不是zmk的main分支。

如果引用的是第三方的github仓库还好,如果引用的是zmk自己的其他分支,就需要到zmk的仓库里看看作者有没有更新,找到更新后的,这个就得具体问题具体分析了。

比如睫毛哥的solfe,引用了ZMK作者的feat/pointers-move-scroll分支以实现模拟鼠标移动,但是作者没有给这个分支更新对zmk studio的支持,而是写了新的分支feat/pointers-with-input-processors,所以我们就要修改west文件。

如果作者没有更新或新建分支,那暂时就先别改zmk studio了,等等党永远不亏。

5.修改build.yaml文件

在原有的主手(通常是左手)固件编译命令里增加一行

snippet: studio-rpc-usb-uart

这条命令是启用用于通过 USB 进行 ZMK Studio 通信的端点。

以上文件修改完,理论上就能生成新的支持zmk studio的固件了,有条件的话先拿闲置的主控刷一下看看是否正常,验证过了再刷到键盘里。如果有问题,那就再改改,建议加睫毛哥的QQ群(945900883)咨询大佬。别问我,看我的行文也能发现我就是个小白。


我是Noir Guo,一个马上四旬的三旬老汉。