{
  "id": 10394129,
  "title": "A Button That Sends Command+Shift+3",
  "url": "https://urgent.news/2026/09/28/a-button-that-sends-command-shift-3",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-28T07:09:00.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/devasservice/a-button-that-sends-commandshift3-2k5h"
  },
  "original_language": "en",
  "account": "My iPad typically resides on a stand during the day, accommodating various tasks such as videos, presentations, and documents. However, capturing a screenshot presents a challenge when the iPad is detached from the stand, as it disrupts the layout, alters the camera angle, and often results in losing the desired frame. Apple offers a hardware shortcut for this purpose: the Power plus Volume buttons. Nevertheless, this method necessitates lifting the iPad, locating the buttons by touch, and hoping the screen remains unchanged. An alternative is utilizing a Bluetooth keyboard, where Command+Shift+3 saves the entire screen, albeit requiring significant desk space for such a specialized function. In response, I crafted a compact remote using an ESP32-C3 module to serve as a single button for capturing screenshots. The remote assumes the form of a keyboard named \"Screenshot Remote\" and establishes a connection with the iPad, executing the Command+Shift+3 command upon pressing a designated touch button. This process functions seamlessly, as the iPad perceives it as any other keyboard, executing a single chord for the screenshot capture. The firmware responsible for this functionality is housed within the BT-Keyboard-Screenshot directory, specifically in the bt_screenshot.py script. MicroPythonBLEHID library supplies the necessary Bluetooth and HID components, with hid_services.py and hid_keystores.py files copied onto the board alongside the script. Prior to connecting the board to the iPad, it is essential to verify the existing hardware keyboard functionality. Command+Shift+3 is responsible for capturing the whole screen, whereas Command+Shift+4 enables the selection of a specific region. Consequently, the primary objective is to replicate the functionality of Command+Shift+3 using the remote. The firmware ensures that upon pressing the button and releasing all three keys (Command, Shift, 3), the iPad autonomously captures the screenshot without the need for additional automation or accessibility settings. The firmware enables the Bluetooth keyboard to transmit the required modifier keys (Command and Shift) followed by the screenshot key (3). Once the connection is established, the script proceeds to send the screenshot command. The entire setup is housed within an electronics project box, encompassing the ESP32-C3 development kit, a separate touch-button development kit, a 18650 battery, and a touch button. The project box houses the components, ensuring a compact and integrated design. The touch button is wired to GPIO 5, enabling it to trigger the screenshot capture when pressed. The built-in LED on GPIO 8 serves as an indicator of the button's state, illuminating when the button is held down. To ensure a reliable connection, the device is named \"Screenshot Remote,\" and the Bluetooth library incorporates an NVSKeyStore to maintain the bond even after a power cycle. Upon successful pairing, the remote functions as a traditional keyboard until the connection is terminated. The firmware includes debounce logic to prevent multiple trigger activations due to button bounce, ensuring a single screenshot capture per button press.",
  "summary": "My iPad lives on a stand most of the day. Videos, presentations, docs, whatever the work needs. That is fine until I want a capture of whatever is on the screen. Taking the tablet off the stand for a few seconds sounds trivial, but it breaks the layout, moves the camera angle if I am recording, and usually means I lose the exact frame I meant to keep. Apple already has a hardware shortcut for…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}