Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions docs/release-notes/0.6.24.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
**This release adds dashboard control of the host Apollo's USB forwarding, keeps USB forwarding off for seats, and fixes a 30-second delay when the service stops with a dashboard open.**

## What changes

- **A USB forwarding panel on the host card** (#135). It shows whether the console Apollo's USB tunnel is on, what is forwarded now, and which clients are paired. You can turn the tunnel on or off and block or allow a client's USB forwarding.
- It talks to the console Apollo through a local control pipe. That needs ApolloVibe `2026.6.1-ms7` or newer, with "USB Forwarding Control Pipe" ticked in Apollo's Network tab. Without that, nothing changes.
- MultiSeat never edits Apollo's config. A switch made in the panel lasts until that Apollo restarts, and the panel says so.
- **Only the person at the console can use it.** The API has no key on a host that chose that, and every seat user can reach it on loopback, so the whole `/api/host/usb` group, reading included, is refused to anyone else. A dashboard on another PC, or inside a seat, sees a USB card that says it cannot control USB forwarding.
- **Seats never forward USB** (#133). Each seat's generated Apollo config now writes `usb_forwarding_enabled = disabled`, and the seat firewall rules never open the USB tunnel port (main port + 7). The `usbip-win2` driver attaches a device to the whole machine, so a device forwarded into one seat would show up for every account on the host.
- **An opt-in driver install step** (#133): `install-prerequisites.ps1 -WithUsbForwarding`. It installs `usbip-win2` v0.9.8.1 after checking the file's SHA-256 and the installer's signature and signer name. It then checks that the installed drivers chain to Microsoft. It is never part of a default or unattended run and it never reboots; a reboot is needed before the driver works, and the script leaves that to you. `-UsbForwardingDryRun` prints every step and changes nothing.
- **The service stops promptly while a dashboard is open** (#131). On 2026-10-21 a stop took about 31 seconds because an open dashboard socket held up shutdown. The socket now closes when the host stops. In the new test, a stop that took 30.0 seconds before the fix takes about 0.1 seconds.
- Docs: audio for the `PerSession` default, with VoiceMeeter only for `SharedHost` (#130). A new test kills a stray Apollo using real processes (#132).

## Who this affects

- **Everyone:** the faster service stop.
- **Nobody else, unless they opt in:** the USB panel needs Apollo's control pipe turned on, and the driver step needs its own switch. Seats are forced to USB off whatever the host does.
- USB forwarding itself needs ApolloVibe `2026.6.1-ms7` and MoonlightVibe 6.3.11 or newer. It is experimental. Those releases carry the setup steps.

## How this was checked

- **Unit tests:** CI passed on `master` for every change here. The suite on the last change finished with 1927 passed, 18 skipped and 0 failed, and the dashboard tests passed 82 of 82. Each protection in the panel's access check, and each check in the driver step, was removed on purpose and a test failed every time.
- **An independent review** of the driver step found no Critical issues. Its two High findings and its Medium findings were fixed and tested.
- **USB forwarding end to end** was tested on 2026-10-29 with ApolloVibe `ms7`'s `sunshine.exe`, MoonlightVibe 6.3.11 and a USB stick. That test did not go through the MultiSeat panel or the driver step.

## Not verified

- **The USB panel in a real browser.** It has not been compared between a browser on the console and one inside a seat. The access rule is tested with this process as the caller, not from a live seat session.
- **A seat user moving their session to the console** (`tscon`) is covered by a unit test of the rule, not measured on a live seat.
- **The driver install step** has not run for real: no real download, and no check on a freshly installed driver. If the driver check is too strict it refuses, which is safe.
- **The faster stop** is measured by the test, not by a stop on a live host.

## Known limitations

- **After a Quit, the Moonlight client still lists the seat but cannot connect** until Apollo is started from the dashboard.
- **On at least one host the scale override is still ignored** (issue #93). This release does not change that.
- Seats capture the remote desktop surface, not a dedicated virtual display. That is a Windows constraint.
- Steam isolation is experimental and off by default.

## Install

```powershell
.\prerequisites\install-prerequisites.ps1 # drivers - needed either way
.\scripts\install-service.ps1 -FromZip .
```

Afterwards, confirm what landed:

```powershell
& 'C:\Program Files\MultiSeat\MultiSeat.Service.exe' --config
```

It should report `0.6.24`.
2 changes: 1 addition & 1 deletion version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.6.23
0.6.24
Loading