Skip to content
Download

ReferencePage 12 of 14

Input

Keyboard, mouse, gamepad, clipboard, microphone, shortcuts, and native input behavior in OpenNOW

GitHubOpen in GitHub9 sections
On this page9 sections

OpenNOW captures gameplay input in the Qt desktop app and sends it through the in-process native streamer. Local shortcuts are handled first; a key that matches a local shortcut never reaches the game. Desktop and console shells share the same input preferences.

Default shortcuts#

These stream shortcuts can be changed in Settings → Controls → Shortcuts. Clearing a shortcut sends its key to the game instead. Letter and number keys need at least one modifier. Ctrl+G and Shift+F3 are reserved, and one chord cannot be assigned to two commands.

ShortcutActionSetting
Ctrl+NCycle the statistics overlay: compact bar, extended panel, offshortcutToggleStats
F8Grab or release the mouse (pointer lock)shortcutTogglePointerLock
F11Toggle fullscreenshortcutToggleFullscreen
Ctrl+F11Screenshot the streamshortcutScreenshot
F12Start or stop recordingshortcutToggleRecording
Ctrl+F12Save a replay clipshortcutSaveClip
Ctrl+Shift+QEnd the session (asks for confirmation)shortcutStopStream
Ctrl+Shift+KToggle Anti-AFKshortcutToggleAntiAfk
Ctrl+Shift+MMute or unmute the microphone (only with Open microphone)shortcutToggleMicrophone

On macOS the UI may display modifier labels differently while the stored binding uses the same setting string.

These shortcuts are fixed:

ShortcutWhereAction
Ctrl+GStreamOpen the session menu. The controller Guide button does the same, and so does pressing View and Menu together within 80 ms; a lone View or Menu press still reaches the game
Shift+F3Stream, statistics overlay visibleCopy the statistics to the clipboard
EscStreamSent to the game. In the session menu, returns to the game
Ctrl+KDesktop shellCommand palette (local commands and remote game search)
Ctrl+BDesktop shellCollapse or expand the sidebar
Ctrl+,Desktop shellOpen Settings
/Desktop shellSearch the current page
F10Outside a streamSwitch between desktop and console mode
F11Outside a streamToggle fullscreen
Arrows, Enter, Space, F, Shift+F10Library and storeMove, play or resume, game details, toggle favorite, context menu

allowEscapeToExitFullscreen is stored in settings.json, but v1.0.3 does not read it. Escape always goes to the game during a stream.

Ctrl+Shift+A opens the account switcher from anywhere in the desktop shell. Ctrl+1 through Ctrl+9 switch to the matching saved account. See Authentication.

Session menu (Ctrl+G)#

Ctrl+G opens the session menu over the running stream. The video and the session keep running while it is open. The menu is a drawer docked on the left edge with:

  • the game title, session time, output resolution, and bitrate;
  • Back to game (Esc), Invite a friend, Switch to console mode, Go fullscreen or Exit fullscreen (F11), and End session (Ctrl+Shift+Q);
  • a connection card with transport, codec, and decoder;
  • a hint for the statistics overlay shortcut and a microphone toggle when the microphone is available.

In console mode the same shortcut opens the console Guide.

Its quick toggles (statistics overlay, fullscreen, microphone, Anti-AFK) keep the menu open. Quality, bitrate, and codec changes apply from the next session.

The Controllers page in the drawer shows each connected pad. For each pad you can set left and right stick dead zones and vibration strength, test the sticks and rumble, apply the values to all pads, or reset the pad to the defaults from Settings → Controls. Values are saved per pad in controllerProfiles and apply immediately. You can also make one pad the only Player 1 until the app restarts.

In the app · Ctrl+G menu › Controllers
OpenNOW Ctrl+G Controllers page: forwarded flight devices with Active and Declined badges, a No controller connected card, and the default left and right stick dead zone and vibration sliders shared with Settings › Controllers.

Anti-AFK#

Ctrl+Shift+K turns Anti-AFK on or off for the current stream. While it is on, OpenNOW sends a short F13 key press every 4 minutes so GeForce NOW does not end the session for inactivity. Anti-AFK starts off each time you launch a game. In console mode, a badge shows while Anti-AFK is on (showAntiAfkIndicator).

The desktop stream also shows the ANTI-AFK ON badge, the session menu has an Anti-AFK toggle, and Settings → Stream has the indicator and reminder settings.

Keyboard#

