@desklink/host 0.5.14 → 0.5.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -84,8 +84,12 @@ See the [changelog](https://github.com/umeranjum17/desklink/blob/main/CHANGELOG.
84
84
  npm install @desklink/host
85
85
  npx desklink-host path # the engine this install will run
86
86
  npx desklink-host capabilities # what this machine can do right now
87
+ npx desklink-host doctor # check every Linux requirement before a session
87
88
  ```
88
89
 
90
+ `doctor` prints one PASS/FAIL line per requirement with the exact free package
91
+ command for each failure, and exits nonzero when one is missing. It starts no session.
92
+
89
93
  On **Linux x64 with glibc 2.36 or newer** — Debian 12, Ubuntu 24.04, Fedora 37
90
94
  or later, Arch — that is the whole install. npm also installs the optional
91
95
  platform package `@desklink/host-linux-x64-gnu`, which carries the prebuilt
@@ -114,7 +118,8 @@ that asks), Quartz pointer/keyboard events, and
114
118
  plain-text NSPasteboard operations. `capabilities` is non-prompting; `session.open`
115
119
  requests Screen Recording and, for input, Accessibility consent when needed.
116
120
  For persistent grants, install the signed `DesklinkHost.app` at one fixed path.
117
- Build the engine on the Mac, then run
121
+ Build the engine on the Mac with `cargo build --release` (the packed release CLI, built with
122
+ `DESKLINK_MACOS_CLI`, has no bundle identity and the installer refuses it), then run
118
123
  `release/install-mac-app.sh <engine> <absolute path to DesklinkHost.app> [existing signing PEM]`
119
124
  from this package. It prefers a usable Developer ID Application or Apple
120
125
  Development identity in the login keychain; otherwise it imports the supplied
@@ -2,14 +2,16 @@
2
2
  /**
3
3
  * CLI for the desktop host engine package.
4
4
  *
5
- * `path` and `capabilities` work without starting a session, so a consumer can
6
- * tell the user what is wrong before a desktop is opened rather than after.
5
+ * `path`, `doctor` and `capabilities` work without starting a session, so a
6
+ * consumer can tell the user what is wrong before a desktop is opened rather
7
+ * than after.
7
8
  * Everything else is forwarded to the engine binary, so the CLI cannot drift
8
9
  * from the process protocol it documents.
9
10
  */
10
11
  import { spawn } from 'node:child_process';
11
12
  import { randomBytes } from 'node:crypto';
12
13
  import { Bridge } from '../dist/bridge.js';
14
+ import { runDoctor } from '../dist/doctor.js';
13
15
  import { EngineClient, windowsEngineStartupError } from '../dist/engineProcess.js';
14
16
  import { explainMissingEngine, resolveEngine } from '../dist/resolveEngine.js';
15
17
 
@@ -21,12 +23,13 @@ async function main() {
21
23
 
22
24
  USAGE:
23
25
  desklink-host path print the engine binary this package would run
26
+ desklink-host doctor check every Linux requirement and print the fix for each failure
24
27
  desklink-host capabilities print what this machine can do right now
25
28
  desklink-host bridge [--listen H:P] [--token T] [--source portal|x11|display] [--display :0] [--display-id ID] [--reattach-ms MS]
26
29
  re-serve the engine's protocol over a WebSocket and
27
30
  print the URL to open; no signaling of your own needed
28
31
  retain detached sessions for 30000 ms; --reattach-ms 0 closes immediately
29
- desklink-host <engine command> ... run the engine directly (serve, keep, capture-probe, setup-input, version)
32
+ desklink-host <engine command> ... run the engine directly (serve, keep, capture-probe, setup-input, diagnose, version)
30
33
 
31
34
  Set DESKLINK_ENGINE to use an engine built somewhere else (MUXR_DESKLINK_ENGINE still works as a deprecated fallback).`);
32
35
  return 0;
@@ -40,6 +43,9 @@ Set DESKLINK_ENGINE to use an engine built somewhere else (MUXR_DESKLINK_ENGINE
40
43
  console.log(resolved.command);
41
44
  return 0;
42
45
  }
