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.
| Client | Release input | Leave the stream |
|---|---|---|
| Linux, Windows, Steam Deck | Ctrl+Alt+Shift+Q | Ctrl+Alt+Shift+D |
| macOS | ⌃⌥⇧Q or ⌘⎋ | ⌃⌥⇧D |
| iPad with a keyboard | ⌃⌥⇧Q or ⌘⎋ | ⌃⌥⇧D |
| Android | Ctrl+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 controller | Press 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
| Action | Linux · Windows | macOS | iPad keyboard | Android |
|---|---|---|---|---|
| Release or capture input | Ctrl+Alt+Shift+Q | ⌃⌥⇧Q, ⌘⎋ | ⌃⌥⇧Q, ⌘⎋ | Ctrl+Alt+Shift+Q |
| Switch the mouse mode | Ctrl+Alt+Shift+M | ⌃⌥⇧M | — | — |
| Disconnect | Ctrl+Alt+Shift+D | ⌃⌥⇧D | ⌃⌥⇧D | — |
| Cycle the stats overlay | Ctrl+Alt+Shift+S | ⌃⌥⇧S | ⌃⌥⇧S | — |
| Mute your microphone | Ctrl+Alt+Shift+V | ⌃⌥⇧A | ⌃⌥⇧A | — |
| Open the quick-action dial | Ctrl+Alt+Shift+O | ⌃⌥⇧O | ⌃⌥⇧O | Ctrl+Alt+Shift+O |
| Start or stop clipboard sharing | — | ⌃⌥⇧C | ⌃⌥⇧C | — |
| Fullscreen | F11 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.
| Chord | What it does | Clients |
|---|---|---|
| Select + A | Opens the quick-action dial. The host never sees the A | All |
| Select + X | Cycles the stats overlay. Both presses still reach the game | All |
| Select + Y | Mutes or unmutes your microphone | Android |
| Hold Select alone | Presses the host's guide button (below) | Where it is on |
| L1 + R1 + Start + Select | Leaves 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.
| Client | Quick press | Hold |
|---|---|---|
| Linux, Windows | Releases input and leaves fullscreen, unless the stream started fullscreen | About 1.5 s disconnects |
| Steam Deck | Releases input | About 1.5 s disconnects |
| macOS, iPhone, iPad, Apple TV | Nothing | About 1.5 s disconnects |
| Android | Shows 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:
| Client | Guide button | Hold Select |
|---|---|---|
| Linux, Windows, macOS, Android | Sent to the host | Off |
| Steam Deck and other Gaming Mode sessions | Stays with the Deck | On |
| iPhone, iPad | iOS keeps it for its Game Overlay | On |
| Apple TV | tvOS keeps it | On |
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:
| Mode | Pointer | Use it for |
|---|---|---|
| Capture (games) | Locked to the stream. Only relative motion is sent | Mouse-look in games. Default on Linux, Windows and macOS |
| Desktop (absolute) | Moves freely in and out of the stream; its position is sent | Remote 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:
| Gesture | Does |
|---|---|
| Tap | Left click |
| Two-finger tap | Right click |
| Two-finger drag | Scroll |
| Tap, then press and drag; or press and hold, then drag | Held left drag |
| Three-finger tap | Cycle the stats overlay |
| Three-finger swipe up / down (Android, iPhone, iPad) | Show or hide the on-screen keyboard |
| Two-finger twist | Open the quick-action dial |
In Off, only the last three work.
Touch passthrough depends on the host:
| Host | Touch passthrough |
|---|---|
| KDE Plasma, GNOME | Full multi-touch |
| Windows 10 1809 and newer | Full multi-touch |
| Sway, Hyprland, niri and other wlroots compositors | Not supported: the client uses Trackpad and says so |
| gamescope | One 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.
| Client | Opens the dial |
|---|---|
| Linux, Windows | Ctrl+Alt+Shift+O, a two-finger twist on a touchscreen |
| macOS | ⌃⌥⇧O, Stream → Quick Actions |
| Android | Back, a two-finger twist, Ctrl+Alt+Shift+O |
| iPhone, iPad | A two-finger twist, the corner button, ⌃⌥⇧O on a keyboard; in Touch passthrough, two fingers pulled in from a side edge |
| Apple TV | A short press of the remote's Back |
| Any client, with a controller | Select + 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:
| Group | Actions |
|---|---|
| Session | End stream, End game (a game this device launched, then the stream), Disconnect, keep the game running |
| Input | Touch mode, Keyboard, Virtual controller, Send text, Guide button, Quick access menu, Controller mouse, Controller type |
| View · Audio | Statistics, Screens (dual-screen handhelds: the panel below, the picture below, or the picture across both), Microphone, Mute this stream (this device only) |
| Host | Sleep host, Restart host, Shut down host (Host power) |
| Shortcuts | Key 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.
| Touchpad | Touchpad and Full |
|---|---|
| DualSense, DualShock 4 | Pointer — slide a finger, as on a laptop trackpad. Click for left click, click with two fingers for right click |
| Steam Deck, Steam Controller: right pad | Pointer; click for left click |
| Steam Deck, Steam Controller: left pad | Scroll; click for right click |
A controller without a touchpad plays on unchanged in Touchpad. In Full, the rest of the controller works like this:
| Controller | Full |
|---|---|
| Left stick | Pointer — push further to move faster |
| Right stick | Scroll |
| A, right trigger | Left click; hold to drag |
| X, left trigger | Right click |
| Y | Middle click |
| B | Escape |
| D-pad | Arrow keys |
| Start | Enter |
| LB, RB | Ctrl, Alt (held) |
| Left stick click, right stick click | Shift (held), Space |
| Guide | Super / 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.
| Client | Pen input |
|---|---|
| iPhone, iPad | Apple Pencil with hover. Double-tap is barrel button 2; squeeze is barrel button 1 and barrel roll works on iOS 17.5+ |
| Android | Active stylus: pressure, tilt, hover, eraser, both buttons. No barrel roll |
| Moonlight | Clients that send pen events |
| Linux, Windows, macOS, Apple TV | None |
| Host | Appears as |
|---|---|
| Linux | A 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 newer | A 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.
Presets and links
How settings presets override your client defaults per host or per connect, and how punktfunk:// links start a stream from a shortcut, a script or a browser.
Controller speaker and haptics
Feel a game's DualSense voice-coil haptics and hear the pad's speaker on the controller in your hands — what to turn on, and how to check it.