Choose Settings → Controls → Keyboard layout (desktop and console share one list). Pick the layout that matches your physical keyboard. OpenNOW sends it to GeForce NOW when a session starts. The setting key is keyboardLayout (default "en-US").

The layout is fixed for the session when it starts. Changing it during a stream does not remap the active session. Restart or resume the session after changing it.

Platform behavior

PlatformBehavior
Linux (X11 / Wayland)Gameplay keys map from physical key positions (XKB keycodes) to the selected regional Windows layout, including AltGr and OEM punctuation (for example German and Swedish). AltGr is sent as right Alt and does not trigger local shortcuts. Unknown layouts and synthetic key events without a scan code fall back to the logical key.
WindowsUses the platform's virtual keys and physical-key mapping. In dev, the right Shift, Control, and Alt keys are sent as right-side keys, and Control with right Alt counts as AltGr and does not trigger local shortcuts.
macOSUses the platform's physical-key mapping, including native keycode zero.

Dead keys are sent as key events, and the remote Windows layout composes the character. Chinese layouts (zh-CN, zh-TW) provide physical keys for the remote IME; they do not transmit locally composed IME text. Dvorak, Turkish F, French BÉPO, and similar variants are not available as separate choices.

Supported layouts

LabelValueAlso accepted
English (US)en-US
English (UK)en-GB
Turkish Qtr-TR
Germande-DE
Frenchfr-FR
Spanish (traditional)es-ES_tradnles-ES
Spanish (Latin America)es-MX
Italianit-IT
Portuguese (Portugal)pt-PT
Portuguese (Brazil)pt-BR
Polishpl-PL
Danishda-DK
Norwegiannb-NO
Swedishsv-SE
Finnishfi-FI
Russianru-RU
Ukrainianuk-UA
Japanese 106ja-106ja-JP, Japanese106
Koreanko-KR
Chinese (Simplified)zh-CN
Chinese (Traditional)zh-TW

The core rejects any other value. A saved alias keeps working and is sent as the canonical value.

Pointer lock and mouse#

  • By default the stream view follows the game's cursor. When the game hides its cursor, OpenNOW switches to relative mouse mode and locks the pointer. When the game shows a cursor, OpenNOW uses absolute mode. On macOS in dev, capture follows Settings → Controls → Pointer lock instead, so the game's cursor messages no longer decide it.
  • F8 (shortcutTogglePointerLock) overrides the automatic choice and grabs or releases the mouse. On macOS in dev it flips the saved Pointer lock setting, the Ctrl+G menu shows the same ON or OFF state, and turning it off shows a Pointer lock is off notice with an Enable pointer lock button.
  • Focus loss and overlays such as the session menu release the pointer and all held input.
  • On Wayland, relative mode uses the pointer-constraints and relative-pointer protocols. On macOS it uses CoreGraphics pointer capture. On Windows the cursor is confined to the stream view while captured.
  • Settings → Controls → Mouse sensitivity (mouseSensitivity, default 1, range 0.1–3.0) is passed only to the external renderer process in v1.0.3. The embedded stream view does not apply it.

Gamepad#

OpenNOW uses SDL3 for controller discovery and input. Controller input pauses while the OpenNOW window is not active. Up to four controllers are sent to the session, one per player slot. Sony controllers are forwarded through native HID sessions.

Dead zones are radial. Stick movement inside the dead zone is ignored, and the remaining travel is rescaled to the full range. Both sticks default to 5% (range 0–50). Set 0% to leave dead zones to the game. Vibration from the game is scaled by Controller vibration (0–100%, default 100%); 0% turns it off.

Settings → Controls → Controller input source chooses All controllers (multiplayer) or one device as Player 1, for a controller that appears twice. The choice lasts until OpenNOW restarts. If that device disconnects, the setting shows Selected controller disconnected; select it again after reconnecting.

Outside gameplay, controllers drive the OpenNOW interface when Controller input (controllerMode) is on. Ownership moves between the interface and the stream with neutral states, so no button stays pressed in the game.

Settings → Controls → Gyroscope (enableGyroscopeControls) is stored, but v1.0.3 does not send motion data.

