KM 9 and Stream Deck Triggers

So the new KM plugin for the Stream Deck can be triggered by the button ID which includes the button's virtual row and virtual column. However, if I have multiple folders containing different buttons but in the same virtual location, KM won't differentiate between the two (or more).
So it seems that KM's integration with the stream deck is based on the physical key position rather than making a unique identifier to each button.
Which to me seems kinda of missing the point of the Stream Deck.

Do you think this is something that can be fixed in a later update?

1 Like

You can set the virtual key row and column to any number in the range 1-999.

So each button in each folder can have a different virtual position.


My Bad!!
Problem solved!

1 Like

Each button has a virtual row and column. But the same virtual buttons can be used within more Profiles.
It would be nice if we can also set a virtual profile. Let me explain.

I have two 15button devices.
the first unit has 3 rows and 5 columns.
KM cannot see the difference between unit one and two, so on the second unit i do as if it is a new column. So, the top left button on my second SD unit is virtual row 1 and virtual column 6.

Now, each unit can have folders. I make virtual rows as if the rows are below. So, if i press the lower left button on my first unit, it will be virtual row 6 and virtual column 1.

Like this:

So far so good.
But now; if i switch to another profile, i have to even add more virtual numbers to differentiate between the keys. Yes, i could add 100 to a row or column number but things are getting complicated this way.
Now we have RxCx as key identifier, can we have a profile too? Like RxCxPx? (Row,Column,Profile)


I may try to do something different at some point, but currently, no, you have a row & column, there isn;t scope for another id.

Ok. Thank you for the reply.
Have to find a numbering method that i can understand myself. :slight_smile:

Hi, Sometimes It does NOT SAVE the new numbers properly, and even if the "Button-ID" is changed, the fields ROW & COLUMN remain as they were.
Am I doing something wrong when saving the virtual keys row and column ?

Other than possibly tabbing out of the field, you should not need to do anything to save the change.

But it is a hard place to debug, given it is inside a plugin, running three different chunks of code. If you can get any kind of repeatable issues, then please report it.

I tried this on two different Macs and its the same: ROW & COLUMN numbers, cannot be saved unless you do not change the numbers that the deck offers you by default... :cry:

Is there an alternative way to the "Triggered by... This device key" ACTION in KM ? :interrobang:

I've found alternatives to the SW provided by "Elgato" with Python:

It took me a while to distinguish between Button ID and Column/Row. But now i understand.

  • Column & Row are used to send a trigger ID to KM. It will appear in "The USB Device Trigger".
  • Button ID is used to give a name to the button so KM can send a icon and/or text to it.

By default; the Button ID is the RxCx; row column. So, changing (virtual) row and column changes the default name.
That is logical, but was in the beginning also confusing for me to understand what is what.


Yes, you are right. The BUG comes after. Once you set both the ROW & COLUMN numbers, and ESCAPE out of each cell, the Stream Deck does not always SAVE those changes.


hmm. It does work as expected here.
High Sierra.
SD 4.3.2

My configuration is a little bit different ( Mojave 10.14.6 )

Yes. With infinite time, and no consequences for complexity (for other non-Stream Deck users), I would implement a Stream Deck specific trigger and use the Button ID for that and it would be better. I may still eventually do that.

Yes, it is not always saving the row and column. I will look in to it, probably for 9.0.2.


I have resolved this for 9.0.2. If the button has a Button ID, then it is not saving the row/column.

The interim workaround is:

  • Cut the Button ID to the clipboard
  • Change the virtual row/column
  • Verify the change stick
  • Paste the Button ID back

I am thinking that I will do away with the virtual row/column and just use the Button ID in the trigger. This will likely break the existing triggers, but I think the change and simplification will be worth it. But I have a few other fish to fry first.

1 Like

I am thinking that I will do away with the virtual row/column and just use the Button ID in the trigger. This will likely break the existing triggers, but I think the change and simplification will be worth it. But I have a few other fish to fry first.

Breaking the existing triggers is ok for this short time that KM9 is around.

I fool around a lot with these StreamDeck using Profiles, multiple pages and multiple units. Things are getting complicated here! :slight_smile:
If you like some feedback from me on your idea how to implement these button ID's i am willing to help.

1 Like

Feel free to make any suggestions, either on the forum or to

Note that there are many conflicting constraints, not the least being development time, but also number of people it benefits, how much it benefits them, how well it fits with out Keyboard Maestro features, etc, that go in to my choice of what to work on at any given point.


Look at the way Corcules with his KMLink does this:

Corcules/ KMlink

Make a macro browser within the SD plugin.
The good thing about this is, that if the user reorganise the buttons on our streamdeck, it does not mess up the virtual RowColumns.

The only thing you have to add is an button identifier so KM could send your icon and title to the right button. I would be OK with the way you do this now; Button ID. Make sure to tell the user it is used for this image and title specifically.

I have no numbers of the people that use Streamdeck, but in my circle of friends the adaption is strongly increasing!

1 Like

I couldn't agree more this is such a nice way to do things and makes the implementation with Keyboard Maestro so much nicer. It certainly has taken a bit of time for me to get my head wrapped around the way Keyboard Maestro integrates with the Stream Deck reading the forum posts and wiki again and again and experimenting. KM Link is very intuitive, not amped to specific buttons and easily works with profiles and no need for getting into button ID's.

The main thin for me is it would be much nicer if KM Link sorted a bit better and used Column view like in the Finder (command+3). With over 3,000 macros it is a bit unwieldy but I love his implementation it is very intuitive and works well with the StreamDeck software.

By default, I would just make it get the icon of the Macro and if you want to do something else then use the Button ID action to change it to one of the other options given. Meaning that rather than assign a button ID have another Stream Deck action that automatically pulls in "This Macro's Icon" (or the other choices, Macro Icon, Clipboard, Icon and Default) when run regardless of button ID. The benefit being that you can assign a macro in Stream Deck and if Keyboard Maestro has the fifth new action of Stream Deck Image of Button for recalled macro then it updates.

As it is now I have to make a button ID in Stream Deck and in Keyboard Maestro, and also make a USB trigger in each macro and if I want to rearrange things in Stream Deck software then I have to go back to Keyboard Maestro and pick a different USB Trigger.

1 Like

I just received my new Stream Deck 15 keys. I am using the latest version of KM 9 and also just downloaded the Stream Deck app and the Keyboard Maestro plugin.

I found that I already had a couple of keys set up from before, when I was using the iPhone Stream Deck app. So, for instance, I could press R1C1 in the Stream Deck and it will launch Forklift (my macro). No problem.

The current issue I am facing is when I set up a new macro and use "This Device USB key", and pressing any Stream Deck button does not register in KM. It's as though KM is not capturing the key press.

But if I press an existing key, such as R1C1 which was assigned to launch Forklift, then KM will be able to capture. (Similarly, if I pressed R1C2 and R1C3, which were previously setup, KM will capture it). It just does not capture new, unassigned Stream Deck keys. Any ideas? A bug?