# OpenBox Browser Container (RDP & VNC)

Alpine-basierter Docker-Container mit OpenBox Window Manager, Firefox Browser und Fernzugriff via RDP und VNC.

## Schnellstart

1. `.env`-Datei anpassen:

```env
FIREFOX_HOMEPAGE=https://www.google.com
RDP_PASSWORD=dein-sicheres-passwort
```

2. Container starten:

```bash
docker compose up -d --build
```

3. Verbinden:

| Protokoll | Port | Passwort |
|-----------|------|----------|
| RDP | 3389 | `RDP_PASSWORD` aus `.env` |
| VNC | 5900 | `RDP_PASSWORD` aus `.env` |

- **RDP**: Windows Remotedesktop, Remmina, etc. (Benutzername wird ignoriert)
- **VNC**: TigerVNC Viewer, RealVNC, Remmina, etc.

Beide Protokolle zeigen die gleiche Session.

## Environment-Variablen

| Variable | Beschreibung | Standard |
|----------|-------------|----------|
| `FIREFOX_HOMEPAGE` | Firefox-Startseite | `https://www.google.com` |
| `RDP_PASSWORD` | Passwort fuer RDP- und VNC-Zugang | `changeme` |

## Persistenz

Firefox-Daten (Lesezeichen, Verlauf, Einstellungen, Cookies, etc.) werden im Ordner `firefox-data/` gespeichert und bleiben beim Neustart des Containers erhalten.

## OpenBox-Menu

Rechtsklick auf den Desktop oeffnet das Kontextmenue:

- **Firefox** - Startet Firefox mit der konfigurierten Startseite
- **Neustarten** - Startet die OpenBox-Session neu
- **Herunterfahren** - Beendet die OpenBox-Session

## Tastenkuerzel

| Kuerzel | Aktion |
|---------|--------|
| `Alt+F4` | Fenster schliessen |
| `Alt+Tab` | Fenster wechseln |
| `Alt+Linksklick` (Ziehen) | Fenster verschieben |
| `Alt+Rechtsklick` (Ziehen) | Fenster skalieren |
| Doppelklick Titelleiste | Fenster maximieren/wiederherstellen |

## Neubauen ohne Cache

```bash
docker compose down && docker compose build --no-cache && docker compose up -d
```

---

## Projektstruktur

```
.
├── .env                       # Environment-Variablen (Passwort, Startseite)
├── Dockerfile                 # Container-Image Definition
├── docker-compose.yml         # Service-Konfiguration
├── config/
│   ├── autostart.sh           # OpenBox Autostart-Skript
│   ├── menu.xml               # OpenBox Rechtsklick-Menue
│   ├── rc.xml                 # OpenBox Fenster-/Tastatur-/Maus-Konfiguration
│   ├── supervisord.conf       # Prozess-Management (Startreihenfolge)
│   └── xrdp.ini               # XRDP-Server Konfiguration
├── scripts/
│   ├── start.sh               # Container-Einstiegspunkt
│   └── set-password.sh        # Setzt Benutzerpasswort aus ENV
└── firefox-data/              # Persistente Firefox-Daten (Volume)
```

## Konfigurationsdateien im Detail

### config/supervisord.conf

Verwaltet alle Dienste im Container ueber Supervisor. Die Dienste starten in dieser Reihenfolge:

| Prioritaet | Dienst | Beschreibung |
|------------|--------|-------------|
| 5 | **Xvfb** | Virtueller Framebuffer (Display `:10`, 1920x1080, 24bit). Stellt den X11-Server bereit, ohne physische Grafikkarte. |
| 10 | **OpenBox** | Window Manager. Startet nach 2s auf Display `:10` als Benutzer `openbox`. Laedt `.bashrc` fuer Umgebungsvariablen. |
| 20 | **x11vnc** | VNC-Server. Startet nach 3s, verbindet sich mit Display `:10`. Passwortgeschuetzt, Port 5900, Shared-Modus. |
| 30 | **XRDP** | RDP-Server. Startet nach 4s, fungiert als RDP-zu-VNC Proxy auf Port 3389. |