SettingDescription
controllerModeLets controllers drive the OpenNOW interface outside gameplay
launchInConsoleModeStart in console mode
switchToConsoleOnPadEnter console mode when a gamepad is the only input
leaveConsoleOnPointerLeave console mode on keyboard or mouse input
consoleProfilePickerOnLaunchv1.0.2 only. Stored but not read; it is no longer a setting in v1.0.3. See Configuration
autoFullScreenEnter fullscreen when the session is ready
controllerLeftStickDeadzone / controllerRightStickDeadzoneStick dead zones in percent
controllerProfilesPer-controller dead zones and vibration
controllerVibrationIntensityRumble intensity
In the app · Console mode › Settings › Input & controllers
OpenNOW console mode, Settings › Input & controllers: player slots P1 DualSense Wireless Controller and P2 Xbox Wireless Controller with battery levels, P3 and P4 waiting for a button press, then Button glyphs detected from the active controller, Gyroscope, the left and right stick dead zone sliders, Vibration and Mouse sensitivity, each applying live.

Flight controls and wheels

Supported flight sticks, throttles, rudder pedals, and wheels reach the game as the real HID device, not as an Xbox controller. Games read every axis, button, and hat switch. The supported list has 18 USB vendor and product IDs from Thrustmaster, Logitech, Saitek, and Mad Catz, including the HOTAS Warthog, T.Flight, TWCS, X52, X56, and Logitech G29/G920/G923/G PRO/RS50 families. A device on the list can still be declined by the server; a declined device stays idle and is not turned into a controller.

Settings → Controls → Forward flight sticks and wheels as native devices (forwardFlightControls, default on) controls this. When it is off, a device that SDL recognizes as a gamepad is sent as an Xbox controller with fewer axes and buttons, and other devices are ignored. Settings and the Ctrl+G Controllers page list each device as ready, active in the session, or declined by the server. In dev, while forwarding is on, the statistics overlay (Ctrl+N) also lists each device that is not active, with its status. On Linux, a device whose hidraw node OpenNOW cannot open for reading and writing shows NO PERMISSION instead: it is not sent to the game, and OpenNOW picks it up once a udev rule grants access to that node. On Linux in dev, a supported device with no hidraw node at all shows NO HID PATH instead: it is not forwarded, so check its kernel driver, or turn forwarding off to use it as a controller.

Input to these devices stops when OpenNOW loses focus, when a local overlay opens, and when the session ends, and buttons are released first. Set dead zones and curves in the game. A T.Flight HOTAS 4 must enter HID mode before each session: unplug it, hold SHARE + OPTIONS, and reconnect USB.

Clipboard paste#

Settings → Controls → Clipboard paste enables local-to-stream plain-text paste while streaming. The native path submits text through the streamer FFI rather than converting every paste into keystrokes when the typed clipboard path is available.

Press Ctrl+V (Command+V on macOS) in the stream to paste. The text must be valid UTF-8, up to 64 KiB, with no NUL characters. Held modifier keys are released in the game before the text is sent. An empty or too-large clipboard shows a paste failure. There is no automatic clipboard sync.

Microphone#

Set the mode in Settings → Audio → Microphone (microphoneMode).

ModeLabelBehavior
disabledDisabledNo microphone capture (default)
voice-activityOpen microphoneSends audio from the system default microphone continuously during supported sessions

The mode applies to the next session. With Open microphone, Ctrl+Shift+M mutes and unmutes during the stream, and the session menu has the same toggle. The option is disabled when the native runtime reports no microphone support. Grant the operating system's microphone permission to OpenNOW.

Data channels#

The native NVST bundle opens these SCTP data channels:

ChannelReliabilityTraffic
control_channel_reliableordered, reliable (SCTP stream 0)Input handshake, keyboard and mouse-button input, Unicode text, control commands, server cursor updates
custom_message_on_sctp_private_reliableordered, reliable (stream 2)Opened with the bundle; OpenNOW sends nothing on it
custom_message_on_sctp_private_partially_reliableordered, at most 2 retransmits (stream 4)Opened with the bundle; OpenNOW sends nothing on it
control_channel_partially_reliableunordered, 300 ms lifetime (stream 6)Mouse motion and partially reliable control, including Mjolnir NACK-v2 requests
control_channel_unreliableunordered, no retransmits (stream 8)Opened with the bundle; OpenNOW sends nothing on it
input_channel_partially_reliableunordered, 300 ms lifetime (stream 10)Gamepad state
cursor_channelordered, reliable (stream 12, when negotiated)Cursor notifications, when a host sends them here instead of on the reliable control channel
rtcp_on_sctp_privateordered, reliable (stream 14, when negotiated)RTCP feedback when video runs on the bundle instead of the Mjolnir socket

See Native Streamer for the production input path and Protocol notes for the Electron-era channel notes and the WebRTC compatibility mode.