# Help using Via to program macros on the Framework Laptop 16 keyboard

**URL:** <https://community.frame.work/t/help-using-via-to-program-macros-on-the-framework-laptop-16-keyboard/65537>\
**Category:** Linux\
**Tags:** ubuntu\
**Created:** [March 4, 2025, 3:44pm UTC](https://community.frame.work/t/help-using-via-to-program-macros-on-the-framework-laptop-16-keyboard/65537 "2025-03-04T15:44:34Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![joncojonathan](https://avatars.discourse-cdn.com/v4/letter/j/e9c0ed/32.png) [@joncojonathan](https://community.frame.work/u/joncojonathan)\
**Post date:** [March 4, 2025, 3:44pm UTC](https://community.frame.work/t/help-using-via-to-program-macros-on-the-framework-laptop-16-keyboard/65537/1 "2025-03-04T15:44:34Z")

</div>

Hello all,

I am trying to use VIA to programme macros onto my keyboard, for example so that `Fn + J` writes `Jonathan`. I’ve done this with other keyboards that I own, so I’m confident that VIA can do this.

**Hardware and software**

- Framework 16
- Linux (Ubuntu 24.10)
- British (UK) ISO keyboard
- Google Chrome used to access `https://keyboard.frame.work/`

**Problem steps**

- I can view the keyboard configuration at `https://keyboard.frame.work/`
- VIA is authorised to configure the keyboard
- I believe that pressing and holding `Fn` will enable use of “layer 1” (this was confirmed by checking where VIA places the backlight toggle - layer 1 triggered by `Fn + Space`)
- Recording a macro (`M0`) to write `Jonathan` saves correctly
- Applying macro `M0` to the `J` key on layer 1 **does not** trigger in response to `Fn + J`
- Applying macro `M0` to the `J` key on layer 0 **does** trigger, so the macro itself is fine

Can anybody advise how I can trigger macros on layer 1 please? I have a bunch of phrases that I type often that I’d like to have triggered by `Fn` plus a letter / number.

Thanks in advance! 🙂

---

<div class="post-metadata">

**Author:** ![MJ1](https://sea1.discourse-cdn.com/flex001/user_avatar/community.frame.work/mj1/32/15519_2.png) [@MJ1](https://community.frame.work/u/MJ1)\
**Post date:** [March 5, 2025, 3:16am UTC](https://community.frame.work/t/help-using-via-to-program-macros-on-the-framework-laptop-16-keyboard/65537/2 "2025-03-05T03:16:52Z")

</div>

> [@joncojonathan](#):
>
> I believe that pressing and holding `Fn` will enable use of “layer 1” (this was confirmed by checking where VIA places the backlight toggle - layer 1 triggered by `Fn + Space`)

Not quite. At least not always.  
Framework really needs to write a small article on, at least, how their layers are setup regarding Fn and Fn-lock. As people really would have no idea how it works or what it’s doing without either 1) knowing QMK and checking how it’s setup in the [firmware code](https://github.com/FrameworkComputer/qmk_firmware/tree/v0.2.9/keyboards/framework/), 2) someone telling them, 3) a lot of annoying trial & error and likely frustration.

Your base layer, if you are not holding down the Fn key is entirely dependent on if you are in Fn-lock or not. Same for your Fn-key-held-down layer. And of course, there is no Fn-lock indicator. Though the F1-F12 keys are different for Fn-lock, so that’s how you can tell.

Anyway, if you’re in Fn-lock, your base layer is 2. And you Fn-key-held-down layer is 3. Whereas in Fn-lock off / normal mode they are layer 0 and layer 1 respectively.

I don’t know if I ever posted it somewhere, but it seems I at least started writing some FWL16 basic keyboard info:

* * *

~ Layers ~

If you’re new to QMK, layers can be confusing. See [docs.qmk.fm/#/feature\_layers](https://docs.qmk.fm/#/feature_layers) for details on how layers works.

The default layers are setup like so  
Layer 0 - normal: Alt functions for F-keys, other keys normal.  
Layer 1 - Fn momentary: F1-F12 for F-keys, alt functions for other keys.  
Layer 2 - Fn-lock: F1-F12 for F-keys, other keys normal.  
Layer 3 - Fn momentary when in Fn-lock: Alt functions for F-keys, alt functions for other keys.

Momentary means switching a layer only while the key is held.  
You’ll see on Layer 0 that the Fn key is set to `MO(1)`, this shows that pressing it momentarily activates layer 1.

Fn-lock is _persistent_, it’s state (either layer 0 or layer 2) is retained, and will be restored the next time the keyboard powers on. Fn-lock is located on the ESC key on layer 1 and layer 3. So pressing Fn + ESC activates or dis-activates Fn-lock, toggling between layer 0 or layer 2 being your base.

For many keys on layers 1,2,3 you’ll see a ▽ downward arrow. This is KC\_TRANSPARENT. It means the keypress is passed through to the next lower level

@anyone, Please let me know if this seems clear enough, or just needs work. And suggestions welcome of course.

* * *

Oh, and welcome to the forum. Didn’t notice the forum’s first-post message.

---

<div class="post-metadata">

**Author:** ![joncojonathan](https://avatars.discourse-cdn.com/v4/letter/j/e9c0ed/32.png) [@joncojonathan](https://community.frame.work/u/joncojonathan)\
**Post date:** [March 6, 2025, 8:45am UTC](https://community.frame.work/t/help-using-via-to-program-macros-on-the-framework-laptop-16-keyboard/65537/3 "2025-03-06T08:45:02Z")

</div>

@MJ1 _thank you_ so much. That’s solved it 🥳. It’s the same situation with my Keychron K8 Pro (“Mac mode” is layer zero, “Windows mode” is layer two) so I should have explored further. Apologies!

Interesting quirk with VIA, that I’ve not been able to replicate, but it seems to be able to change if you’re in F-Lock mode. Fortunately you mentioned Fn + ESC so I was able to switch back.

My macros are all working nicely now. Thank you so much 🙂 .

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex001/uploads/framework3/original/1X/64c81a89f963ddb07633887baceb642a4b056046.png) [@system](https://community.frame.work/u/system)\
**Post date:** [September 2, 2025, 8:45am UTC](https://community.frame.work/t/help-using-via-to-program-macros-on-the-framework-laptop-16-keyboard/65537/4 "2025-09-02T08:45:51Z")

</div>

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
