bbd98241e4
A user-configurable policy layer above the per-compositor VirtualDisplay backends: keep-alive, topology, conflict, identity, layout, max-displays — persisted to display-settings.json, editable from the web console, applied per connect. Design: design/display-management.md. Stage 0 stands up the surface and wires the two behaviors the existing code can already express — the Windows monitor linger duration and the "make the streamed output the sole desktop" topology — through it; every other option is stored + echoed but not yet enforced (later stages). An unconfigured host (no display-settings.json) keeps today's exact behavior. - vdisplay/policy.rs: pure DisplayPolicy + 5 presets + JSON store (gpu-settings pattern) + EffectivePolicy; 9 unit tests. - vdisplay.rs: resolve_topology(Auto); apply_session_env drives *_VIRTUAL_PRIMARY from the policy only when a settings file exists. - windows/manager.rs: linger_ms() + should_isolate() read the policy when configured. - mgmt: GET/PUT /api/v1/display/settings (bearer-only); PUT rejects keep_alive forever until the lifecycle stage. OpenAPI regenerated. - web console: Host → Virtual displays card (preset picker + custom fields); en+de. - docs-site: virtual-displays.md + configuration.md cross-links. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
22 lines
535 B
TypeScript
22 lines
535 B
TypeScript
import type { FC } from "react";
|
|
import { useGetHostInfo, useListCompositors } from "@/api/gen/host/host";
|
|
import { useLocale } from "@/lib/i18n";
|
|
import { DisplaySection } from "./DisplayCard";
|
|
import { GpuSection } from "./GpuCard";
|
|
import { HostView } from "./view";
|
|
|
|
export const SectionHost: FC = () => {
|
|
useLocale();
|
|
const host = useGetHostInfo();
|
|
const compositors = useListCompositors();
|
|
|
|
return (
|
|
<HostView
|
|
host={host}
|
|
compositors={compositors}
|
|
gpu={<GpuSection />}
|
|
displays={<DisplaySection />}
|
|
/>
|
|
);
|
|
};
|