{"id":10561,"date":"2025-05-08T03:00:00","date_gmt":"2025-05-08T07:00:00","guid":{"rendered":"https:\/\/www.both.org\/?p=10561"},"modified":"2025-05-04T14:25:29","modified_gmt":"2025-05-04T18:25:29","slug":"make-typing-faster-with-the-keebio-bdn9-macro-pad","status":"publish","type":"post","link":"https:\/\/www.both.org\/?p=10561","title":{"rendered":"Make typing faster with the Keebio BDN9 macro pad"},"content":{"rendered":"<div class=\"pld-like-dislike-wrap pld-template-1\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"\" data-post-id=\"10561\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                        <i class=\"fas fa-thumbs-up\"><\/i>\r\n                <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">    <\/span>\r\n<\/div><\/div>\n<p>My brother recently gave me a <a href=\"https:\/\/keeb.io\/collections\/bdn9-collection\">Keebio BDN9 macro pad<\/a>. It\u2019s a configurable 9-key keyboard that supports all kinds of customizations, including little keycaps that have a removable cover, so you can insert small squares of paper to write out your own key labels.<\/p>\n\n\n\n<p>My brother set it up with labels like \u201ctoggle break points\u201d and \u201cstep over,\u201d which he uses on his system as macros for his debugger. This one also has a knob in the top-center position; \u201cclicking\u201d the knob sets the LED backlight color, and turning the knob adjusts the brightness.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"800\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/05\/keebio.jpg\" alt=\"Keebio BDN9 macro pad\" class=\"wp-image-10568\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"set-up-the-keebio\">Set up the Keebio<\/h2>\n\n\n\n<p>The \u201ctrick\u201d to using the Keebio BDN9 on Linux is two parts:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Add a rules file so <strong>udev<\/strong> can recognize the keyboard<\/li>\n\n\n\n<li>Use a web-based setup tool to configure and save the keys and macros<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"adding-the-rules-file\">Adding the rules file<\/h3>\n\n\n\n<p>First, I downloaded the <code>50-qmk.rules<\/code> file from the <a href=\"https:\/\/github.com\/qmk\/qmk_firmware\/tree\/master\/util\/udev\">QMK firmware project<\/a> at GitHub. This file contains <strong>udev<\/strong> rules to recognize different keyboards using the QMK firmware, including the BDN9. Download the rules file and copy it to your <code>\/etc\/udev\/rules.d<\/code> directory:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo cp 50-qmk.rules \/etc\/udev\/rules.d<\/code><\/pre>\n\n\n\n<p>Once this file is installed, <strong>udev<\/strong> will identify the keyboard when you plug it in. For example, I saw these messages appear after I connected the macro pad with the USB-C cable:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>usb 1-4: new full-speed USB device number 7 using xhci_hcd\nusb 1-4: New USB device found, idVendor=cb10, idProduct=2133, bcdDevice= 2.00\nusb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3\nusb 1-4: Product: BDN9 Rev. 2\nusb 1-4: Manufacturer: Keebio\nusb 1-4: SerialNumber: 4A0032001157464E3332342000000000\ninput: Keebio BDN9 Rev. 2 as \/devices\/pci0000:00\/0000:00:14.0\/usb1\/1-4\/1-4:1.0\/0003:CB10:2133.0009\/input\/input26\nhid-generic 0003:CB10:2133.0009: input,hidraw6: USB HID v1.11 Keyboard &#91;Keebio BDN9 Rev. 2] on usb-0000:00:14.0-4\/input0\nhid-generic 0003:CB10:2133.000A: hiddev97,hidraw7: USB HID v1.11 Device &#91;Keebio BDN9 Rev. 2] on usb-0000:00:14.0-4\/input1\ninput: Keebio BDN9 Rev. 2 Mouse as \/devices\/pci0000:00\/0000:00:14.0\/usb1\/1-4\/1-4:1.2\/0003:CB10:2133.000B\/input\/input27\ninput: Keebio BDN9 Rev. 2 System Control as \/devices\/pci0000:00\/0000:00:14.0\/usb1\/1-4\/1-4:1.2\/0003:CB10:2133.000B\/input\/input28\ninput: Keebio BDN9 Rev. 2 Consumer Control as \/devices\/pci0000:00\/0000:00:14.0\/usb1\/1-4\/1-4:1.2\/0003:CB10:2133.000B\/input\/input29\nhid-generic 0003:CB10:2133.000B: input,hidraw8: USB HID v1.11 Mouse &#91;Keebio BDN9 Rev. 2] on usb-0000:00:14.0-4\/input2\nhid-generic 0003:CB10:2133.000C: hiddev100,hidraw9: USB HID v1.11 Device &#91;Keebio BDN9 Rev. 2] on usb-0000:00:14.0-4\/input3<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"programming-the-macros\">Programming the macros<\/h3>\n\n\n\n<p>The easiest way to \u201cprogram\u201d the Keebio BDN9 is with the <a href=\"https:\/\/usevia.app\/\">Via website<\/a>. This web app relies on WebHID, so it will only work with a browser that supports WebHID, such as Google Chrome.<\/p>\n\n\n\n<p>When you access the website for the first time, Chrome will ask you to make the connection to a HID device. Select the \u201cKeebio BDN9 Rev.&nbsp;2\u201d entry and click \u201cConnect\u201d to continue:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"676\" height=\"645\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/05\/via-connect.png\" alt=\"using the Keebio KDN9 in the web app\" class=\"wp-image-10570\"\/><\/figure>\n\n\n\n<p>After that, the web app will ask to connect to your device. Click the \u201cAuthorize device\u201d button to begin:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"703\" height=\"616\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/05\/via-authorize.png\" alt=\"authorizing the device connection in Chrome\" class=\"wp-image-10569\"\/><\/figure>\n\n\n\n<p>The web app is very easy to use. In the center of the screen, you should see a representation of the key pad. In the upper left corner, you\u2019ll see the different \u201clayers\u201d supported by this device. On this Keebio, when you \u201cclick\u201d the control knob, you\u2019re actually changing the \u201clayer, and the color indicates the layer, such as blue for layer 0.<\/p>\n\n\n\n<p>The bottom of the screen shows the different ways to program each key on the key pad. You can add basic keys, like you would otherwise find on your keyboard. You can also add media controls, keyboard macros, and other features. As you click each menu item, the area to the right changes to show the keys available for that feature.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"1040\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/05\/via-webapp.png\" alt=\"using the Via web app in Chrome\" class=\"wp-image-10571\"\/><\/figure>\n\n\n\n<p>I wanted to add keyboard macros to this key pad, such as to enter a text string into a program. One way you might use this is at the shell: hit a macro key and the key pad \u201ctypes\u201d <code>cd ~<\/code> as though you\u2019d typed it on the keyboard. As a demonstration, I wanted to add macros that \u201ctyped\u201d what was on each label of my key pad.<\/p>\n\n\n\n<p>To start, click the \u201cmacro\u201d tab on the left, and select a \u201cmacro\u201d button to program. For my first test case, I set up a macro on the <strong>M1<\/strong> entry.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"380\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/05\/1keypad-macros.png\" alt=\"setting up a macro\" class=\"wp-image-10563\"\/><\/figure>\n\n\n\n<p>Then, click the \u201cRecord keystrokes\u201d icon to record keystrokes into the macro:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"984\" height=\"165\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/05\/2keypad-record-macro-m1.png\" alt=\"recording the keystrokes in a macro\" class=\"wp-image-10564\"\/><\/figure>\n\n\n\n<p>As a test, I typed the text <code>step over<\/code>, which was the same as the label on one of the keys on my key pad. When you\u2019re done typing text into the macro, click the \u201cStop recording\u201d button:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"981\" height=\"222\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/05\/3keypad-record-macro-m1.png\" alt=\"stop the macro recording in Chrome\" class=\"wp-image-10565\"\/><\/figure>\n\n\n\n<p>To save the macro to the key pad, click the \u201cSave changes\u201d icon:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"981\" height=\"220\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/05\/4keypad-record-macro-m1.png\" alt=\"save the macro changes in Chrome\" class=\"wp-image-10566\"\/><\/figure>\n\n\n\n<p>If you want to save a complete copy of your key pad configuration, including all keys on all layers, use the \u201cfloppy disk\u201d icon on the left side of the menu. This lets you save the configuration as a json file:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"make-typing-faster-with-macros\">Make typing faster with macros<\/h2>\n\n\n\n<p>I saved a different macro on each key for my key pad. For this test, each macro just \u201ctypes\u201d what is on the label. If I tap the \u201ctoggle break points\u201d key, the key pad types <code>toggle break points<\/code> for me. If I hit the \u201cstep over\u201d key, the key pad types <code>step over<\/code>, and so on for the other keys.<\/p>\n\n\n\n<p>This key pad supports up to six layers (layers 0 to 5). With eight keys on the key pad, that means I can save up to 48 different keys and macros. Imagine one set of macros (layer 0) to control a debugger, another set of keys (layer 1) to play media and adjust volume, another set of keys (layer 2) to insert text that I might type in email replies like \u201cThanks!\u201d and other short text, and so on for other layers. The Keebio BDN9 macro pad has 3.9 kB of memory, which is plenty of room to store a variety of macros and key configurations.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>My brother recently gave me a Keebio BDN9 macro pad. It&rsquo;s a configurable 9-key keyboard that supports all<\/p>\n","protected":false},"author":33,"featured_media":4464,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[84,5],"tags":[190,91],"class_list":["post-10561","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hardware","category-linux","tag-keyboard","tag-linux"],"modified_by":"Jim Hall","_links":{"self":[{"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/10561","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10561"}],"version-history":[{"count":3,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/10561\/revisions"}],"predecessor-version":[{"id":10573,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/10561\/revisions\/10573"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/media\/4464"}],"wp:attachment":[{"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10561"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10561"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}