> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cyberdesk.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Windows VM 101

> Set up a reliable Windows environment for desktop automation

This guide describes the recommended Windows setup for the current RustDesk-based Cyberdriver. The old Python-agent setup with `--add-persistent-display` and `--black-screen-recovery` is documented under [Legacy Cyberdriver](/cyberdriver/legacy-cyberdriver).

## Goals

A reliable Windows automation machine should:

* stay reachable without an active RDP window
* expose a stable 1024×768 desktop when possible
* run Cyberdriver as a service
* avoid unexpected restarts and sleep
* support screenshots, clicks, typing, clipboard, files, and shell commands from Cyberdesk

## Recommended setup

<Steps>
  <Step title="Provision Windows">
    Use Windows Server 2022 or a supported Windows desktop environment. RDP is useful for initial setup, but Cyberdriver should continue working after RDP disconnects.
  </Step>

  <Step title="Install Cyberdriver">
    Open PowerShell as Administrator and run the installer script from [Cyberdriver Quickstart](/cyberdriver/quickstart#windows-install).

    The script installs Cyberdriver as a Windows service, adds it to `PATH`, and verifies the CLI. During beta, Windows may show SmartScreen warnings; choose **More info → Run anyway**.

    Administrator is required for installation because service mode is what lets Cyberdriver start at boot and work at the Windows login screen. After installation, the Cyberdriver app itself can be opened normally.
  </Step>

  <Step title="Connect to Cyberdesk">
    Open Cyberdriver, paste your organization API key into the **Cyberdesk tunnel** card, and click **Save**.

    Once connected, the machine appears in the Cyberdesk dashboard.
  </Step>

  <Step title="Set resolution and verify tools">
    From Cyberdesk, open the desktop's **Tools** dialog. Verify screenshot, click, type, clipboard, files, and PowerShell. If needed, use the System tab to set the display to 1024×768.
  </Step>

  <Step title="Disconnect RDP and re-test">
    Close the RDP window, wait briefly, then use Desktop Tools again. Cyberdriver 1.x beta relies on RustDesk's display stack and service mode rather than the legacy screenshot-based black-screen recovery loop.
  </Step>
</Steps>

## RDP and display notes

Cyberdriver 1.x beta uses RustDesk's virtual display/display enumeration path. If RDP disconnect changes the active display, Cyberdriver should still be able to recover a usable display through the RustDesk service.

If a machine shows a black screen after RDP disconnect:

1. Open Desktop Tools and check **System → Display dimensions**.
2. Use **Copy diagnostics** in Cyberdriver settings.
3. Reconnect once through Cyberdriver or RDP, then disconnect RDP and try again.
4. Contact support with diagnostics and logs.

## Power settings

Disable sleep and aggressive screen lock policies for unattended automation. Keepalive can help with idle timers, but it is not a replacement for sensible OS power settings.

## Legacy setup

The old Python Cyberdriver recommended:

```bash theme={null}
cyberdriver join --secret YOUR_API_KEY --keepalive --black-screen-recovery --add-persistent-display
```

Do not use those flags with Cyberdriver 1.x beta. See [Legacy Cyberdriver](/cyberdriver/legacy-cyberdriver) if you are using the stable Python executable.
