PunktfunkPunktfunk
Streaming

Mouse, touch and pen

The shortcuts that give your mouse and keyboard back, the controller chords, mouse and touch modes, the quick-action dial and stylus input.

Get your mouse and keyboard back from a stream, then drive the host with a mouse, a touchscreen, a controller or a pen. The settings named here are in your client's Input settings; see Client settings.

Getting your input back

A stream captures your mouse and keyboard when it starts and whenever you click the video: your cursor disappears and keys go to the host.

ClientRelease inputLeave the stream
Linux, Windows, Steam DeckCtrl+Alt+Shift+QCtrl+Alt+Shift+D
macOS⌃⌥⇧Q or ⌘⎋⌃⌥⇧D
iPad with a keyboard⌃⌥⇧Q or ⌘⎋⌃⌥⇧D
AndroidCtrl+Alt+Shift+Q (pointer capture)End stream on the dial
Apple TV—Hold the remote's Back about a second, then let go
Any client, with a controllerPress L1 + R1 + Start + Select (Linux, Windows)Hold it (details)

A stream opens with a one-line hint naming the way to leave, for a few seconds. Exit hint, an advanced setting, turns it off.

Press the release shortcut again, or click the stream, to capture again. Switching to another app releases input and takes it back when you return. Keys and buttons you were holding are let go on the host, so nothing sticks. A key press or release the network drops is sent again, so a bad Wi-Fi moment doesn't leave a key held either. On Linux and Windows, controllers stop reaching the host too until you capture again.

Keyboard shortcuts

ActionLinux · WindowsmacOSiPad keyboardAndroid
Release or capture inputCtrl+Alt+Shift+Q⌃⌥⇧Q, ⌘⎋⌃⌥⇧Q, ⌘⎋Ctrl+Alt+Shift+Q
Switch the mouse modeCtrl+Alt+Shift+M⌃⌥⇧M——
DisconnectCtrl+Alt+Shift+D⌃⌥⇧D⌃⌥⇧D—
Cycle the stats overlayCtrl+Alt+Shift+S⌃⌥⇧S⌃⌥⇧S—
Mute your microphoneCtrl+Alt+Shift+V⌃⌥⇧A⌃⌥⇧A—
Open the quick-action dialCtrl+Alt+Shift+O⌃⌥⇧O⌃⌥⇧OCtrl+Alt+Shift+O
Start or stop clipboard sharing—⌃⌥⇧C⌃⌥⇧C—
FullscreenF11 or Alt+Enter⌃⌘F——

On an iPad, ⌘⎋ and every ⌃⌥⇧ shortcut work while input is captured.

To see the list without a stream: Keyboard Shortcuts in the Linux client's main menu, Shortcuts on the Windows client's host list, Settings → About → Stream controls on Android, or About → Shortcuts in the Apple apps' Settings. The macOS Stream menu lists them too. Each list covers the controller chords and touch gestures as well. With a pad alone, open the console's Settings → About → Stream controls (Linux, Windows, Steam Deck, Android and Apple).

macOS: while input is captured, every other ⌘ chord goes to the host, ⌘Q included. Turn Capture system shortcuts off to keep them local. ⌘⎋ always stays with the Mac; press it, then ⌃⌘F, to leave fullscreen. ⌘Space, ⌘Tab, Mission Control and other apps' global shortcuts go to the host too, with no permission to grant.