46
+ if (command === 'doctor') {
47
+ return await runDoctor();
48
+ }
43
49
  if (command === 'bridge') {
44
50
  const resolved = resolveEngine();
45
51
  if (resolved === null) {
@@ -0,0 +1,2 @@
1
+ export declare function runDoctor(): Promise<number>;
2
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AA0LA,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAyEjD"}
package/dist/doctor.js ADDED
@@ -0,0 +1,220 @@
1
+ /**
2
+ * `desklink-host doctor`: one PASS/FAIL line per requirement a Linux session
3
+ * needs, and the free package command that fixes a failure.
4
+ *
5
+ * The engine answers the machine questions (`diagnose`); this file adds the
6
+ * package facts and the words a person can act on. It starts no session and
7
+ * opens no portal, so it is safe to run before choosing a capture source.
8
+ */
9
+ import { execFile } from 'node:child_process';
10
+ import { readFileSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import { missingSystemLibrary } from './engineProcess.js';
13
+ import { enginePackageRoot, explainMissingEngine, resolveEngine } from './resolveEngine.js';
14
+ const ENGINE_FIX = 'Debian/Ubuntu: `npm install @desklink/host-linux-x64-gnu` (keep optional dependencies); Fedora: the same command.';
15
+ const NODE_FIX = 'Debian/Ubuntu: `curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt install -y nodejs`; Fedora: `sudo dnf install nodejs`.';
16
+ const X11_FIX = 'Debian/Ubuntu: `sudo apt install xserver-xorg-core`; Fedora: `sudo dnf install xorg-x11-server-Xorg` (run inside the logged-in desktop session).';
17
+ const WAYLAND_FIX = 'Debian/Ubuntu: `sudo apt install pipewire xdg-desktop-portal xdg-desktop-portal-gnome` (KDE: xdg-desktop-portal-kde); Fedora: `sudo dnf install pipewire xdg-desktop-portal xdg-desktop-portal-gnome`.';
18
+ const INPUT_FIX = 'Wayland Debian/Ubuntu: `sudo apt install xdg-desktop-portal xdg-desktop-portal-gnome`; Fedora: `sudo dnf install xdg-desktop-portal xdg-desktop-portal-gnome`; then run `desklink-host setup-input` once for /dev/uinput.';
19
+ const ENCODER_FIX = 'Debian/Ubuntu: `sudo apt install mesa-va-drivers intel-media-va-driver`; Fedora: `sudo dnf install mesa-va-drivers intel-media-driver` (the engine also fetches Cisco openh264 once on first use when online).';
20
+ const LIBRARY_FIX = 'Debian/Ubuntu: `sudo apt install libpipewire-0.3-0 libxkbcommon0 libevdev2 libstdc++6 libxcursor1 libx11-6 libxext6 libwayland-client0 libfontconfig1 libfreetype6`; Fedora: `sudo dnf install pipewire-libs libxkbcommon libevdev libstdc++ libXcursor libX11 libXext libwayland-client fontconfig freetype`. A complete desktop install usually has these already.';
21
+ const UPDATE_FIX = 'Debian/Ubuntu: `npm install @desklink/host@latest`; Fedora: the same command.';
22
+ const PROBE_FIX = `install the engine first — ${ENGINE_FIX}`;
23
+ function pass(name, detail) {
24
+ return { status: 'PASS', name, detail };
25
+ }
26
+ function na(name, detail) {
27
+ return { status: 'N/A', name, detail };
28
+ }
29
+ function fail(name, detail, fix) {
30
+ return { status: 'FAIL', name, detail, fix };
31
+ }
32
+ function firstLine(text) {
33
+ return text.split('\n').find((line) => line.trim() !== '')?.trim() ?? '';
34
+ }
35
+ function runEngine(command, args) {
36
+ return new Promise((done) => {
37
+ execFile(command, args, { timeout: 40_000, maxBuffer: 8 << 20, windowsHide: true }, (error, stdout, stderr) => {
38
+ const code = error === null ? 0 : typeof error.code === 'number' ? error.code : null;
39
+ done({ code, stdout: String(stdout), stderr: String(stderr) });
40
+ });
41
+ });
42
+ }
43
+ function readPackage() {
44
+ try {
45
+ return JSON.parse(readFileSync(join(enginePackageRoot(), 'package.json'), 'utf8'));
46
+ }
47
+ catch {
48
+ return null;
49
+ }
50
+ }
51
+ /** The package asks for a minimum Node version; only `>=` needs to be read. */
52
+ function nodeMeets(current, requirement) {
53
+ const have = current.split('.').map(Number);
54
+ for (const clause of requirement.trim().split(/\s+/)) {
55
+ const match = /^>=\s*v?(\d+)(?:\.(\d+))?(?:\.(\d+))?$/.exec(clause);
56
+ if (match === null)
57
+ return false;
58
+ const want = [Number(match[1]), Number(match[2] ?? 0), Number(match[3] ?? 0)];
59
+ for (let index = 0; index < 3; index++) {
60
+ const left = have[index] ?? 0;
61
+ const right = want[index] ?? 0;
62
+ if (left !== right) {
63
+ if (left < right)
64
+ return false;
65
+ break;
66
+ }
67
+ }
68
+ }
69
+ return true;
70
+ }
71
+ function librariesCheck(resolved, version) {
72
+ if (resolved === null)
73
+ return na('libraries', 'needs an engine binary; see the engine line');
74
+ const missing = missingSystemLibrary(version.stderr);
75
+ if (missing !== null)
76
+ return fail('libraries', `cannot load ${missing}`, LIBRARY_FIX);
77
+ if (version.code === 0)
78
+ return pass('libraries', "the engine starts with this machine's system libraries");
79
+ return fail('libraries', `the engine did not run: ${firstLine(version.stderr) || `exit ${version.code ?? 'unexpectedly'}`}`, UPDATE_FIX);
80
+ }
81
+ function x11Check(x11, session, probeError, probeFix) {
82
+ if (session === 'wayland')
83
+ return na('x11', 'Wayland session; the portal is the capture path');
84
+ if (session === 'none')
85
+ return fail('x11', 'no X11 or Wayland session (DISPLAY and WAYLAND_DISPLAY are unset)', X11_FIX);
86
+ if (x11 === undefined)
87
+ return fail('x11', `not checked: ${probeError ?? 'the engine reported no X11 result'}`, probeFix);
88
+ if (!x11.connected)
89
+ return fail('x11', `cannot open ${x11.display ?? process.env.DISPLAY ?? 'the display'}: ${x11.error ?? 'unknown error'}`, X11_FIX);
90
+ const missing = [!x11.shm && 'XShm', !x11.damage && 'XDamage'].filter((value) => value !== false);
91
+ const size = `${x11.width ?? '?'}x${x11.height ?? '?'}`;
92
+ if (missing.length > 0) {
93
+ return fail('x11', `${x11.display ?? 'the display'} ${size} cannot use ${missing.join(' or ')}`, X11_FIX);
94
+ }
95
+ return pass('x11', `${x11.display ?? 'the display'} ${size}, XShm + XDamage`);
96
+ }
97
+ function waylandCheck(wayland, session, probeError, probeFix) {
98
+ if (session !== 'wayland')
99
+ return na('wayland', session === 'x11' ? 'X11 session; no portal is needed' : 'no Wayland session');
100
+ if (wayland === undefined)
101
+ return fail('wayland', `not checked: ${probeError ?? 'the engine reported no Wayland result'}`, probeFix);
102
+ const missing = [];
103
+ if (!wayland.screencast)
104
+ missing.push(`xdg-desktop-portal ScreenCast (${wayland.screencast_error ?? 'not reachable'})`);
105
+ if (!wayland.pipewire)
106
+ missing.push('PipeWire socket');
107
+ if (missing.length > 0)
108
+ return fail('wayland', `missing ${missing.join(', ')}`, WAYLAND_FIX);
109
+ return pass('wayland', 'xdg-desktop-portal ScreenCast + PipeWire');
110
+ }
111
+ function inputCheck(report, session, probeError, probeFix) {
112
+ if (report === null)
113
+ return fail('input', `not checked: ${probeError ?? 'the engine did not answer'}`, probeFix);
114
+ if (session === 'x11') {
115
+ const x11 = report.x11;
116
+ if (x11?.connected !== true)
117
+ return fail('input', 'XTest cannot be checked without an X display', X11_FIX);
118
+ if (x11.xtest !== true)
119
+ return fail('input', `XTest is missing from ${x11.display ?? 'the display'}`, X11_FIX);
120
+ return pass('input', `XTest on ${x11.display ?? 'the display'}`);
121
+ }
122
+ if (session === 'wayland') {
123
+ const wayland = report.wayland;
124
+ const missing = [];
125
+ if (wayland?.remote_desktop !== true)
126
+ missing.push(`portal RemoteDesktop (${wayland?.remote_desktop_error ?? 'not reachable'})`);
127
+ if (report.uinput !== true)
128
+ missing.push('/dev/uinput is not writable');
129
+ if (missing.length > 0)
130
+ return fail('input', `missing ${missing.join(', ')}`, INPUT_FIX);
131
+ return pass('input', 'portal RemoteDesktop + /dev/uinput');
132
+ }
133
+ return fail('input', 'no X11 or Wayland session to inject into', X11_FIX);
134
+ }
135
+ function encoderCheck(report, probeError, probeFix) {
136
+ if (report === null)
137
+ return fail('encoder', `not checked: ${probeError ?? 'the engine did not answer'}`, probeFix);
138
+ if (report.encoder === null || report.encoder === undefined)
139
+ return fail('encoder', 'no working H.264 encoder', ENCODER_FIX);
140
+ return pass('encoder', `${report.encoder.name}${report.encoder.hardware ? ' (hardware)' : ''}; VP9 software is always available`);
141
+ }
142
+ function versionCheck(packageVersion, engineVersion, reason, fix) {
143
+ if (packageVersion === null)
144
+ return fail('versions', 'cannot read @desklink/host package.json', UPDATE_FIX);
145
+ if (engineVersion === null)
146
+ return fail('versions', `@desklink/host ${packageVersion}; engine version unavailable (${reason ?? 'no answer'})`, fix);
147
+ return pass('versions', `@desklink/host ${packageVersion} · engine ${engineVersion}`);
148
+ }
149
+ export async function runDoctor() {
150
+ // Linux first: the engine has no `diagnose` on other platforms yet, and a
151
+ // report built from failed probes there would describe the wrong machine.
152
+ if (process.platform !== 'linux') {
153
+ console.log(`FAIL platform desklink-host doctor checks Linux only; ${process.platform} was not checked`);
154
+ return 1;
155
+ }
156
+ const checks = [];
157
+ const packageFacts = readPackage();
158
+ const packageVersion = typeof packageFacts?.version === 'string' ? packageFacts.version : null;
159
+ const resolved = resolveEngine();
160
+ checks.push(resolved === null
161
+ ? fail('engine', explainMissingEngine() ?? 'the engine binary is not resolvable', ENGINE_FIX)
162
+ : pass('engine', `${resolved.command} (${resolved.origin})`));
163
+ const nodeVersion = process.versions.node;
164
+ const requirement = typeof packageFacts?.engines?.node === 'string' ? packageFacts.engines.node : null;
165
+ checks.push(requirement !== null && !nodeMeets(nodeVersion, requirement)
166
+ ? fail('node', `v${nodeVersion} does not meet the package requirement ${requirement}`, NODE_FIX)
167
+ : pass('node', `v${nodeVersion}${requirement === null ? '' : ` (package needs ${requirement})`}`));
168
+ let diagnose = null;
169
+ let engineVersion = null;
170
+ let probeError = null;
171
+ let versionResult = { code: null, stdout: '', stderr: '' };
172
+ if (resolved !== null) {
173
+ const [version, diagnoseResult] = await Promise.all([
174
+ runEngine(resolved.command, ['version']),
175
+ runEngine(resolved.command, ['diagnose']),
176
+ ]);
177
+ versionResult = version;
178
+ if (versionResult.code === 0)
179
+ engineVersion = versionResult.stdout.trim() || null;
180
+ if (diagnoseResult.code === 0) {
181
+ try {
182
+ diagnose = JSON.parse(diagnoseResult.stdout);
183
+ }
184
+ catch {
185
+ probeError = 'the engine returned unreadable diagnose output';
186
+ }
187
+ }
188
+ else {
189
+ probeError = firstLine(diagnoseResult.stderr) || `engine diagnose exited ${diagnoseResult.code ?? 'unexpectedly'}`;
190
+ }
191
+ if (engineVersion === null && typeof diagnose?.version === 'string')
192
+ engineVersion = diagnose.version;
193
+ }
194
+ checks.push(librariesCheck(resolved, versionResult));
195
+ const session = diagnose?.session
196
+ ?? (process.env.WAYLAND_DISPLAY !== undefined && process.env.WAYLAND_DISPLAY !== ''
197
+ ? 'wayland'
198
+ : process.env.DISPLAY !== undefined && process.env.DISPLAY !== ''
199
+ ? 'x11'
200
+ : 'none');
201
+ const missingLibrary = missingSystemLibrary(versionResult.stderr);
202
+ const probeFix = resolved === null ? PROBE_FIX : missingLibrary !== null ? LIBRARY_FIX : UPDATE_FIX;
203
+ checks.push(x11Check(diagnose?.x11 ?? undefined, session, probeError, probeFix));
204
+ checks.push(waylandCheck(diagnose?.wayland ?? undefined, session, probeError, probeFix));
205
+ checks.push(inputCheck(diagnose, session, probeError, probeFix));
206
+ checks.push(encoderCheck(diagnose, probeError, probeFix));
207
+ checks.push(versionCheck(packageVersion, engineVersion, resolved === null ? 'no engine binary' : probeError, probeFix));
208
+ for (const check of checks) {
209
+ console.log(`${check.status.padEnd(4)} ${check.name.padEnd(8)} ${check.detail}`);
210
+ if (check.fix !== undefined)
211
+ console.log(` fix ${check.fix}`);
212
+ }
213
+ const failed = checks.filter((check) => check.status === 'FAIL').length;
214
+ const passed = checks.filter((check) => check.status === 'PASS').length;
215
+ const skipped = checks.length - failed - passed;
216
+ console.log('');
217
+ console.log(`${checks.length} checks: ${passed} passed, ${failed} failed, ${skipped} not applicable`);
218
+ return failed === 0 ? 0 : 1;
219
+ }
220
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,9 @@
1
1
  import { EngineRefused, type EngineCapabilities, type EngineEvent, type OpenedSession, type PointRequest, type OpenSessionRequest, type SessionMetrics } from './protocol.js';
2
+ /**
3
+ * The library a Linux engine could not load, from the linker's own message, or
4
+ * null when the engine started or stopped for another reason.
5
+ */
6
+ export declare function missingSystemLibrary(stderr: string): string | null;
2
7
  export declare function windowsEngineStartupError(code: number | null, error?: Error): EngineRefused | null;
3
8
  export interface EngineClientOptions {
4
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"engineProcess.d.ts","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engineProcess.d.ts","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,19 @@ import { spawn, spawnSync } from 'node:child_process';
2
2
  import { appendFileSync } from 'node:fs';
3
3
  import { createInterface } from 'node:readline';
4
4
  import { EngineRefused, PROTOCOL_VERSION, } from './protocol.js';
5
+ /** The system libraries the prebuilt Linux engine loads at start. */
6
+ const LINUX_SYSTEM_LIBRARIES = [
7
+ 'libpipewire-0.3.so.0', 'libxkbcommon.so.0', 'libevdev.so.2', 'libstdc++.so.6',
8
+ 'libXcursor.so.1', 'libX11.so.6', 'libXext.so.6', 'libwayland-client.so.0', 'libfontconfig.so.1', 'libfreetype.so.6',
9
+ ];
10
+ /**
11
+ * The library a Linux engine could not load, from the linker's own message, or
12
+ * null when the engine started or stopped for another reason.
13
+ */
14
+ export function missingSystemLibrary(stderr) {
15
+ const missing = /error while loading shared libraries: ([^:\s]+): cannot open shared object file/.exec(stderr)?.[1];
16
+ return missing !== undefined && LINUX_SYSTEM_LIBRARIES.includes(missing) ? missing : null;
17
+ }
5
18
  export function windowsEngineStartupError(code, error) {
6
19
  if (process.platform !== 'win32')
7
20
  return null;
@@ -64,11 +77,8 @@ export class EngineClient {
64
77
  static async start(command, args, options = {}, env = process.env) {
65
78
  if (process.platform === 'linux' && args[0] === 'serve') {
66
79
  const probe = spawnSync(command, ['version'], { env, encoding: 'utf8', timeout: 3000 });
67
- const missing = /error while loading shared libraries: ([^:\s]+): cannot open shared object file/.exec(probe.stderr ?? '')?.[1];
68
- if (missing !== undefined && [
69
- 'libpipewire-0.3.so.0', 'libxkbcommon.so.0', 'libevdev.so.2', 'libstdc++.so.6',
70
- 'libXcursor.so.1', 'libX11.so.6', 'libXext.so.6', 'libwayland-client.so.0', 'libfontconfig.so.1', 'libfreetype.so.6',
71
- ].includes(missing)) {
80
+ const missing = missingSystemLibrary(probe.stderr ?? '');
81
+ if (missing !== null) {
72
82
  throw new EngineRefused('missing-system-library', `missing system library: ${missing}`);
73
83
  }
74
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"engineProcess.js","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engineProcess.js","sourceRoot":"","sources":["../src/engineProcess.ts"],"names":[],"mappings":"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"}
package/docs/PROTOCOL.md CHANGED
@@ -187,7 +187,9 @@ video itself (see *Encoded sources*): a consumer reads it rather than inferring
187
187
  support from the engine's version string.
188
188
 
189
189
  `input.mechanism` names the build's portal input path, `inputtino/uinput`,
190
- where the engine creates its own virtual devices. A session opened against an X
190
+ where the engine creates its own virtual devices, or `portal-remotedesktop` only when
191
+ `/dev/uinput` is unavailable and the session portal advertises a keyboard (keys
192
+ only; `pointer` and `wheel` are then `false`). A session opened against an X
191
193
  display applies input through XTest instead, where the X server applies the
192
194
  events and nothing the engine does can reach another session's keyboard.
193
195
  `input.layout` is the keymap the engine compiled for typing, taken from the
@@ -480,7 +482,7 @@ The session ended on the engine's side; there is nothing further to drain.
480
482
  | `code` | Meaning | A client should |
481
483
  |---|---|---|
482
484
  | `transport` | The path to the client's peer was lost (ICE `failed`, or the track refused a frame) | open a new session with fresh authority; the desktop is still available |
483
- | `lease` | The session's `ttl_seconds` ran out | end; the grant is spent |
485
+ | `lease` | The session's `ttl_seconds` ran out | open a new session with fresh authority at once; this grant is spent but the desktop is still available (`@desklink/react-native`'s hook does; a client that ignores the event just goes dead) |
484
486
  | `error` | The engine could not keep serving it, such as an encoder refusing a frame | end and report |
485
487
 
486
488
  A session the consumer closes or replaces (`session.close`, a new
package/engine/Cargo.lock CHANGED
@@ -536,7 +536,7 @@ checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
536
536
 
537
537
  [[package]]
538
538
  name = "desklink-host"
539
- version = "0.5.14"
539
+ version = "0.5.16"
540
540
  dependencies = [
541
541
  "anyhow",
542
542
  "ashpd",
package/engine/Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "desklink-host"
3
- version = "0.5.14"
3
+ version = "0.5.16"
4
4
  edition = "2021"
5
5
  rust-version = "1.97.1"
6
6
  license = "Apache-2.0"
@@ -118,7 +118,10 @@ extern "C" void *dl_mac_stream_start(uint32_t display_id, size_t width, size_t h
118
118
  config.width = width;
119
119
  config.height = height;
120
120
  config.pixelFormat = kCVPixelFormatType_32BGRA;
121
- config.minimumFrameInterval = CMTimeMake(1, fps ? fps : 30);
121
+ // Asking for exactly 1/fps makes ScreenCaptureKit drop any refresh that lands a hair early and hold the rest to its
122
+ // own timer, a few ms late (a 60 Hz display delivered 52-58 fps). 90% of the interval lets every refresh through;
123
+ // the encoder cadence still caps the stream at `fps`.
124
+ config.minimumFrameInterval = CMTimeMake(9, (fps ? fps : 30) * 10);
122
125
  config.queueDepth = 3;
123
126
  config.showsCursor = YES;
124
127
  config.capturesAudio = NO;
@@ -606,82 +606,3 @@ struct StreamState {
606
606
 
607
607
  // PipeWire callbacks only touch this from the capture thread.
608
608
  unsafe impl Send for StreamState {}
609
-
610
- #[cfg(test)]
611
- mod tests {
612
- use super::*;
613
- use std::time::Duration;
614
-
615
- #[test]
616
- fn layer_mask_keeps_click_center_and_removes_ring_and_edge() {
617
- let position = Arc::new(Mutex::new(Some((50, 50))));
618
- let mut mask = IndicatorMask::new(position.clone());
619
- mask.apply(&mut vec![1; 100 * 100 * 4], 100, 100, 100, 100);
620
- let mut frame = vec![2; 100 * 100 * 4];
621
- mask.apply(&mut frame, 100, 100, 100, 100);
622
- assert_eq!(frame[(50 * 100 + 50) * 4], 2);
623
- assert_eq!(frame[(50 * 100 + 60) * 4], 1);
624
- assert_eq!(frame[0], 1);
625
- *position.lock().unwrap() = Some((75, 50));
626
- let mut moved = vec![3; 100 * 100 * 4];
627
- mask.apply(&mut moved, 100, 100, 100, 100);
628
- assert_eq!(moved[(50 * 100 + 60) * 4], 1, "eased path is masked");
629
- assert_eq!(moved[(50 * 100 + 75) * 4], 3, "click center remains live");
630
- }
631
-
632
- #[test]
633
- fn dropping_capture_stops_and_joins_its_live_pipewire_loop() {
634
- // Exercise the real event-loop/channel lifetime without a portal,
635
- // compositor, screen capture or input device.
636
- let (quit, stop) = pw::channel::channel();
637
- let (ready_tx, ready_rx) = mpsc::channel();
638
- let (ended_tx, ended_rx) = mpsc::channel();
639
- let thread = std::thread::spawn(move || {
640
- pw::init();
641
- let main_loop = pw::main_loop::MainLoopRc::new(None).unwrap();
642
- let _stop = stop.attach(main_loop.loop_(), {
643
- let main_loop = main_loop.clone();
644
- move |_| main_loop.quit()
645
- });
646
- let timer = main_loop.loop_().add_timer(move |_| {
647
- let _ = ready_tx.send(());
648
- });
649
- timer
650
- .update_timer(Some(Duration::from_millis(1)), None)
651
- .into_result()
652
- .unwrap();
653
- main_loop.run();
654
- });
655
- let capture = Capture {
656
- quit,
657
- thread: Some(thread),
658
- source: SelectedSource {
659
- node_id: 0,
660
- width: 2,
661
- height: 2,
662
- position: None,
663
- source_type: None,
664
- origin_x: 0,
665
- origin_y: 0,
666
- },
667
- cursor: None,
668
- geometry: Arc::new(Mutex::new(None)),
669
- frames: Arc::new(AtomicU64::new(0)),
670
- dropped: Arc::new(AtomicU64::new(0)),
671
- encoded_width: 2,
672
- encoded_height: 2,
673
- };
674
- ready_rx
675
- .recv_timeout(Duration::from_secs(2))
676
- .expect("the loop is running");
677
- // Keep a broken join bounded so a missing stop is a failed check rather
678
- // than a test process that hangs forever.
679
- std::thread::spawn(move || {
680
- drop(capture);
681
- ended_tx.send(()).unwrap();
682
- });
683
- ended_rx
684
- .recv_timeout(Duration::from_secs(2))
685
- .expect("capture stopped and joined");
686
- }
687
- }