Alle Dienste haben `autorestart=true` und werden bei Absturz automatisch neu gestartet. Die `sleep`-Verzoegerungen stellen sicher, dass jeder Dienst erst startet, wenn seine Abhaengigkeiten bereit sind.

### config/xrdp.ini

XRDP-Server Konfiguration. Arbeitet im **Proxy-Modus** - leitet RDP-Verbindungen an den lokalen x11vnc-Server weiter.

Wichtige Einstellungen:

| Einstellung | Wert | Beschreibung |
|-------------|------|-------------|
| `port` | 3389 | Standard-RDP Port |
| `security_layer` | rdp | RDP-Verschluesselung |
| `crypt_level` | high | Hohe Verschluesselungsstufe |
| `max_bpp` | 32 | Maximale Farbtiefe |
| `lib` | libvnc.so | VNC-Protokoll als Backend |
| `ip` | 127.0.0.1 | Verbindet zu lokalem VNC |
| `port` (Session) | 5900 | VNC-Port von x11vnc |

Channels wie Clipboard (`cliprdr`), Sound (`rdpsnd`) und Laufwerks-Umleitung (`rdpdr`) sind aktiviert.

### config/autostart.sh

Wird von OpenBox automatisch beim Sessionstart ausgefuehrt. Aufgaben:

1. **Energiesparmodus deaktivieren**:
   - `xset s off` - Bildschirmschoner aus
   - `xset s noblank` - Kein Bildschirm-Blanking
   - `xset -dpms` - Display Power Management aus (kein Standby/Suspend/Off)

2. **Firefox starten** mit der Startseite aus `FIREFOX_HOMEPAGE`

### config/menu.xml

Definiert das OpenBox-Rechtsklick-Kontextmenue mit vier Eintraegen:
- **Firefox** - Startet Firefox mit `--url "${FIREFOX_HOMEPAGE}"`
- **Terminal** - Oeffnet xterm
- **Neustarten** - `openbox --restart` (laedt OpenBox-Konfiguration neu)
- **Herunterfahren** - `openbox --exit` (beendet die Session)

### config/rc.xml

OpenBox Window Manager Konfiguration:
- **Theme**: Clearlooks mit Noto Sans Schriftart (Groesse 10)
- **Desktops**: 1 virtueller Desktop
- **Titelleiste**: NLIMC-Layout (Minimize, Maximize, Close Buttons)
- **Tastenkuerzel**: Alt+F4 (Schliessen), Alt+Tab (Wechseln)
- **Maus**: Rechtsklick auf Desktop oeffnet Menue, Titelleiste ziehbar, Doppelklick maximiert

### scripts/start.sh

Container-Einstiegspunkt. Fuehrt beim Start folgende Schritte aus:
1. Setzt das Benutzerpasswort aus `RDP_PASSWORD`
2. Erstellt VNC-Passwortdatei (gleiche wie RDP)
3. Schreibt `FIREFOX_HOMEPAGE` in `.bashrc` fuer die OpenBox-Session
4. Stellt korrekte Berechtigungen fuer Firefox-Daten sicher
5. Erstellt X11-Socket-Verzeichnis `/tmp/.X11-unix`
6. Generiert XRDP RSA-Schluessel (falls nicht vorhanden)
7. Startet Supervisor mit allen Diensten

### scripts/set-password.sh

Setzt das Passwort des Benutzers `openbox` aus der Environment-Variable `RDP_PASSWORD` via `chpasswd`.

## Architektur

```
                    ┌──────────────────────────────────┐
                    │         Docker Container         │
                    │                                  │
  RDP :3389 ──────> │  XRDP ──> x11vnc ──> Xvfb :10    │
                    │                       │          │
  VNC :5900 ──────> │  x11vnc ─────────> Xvfb :10      │
                    │                       │          │
                    │                    OpenBox       │
                    │                       │          │
                    │                    Firefox       │
                    └──────────────────────────────────┘
                                            │
                              ./firefox-data (Volume)
```