Android: Android keeps Alt+Tab, the Windows key and the Language key for itself. To send them, turn on Punktfunk keyboard shortcuts under Android's Accessibility settings; the app offers this at launch when a keyboard is attached, and under Settings → Input → Keyboard shortcuts. On Android 13 and newer a build from outside the Play Store first needs Allow restricted settings on the app's info page. Without the service, Alt+` stands in for Alt+Tab. Ctrl+Space reaches the host from Android 13 on.

Muting your microphone

The mute lasts for the current stream and stops only the sending, so unmuting is instant. Each switch shows Microphone muted or Microphone live over the stream for a few seconds, with the stats overlay on or off.

  • Keyboard: the shortcut in the table above.
  • Controller on Android: Select + Y, or a DualSense's own Mute button.
  • Any client with a microphone: the dial's Microphone button.

With the microphone off in client settings, there is nothing to mute and the shortcut does nothing.

Controller chords

Hold Select (Back, View) first, then press the second button.

ChordWhat it doesClients
Select + AOpens the quick-action dial. The host never sees the AAll
Select + XCycles the stats overlay. Both presses still reach the gameAll
Select + YMutes or unmutes your microphoneAndroid
Hold Select alonePresses the host's guide button (below)Where it is on
L1 + R1 + Start + SelectLeaves the stream (below)All

On an Apple TV remote, hold Play/Pause about half a second to cycle the stats overlay; a tap is a right click.

Leaving with a controller

Hold L1 + R1 + Start + Select (LB + RB + Start + Back on an Xbox pad) on any connected pad.

ClientQuick pressHold
Linux, WindowsReleases input and leaves fullscreen, unless the stream started fullscreenAbout 1.5 s disconnects
Steam DeckReleases inputAbout 1.5 s disconnects
macOS, iPhone, iPad, Apple TVNothingAbout 1.5 s disconnects
AndroidShows Hold to quit…About 1 s disconnects

On Linux and Windows the chord needs Forward controllers on. With it off, use Ctrl+Alt+Shift+D or the client's own controls.

The guide button (Xbox / PS / Steam) and Quick Access

The guide button (the Xbox logo, the PS button, the Deck's Steam button) opens menus on the host. Where your device keeps that button for itself, hold Select on its own for about a third of a second instead: the host sees its guide button held for as long as you hold, and a long hold opens a SteamOS host's Quick Access Menu. A quick tap of Select still reaches the game, a beat late.

Two advanced settings control this: Guide button and Hold Select for guide. Automatic does this:

ClientGuide buttonHold Select
Linux, Windows, macOS, AndroidSent to the hostOff
Steam Deck and other Gaming Mode sessionsStays with the DeckOn
iPhone, iPadiOS keeps it for its Game OverlayOn
Apple TVtvOS keeps itOn

If Steam or the Xbox Game Bar on your own device also watches the guide button, both react; turn that off on your device. On macOS and iOS 27 and newer, add Punktfunk to Home Button Overrides in the system's game controller settings; while the system keeps the button, Punktfunk's Controllers settings link there. The dial's Guide button and Quick access menu buttons press the host's pad for you. Quick access menu needs Steam on the host: it presses the pad's own button where the virtual pad has one, and Guide with A on every other pad. On a Deck, the Punktfunk panel's Host menus buttons do the same (Steam Deck).

Mouse modes

Mouse input picks one of two modes:

ModePointerUse it for
Capture (games)Locked to the stream. Only relative motion is sentMouse-look in games. Default on Linux, Windows and macOS
Desktop (absolute)Moves freely in and out of the stream; its position is sentRemote desktop work. Default on Android

In both modes the only cursor over the stream is the host's. With Capture system shortcuts on, Alt+Tab and the Windows/Super key go to the host while input is captured; on Linux and Windows that holds in Desktop mode too, until you click another local window.

Switch live with Ctrl+Alt+Shift+M (⌃⌥⇧M). On Android, Ctrl+Alt+Shift+Q toggles capture instead. On an iPad, Capture pointer for games locks a mouse for mouse-look; it needs the stream fullscreen and in front.

  • gamescope hosts only take relative motion, so Desktop mode stays captured there (see gamescope).
  • Hosts that send their cursor separately: the Linux and Windows clients switch to relative motion while a host app grabs or hides the pointer, and back when it lets go. The mouse-mode shortcut overrides this until the host app changes its mind.

Scrolling

Wheels, touchpads, touchscreens and controllers all scroll the host, with no setting to tune. A flick's glide is the one your device produced, on every host. On GNOME, Sway and Hyprland a touchpad scrolls host apps by the pixel, like a local one. KDE, gamescope and Windows take only wheel steps from a remote device, so apps there move a touchpad scroll in lines or ticks.

Invert scroll direction reverses every scroll you send, the controller mouse's included. To flip it for one stream, open the dial's centre sheet and choose Input → Invert scroll direction; your saved settings stay as they are.

Touch modes

On a touchscreen (Android, iPhone, iPad, Linux, Windows), Touch input picks one of four modes:

  • Trackpad (default) — your finger moves the host cursor like a laptop touchpad. Lift and swipe again to cross a large screen.
  • Direct pointer — the cursor jumps to your finger and follows it.
  • Touch passthrough — every finger is sent as a real touch, with no gestures. Only for apps that understand touch.
  • Off — touches on the stream don't reach the host. Use it with the virtual controller, so a tap beside a button can't move the cursor.

Trackpad and Direct pointer share these gestures:

GestureDoes
TapLeft click
Two-finger tapRight click
Two-finger dragScroll
Tap, then press and drag; or press and hold, then dragHeld left drag
Three-finger tapCycle the stats overlay
Three-finger swipe up / down (Android, iPhone, iPad)Show or hide the on-screen keyboard
Two-finger twistOpen the quick-action dial

In Off, only the last three work.

Touch passthrough depends on the host:

HostTouch passthrough
KDE Plasma, GNOMEFull multi-touch
Windows 10 1809 and newerFull multi-touch
Sway, Hyprland, niri and other wlroots compositorsNot supported: the client uses Trackpad and says so
gamescopeOne finger, as an absolute pointer (gamescope)

The quick-action dial

The dial is six buttons plus a centre that opens a sheet with every action and the resolution presets. Pick its six buttons under Quick actions in settings, or edit the dial itself.

ClientOpens the dial
Linux, WindowsCtrl+Alt+Shift+O, a two-finger twist on a touchscreen
macOS⌃⌥⇧O, Stream → Quick Actions
AndroidBack, a two-finger twist, Ctrl+Alt+Shift+O
iPhone, iPadA two-finger twist, the corner button, ⌃⌥⇧O on a keyboard; in Touch passthrough, two fingers pulled in from a side edge
Apple TVA short press of the remote's Back
Any client, with a controllerSelect + A

A twist commits at about 30°; lift earlier and nothing is sent. On Android, turn off Back opens quick actions to make Back do nothing mid-stream; a mouse's Back button always goes to the host.

While the dial is up, input belongs to it and the host sees nothing:

  • Controller: the left stick aims, the D-pad steps, A fires, Y returns to the centre, B closes.
  • Keyboard: Tab steps through the buttons, the arrows aim, Enter fires, Esc closes.
  • Mouse: the desktop clients hand the pointer back so you can click a button.

What the dial can hold:

GroupActions
SessionEnd stream, End game (a game this device launched, then the stream), Disconnect, keep the game running
InputTouch mode, Keyboard, Virtual controller, Send text, Guide button, Quick access menu, Controller mouse, Controller type
View · AudioStatistics, Screens (dual-screen handhelds: the panel below, the picture below, or the picture across both), Microphone, Mute this stream (this device only)
HostSleep host, Restart host, Shut down host (Host power)
ShortcutsKey combinations you add, such as Alt+F4

A button a client can't serve is dimmed and says why. Send text works on Android against a host that takes typed text. Controller type works on the desktop clients: each press re-plugs your controllers as the next type (Automatic, Xbox 360, Xbox One, DualSense, DualShock 4, Steam Deck) for this stream. The next stream starts from your settings.

Controller mouse

For a launcher, dialog or desktop that ignores controllers, fire Controller mouse on the dial. Each press moves the controller that opened the dial to the next mode, and each stream starts with Off:

  • Off: the controller plays.
  • Touchpad: the controller still plays, and its touchpads move the host's pointer.
  • Full: the whole controller drives the pointer, and the game sees an idle pad.

The touchpads work the same in both modes. A tap never clicks, so a thumb resting on the pad mid-game fires nothing.

TouchpadTouchpad and Full
DualSense, DualShock 4Pointer — slide a finger, as on a laptop trackpad. Click for left click, click with two fingers for right click
Steam Deck, Steam Controller: right padPointer; click for left click
Steam Deck, Steam Controller: left padScroll; click for right click

A controller without a touchpad plays on unchanged in Touchpad. In Full, the rest of the controller works like this:

ControllerFull
Left stickPointer — push further to move faster
Right stickScroll
A, right triggerLeft click; hold to drag
X, left triggerRight click
YMiddle click
BEscape
D-padArrow keys
StartEnter
LB, RBCtrl, Alt (held)
Left stick click, right stick clickShift (held), Space
GuideSuper / Windows key

Select stays with the dial, so Select + A still opens it. The button is dimmed with no controller connected, or when the host only lets this device send controller input.

Virtual controller

On Android, iPhone and iPad, the dial's Virtual controller button draws a controller over the stream. The host sees it as one more pad. Fingers on its controls drive the game; fingers elsewhere still drive the touch mode. Set Touch mode to Off to keep them from reaching the host. Under Quick actions in settings, pick a Layout (Full, Sticks and shoulders, D-pad and face buttons), set Opacity and Scale, or use Edit layout to move, resize and hide controls, separately for wide and upright screens.

Dual-screen handhelds

On an Android handheld with a second screen of 7 inches or less, or a foldable half open, the stream takes one screen and a panel takes the other: statistics, the dial's actions, a keyboard that types on the host while the handheld's own buttons stay on the game, a trackpad and the virtual controller. Screens, on the dial or the panel, cycles three layouts: the panel below the picture, the picture below the panel, or one picture across both screens — its top half above, its bottom half below, the lower screen's touch landing on its half. That last one is how a DS or 3DS emulator's two screens land on two screens: set the emulator to a vertical layout with no gap, and the split lands on the hinge. A DS, 3DS or Wii U title launched from the library starts that way. The handheld remembers the layout per second screen, and an Automatic resolution follows it — the picture screen's mode, or two of them stacked when the picture spans both — at once where the host can change mode mid-stream, else from the next connect.

Foldable iPhone

Set a foldable iPhone down half open, like a laptop, and the stream splits at the hinge: the picture takes the upright half and the flat half becomes a trackpad, or the virtual controller while it is shown. Open the phone flat and the picture takes the whole screen again. Held half open like a book, nothing changes.

A Native display resolution follows the picture: the cover screen's mode when the phone is shut, the inner screen's when it is open, and the upright half's while it is half open. A size you picked stays as picked. With Match window on, the stream also follows a rotation and the space the phone gives the app beside another one. The host changes mode mid-stream where it can.

Pen and stylus

A stylus sends position, pressure, tilt, barrel roll, hover, the eraser and two barrel buttons, so drawing apps on the host see a real pen.

ClientPen input
iPhone, iPadApple Pencil with hover. Double-tap is barrel button 2; squeeze is barrel button 1 and barrel roll works on iOS 17.5+
AndroidActive stylus: pressure, tilt, hover, eraser, both buttons. No barrel roll
MoonlightClients that send pen events
Linux, Windows, macOS, Apple TVNone
HostAppears as
LinuxA Punktfunk Pen tablet for the session, mapped by your compositor. Needs /dev/uinput, the input group step of your install guide
Windows 10 1809 and newerA system pen with pressure, tilt, rotation, barrel button and eraser

Without host support, the stylus works as a finger, without pressure or tilt. To turn pen off for every client, switch off Pen input in the web console under Host → Input, or set PUNKTFUNK_PEN=0 in host.env. It applies from the next session.

On this page