Evan's Blog
EvanZhu0721 / 公开仓库

SBMS

镜像已同步

SBMS complete the calculation rules for the default logical desktop topology relationship and the physical dimensions of the displays in the Windows multi-screen collaboration system.

上游 GitHub
READ-ONLY MIRROR

README、源码与 Release 已保存到本站;源码视图固定到 commit a37d6c4b。

main/ root
a37d6c4b· 固定源码快照
README.md5.9 KB
预览
1![SBMS banner](assets/sbms-banner.png?v=75f6b3b)
2
3# SBMS
4
5[简体中文](README.zh-CN.md)
6
7BrainController
8
9▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
10
11● ChatGPT&Codex 100%
12
13
14'SBMS' stands for "SBMS bridges multiple screens", Microsoft is a great company and Windows is a good system. (BTW I use Linux for laptop XD)
15
16The original intention of 'SBMS' was to complete the calculation rules for the default logical desktop topology relationship and the physical dimensions of the displays in the Windows multi-screen collaboration system.
17
18'SBMS' turns one Windows virtual desktop into a full-screen mirror on a physical
19display. It is useful when Windows' normal extend/duplicate modes cannot provide
20the resolution, scaling, or desktop arrangement you need.
21
22Start a mapping from the tray, choose the physical display, and SBMS will:
23
24- create a virtual display at the configured size and refresh rate;
25- move eligible windows from the chosen display to the virtual desktop;
26- mirror the virtual desktop back to the chosen display;
27- forward mouse input to the real Windows pointer on the virtual desktop; and
28- restore the windows and physical display layout when mapping stops.
29
30New windows are picked up while the mapping is running.
31
32The tray can keep up to sixteen independent mirror or stream-only groups. Their
33display, sizing, resolution, refresh-rate, aspect-ratio and rotation settings
34survive normal restarts and installer upgrades. Existing single-output
35configuration is imported automatically as **Output 1**.
36
37Quick Access can keep up to three named configuration profiles. Create a profile
38from the current setup, switch between profiles, rename or delete them, and open
39the JSON storage directory from the profile menu. Switching while mapping is
40running asks for confirmation, then restarts the mapping with the selected profile.
41
42## Streaming
43
44Set an output to **Stream only**, choose its resolution, refresh rate and
45orientation, then start the mapping. SBMS creates the virtual desktop without
46mirroring it to a physical display and starts a dedicated Sunshine instance for
47that output. The tray shows the LAN address and port; use them to connect from
48Moonlight. **Open Sunshine** opens that instance's web panel for pairing and
49other Sunshine settings. Stopping the mapping also stops the managed instance.
50
51## How it works
52
53The application and lifecycle code are written in Rust. A small C++ UMDF
54indirect-display driver publishes the virtual monitor through WDF/IddCx.
55Desktop Duplication and a D3D11 shader keep the mirror on the GPU, including
56area-based downscaling and lightweight subpixel-fringe reduction.
57
58The tray panel is built with Slint. Installation and upgrades use Inno Setup.
59
60More implementation detail is available in
61[Architecture](docs/architecture.md). Frontend developers can use the
62[Geometry API](docs/geometry.md) and [mapping-plan API](docs/mapping-plan.md).
63
64## Install
65
661. Download `SBMS-Setup-1.5.1-x64.exe` from the latest GitHub release.
672. Run it and approve the administrator prompt.
683. Open SBMS from the tray, choose a target display, and select **Start mapping**.
694. Select **Stop and restore** when you want to end the mapping and restore the
70 original display layout. If the display topology changes unexpectedly, SBMS
71 attempts to reconnect automatically.
72
73SBMS starts automatically when the installing user signs in. Remove it from
74Windows **Installed apps**; the uninstaller also removes the driver and startup
75task.
76
77The current package uses a local test-signing certificate. Windows must trust
78that certificate, or be configured for test-signed drivers, before the driver
79can load. A Microsoft production-signed driver is required for normal public
80installation without that setup.
81
82## Command line
83
84The tray is the normal interface. The same lifecycle is also available from an
85administrator terminal:
86
87```powershell
88sbms list
89sbms map --target '<monitor-device-path>'
90sbms plan validate examples\two-streams.json
91sbms plan run examples\two-streams.json
92sbms config list
93sbms config show
94sbms config import gaming .\gaming.json --activate
95sbms shutdown
96```
97
98`sbms list` prints the stable ID used by `--target`. Press Enter to stop a
99foreground session cleanly. A mapping plan can contain up to sixteen mirror and
100stream-only groups. Up to three persistent configuration profiles can coexist;
101see [Configuration profiles](docs/configuration.md) for import, export,
102activation and hot-reload interfaces.
103
104## Build
105
106Requirements: Rust, Visual Studio C++ Build Tools, a matching Windows Driver
107Kit, Inno Setup 6, and a code-signing certificate for release packages.
108
109```powershell
110.\build-installer.ps1 -SigningCertificateThumbprint <thumbprint>
111```
112
113This is the complete release entry point: it builds the locked Rust binaries,
114builds and signs the driver, creates the installer, verifies every signature,
115and writes the installer plus its SHA-256 file to `target\installer`.
116
117For component development, use `cargo build --release --locked --bins` or
118`.\build-driver.ps1` separately. The complete unsigned build and packaging chain
119can be checked explicitly with `.\build-installer.ps1 -Unsigned`; it still
120compiles and validates the driver, then produces an `-unsigned` smoke artifact
121which must not be distributed.
122
123## Acknowledgments
124
125this is my first github repo which release to public and hope that can help you
126
127thanks for all of my friends, especially Jerry & Tony, who shared their ideas and advices with me. thanks for Mr Berti who is my CSA teacher. thanks for my parents who support me. thanks for my brother Eason who lives in the US and help me recharge my openAI account. thanks for Tibo who reset my token for several times. thanks for all of the agents and subagents who change my ideas into the program. thanks for the Chinese GFW which really trained me to become an expert in communication engineering.
128
129$${\color{black}of \space course \space I \space still \space love \space you}$$
130