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

# Utilisation de l’ordinateur avec Desktop

export const SetupApiKeyGuide = () => {
  if (typeof document === "undefined") {
    return null;
  } else {
    return <>
                If you don't have a Novita account, you need to <Link href="https://novita.ai/user/register" target="_blank">sign up</Link> first. For details, please refer to <Link href="/docs/fr/guides/quickstart" target="_blank">Quick Start</Link>. After signing up, you can create an API key through the <Link href="https://novita.ai/settings/key-management" target="_blank">Key Management</Link> page and save it for subsequent steps.
            </>;
  }
};

***Novita Desktop*** est un framework de bureau virtuel sécurisé, spécialement conçu pour développer des agents d’utilisation de l’ordinateur. Cette solution fournit un environnement de bureau complet et isolé, permettant aux agents IA d’interagir en toute sécurité avec des applications de bureau grâce à une virtualisation contrôlée.

Ce document fournit des instructions détaillées sur la manière d’exécuter cette solution sur le service de sandbox Novita Agent.

### 1. Obtenir une clé API Novita

<SetupApiKeyGuide />

### 2. Configuration de l’environnement

Avant de commencer à utiliser le service, vous devez configurer les variables d’environnement nécessaires :

```bash Bash icon="terminal" highlight={1} theme={"system"}
export NOVITA_API_KEY=<Your API key obtained in the previous step>
```

### 3. Installation du SDK

Sélectionnez la méthode d’installation appropriée correspondant à votre environnement de développement et à votre langage de programmation :

<CodeGroup>
  ```bash JavaScript & TypeScript icon="terminal"  theme={"system"}
  npm i novita_sandbox
  ```

  ```bash Python icon="terminal" theme={"system"}
  pip install novita_sandbox
  ```
</CodeGroup>

### 4. Exemples d’implémentation

#### Obtenir l’URL VNC du flux du bureau virtuel

L’implémentation suivante montre l’instanciation d’un environnement de bureau virtuel et la récupération des points de terminaison d’accès VNC pour l’interaction avec le bureau à distance :

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={"system"}
  // demo.ts implementation
  import { Sandbox } from 'novita-sandbox/desktop'

  async function main() {
    // Initialize virtual desktop sandbox instance
    const desktop = await Sandbox.create()

    // Activate desktop streaming service
    await desktop.stream.start()

    // Retrieve interactive VNC endpoint URL
    const url = desktop.stream.getUrl()
    console.log(url)

    // Expected output format:
    // Browser-accessible URL for interactive virtual desktop session. Suitable for application integration.
    // https://6080-ik0n7lc3j0dvqd4jxy6g7.us-phx-1.sandbox.novita.ai/vnc.html?autoconnect=true&resize=scale

    // Retrieve read-only VNC endpoint URL (interaction disabled)
    const urlDisabledInteraction = desktop.stream.getUrl({ viewOnly: true })
    console.log(urlDisabledInteraction)
    // Expected output format:
    // Browser-accessible URL for view-only virtual desktop session (non-interactive mode). Suitable for monitoring applications.
    // https://6080-ik0n7lc3j0dvqd4jxy6g7.us-phx-1.sandbox.novita.ai/vnc.html?autoconnect=true&view_only=true&resize=scale

    // Keep the program running
    console.log("Desktop stream started, press Ctrl+C to stop the program...")
    const interval = setInterval(() => {}, 1000)

    // Register interrupt signal handlers for resource cleanup
    let isCleaning = false
    const cleanup = async () => {
      if (isCleaning) return
      isCleaning = true

      console.log("\nProgram interrupted, cleaning up resources...")
      clearInterval(interval)
      try {
        await desktop.stream.stop() // Terminate streaming service
        await desktop.kill()        // Deallocate sandbox instance
      } catch (err) {
        console.error("Error cleaning up resources:", err)
      }
      process.exit(0)
    }

    process.on('SIGINT', cleanup)
    process.on('SIGTERM', cleanup)
  }

  main().catch(console.error)
  ```

  ```python Python icon="python" theme={"system"}
  # demo.py implementation
  from novita_sandbox.desktop import Sandbox

  # Initialize virtual desktop sandbox instance
  desktop = Sandbox.create()

  # Activate desktop streaming service
  desktop.stream.start()

  # Retrieve interactive VNC endpoint URL
  url = desktop.stream.get_url()
  print(url)
  # Expected output format:
  # Browser-accessible URL for interactive virtual desktop session. Suitable for application integration.
  # https://6080-ik0n7lc3j0dvqd4jxy6g7.us-phx-1.sandbox.novita.ai/vnc.html?autoconnect=true&resize=scale

  # Retrieve read-only VNC endpoint URL (interaction disabled)
  url_readonly = desktop.stream.get_url(view_only=True)
  print(url_readonly)
  # Expected output format:
  # Browser-accessible URL for view-only virtual desktop session (non-interactive mode). Suitable for monitoring applications.
  # https://6080-ik0n7lc3j0dvqd4jxy6g7.us-phx-1.sandbox.novita.ai/vnc.html?autoconnect=true&view_only=true&resize=scale

  # Implement keyboard interrupt handling for graceful shutdown
  try:
      print("Desktop stream started, press Ctrl+C to stop the program...")
      import time
      while True:
          time.sleep(0.1)
  except KeyboardInterrupt:
      print("\nProgram interrupted, cleaning up resources...")

  # Execute resource deallocation procedures
  desktop.stream.stop()  # Terminate streaming service
  desktop.kill()        # Deallocate sandbox instance
  ```
</CodeGroup>

Exemple d’exécution :

<img src="https://mintcdn.com/novitaai/bw8esg_Y_JmKJX-g/fr/guides/images/sbx-desktop-run-tsx.png?fit=max&auto=format&n=bw8esg_Y_JmKJX-g&q=85&s=78ee5c91504444c41e44955529a73fd4" alt="Exemple d’exécution" width="1200" data-path="fr/guides/images/sbx-desktop-run-tsx.png" />

Accéder à l’URL VNC du flux du bureau virtuel :

<img src="https://mintcdn.com/novitaai/bw8esg_Y_JmKJX-g/fr/guides/images/sbx-desktop-streaming.png?fit=max&auto=format&n=bw8esg_Y_JmKJX-g&q=85&s=76c88a3f52a33efb9a62b7039f5072bc" alt="Streaming du bureau" width="1200" data-path="fr/guides/images/sbx-desktop-streaming.png" />
