From 475ed08b947a945cc76a167432304e557c599e7d Mon Sep 17 00:00:00 2001 From: Stefan Hacker Date: Fri, 13 Feb 2026 08:15:17 +0100 Subject: [PATCH] first commit --- Dockerfile | 38 ++++++++++++++++++++++++++++ README.md | 54 ++++++++++++++++++++++++++++++++++++++++ config/openbox/autostart | 1 + config/openbox/menu.xml | 14 +++++++++++ config/openbox/rc.xml | 34 +++++++++++++++++++++++++ config/startwm.sh | 13 ++++++++++ docker-compose.yml | 12 +++++++++ entrypoint.sh | 36 +++++++++++++++++++++++++++ 8 files changed, 202 insertions(+) create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 config/openbox/autostart create mode 100644 config/openbox/menu.xml create mode 100644 config/openbox/rc.xml create mode 100644 config/startwm.sh create mode 100644 docker-compose.yml create mode 100755 entrypoint.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8f61d6d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +FROM alpine:3.21 + +RUN apk add --no-cache \ + xrdp \ + xorgxrdp \ + openbox \ + xorg-server \ + xf86-video-dummy \ + font-noto \ + dbus \ + firefox \ + mesa-dri-gallium \ + ttf-freefont \ + openssl \ + && rm -rf /var/cache/apk/* + +# Create rdpuser +RUN adduser -D -s /bin/sh rdpuser \ + && adduser rdpuser wheel + +# Configure xrdp to use Xorg +RUN sed -i 's/^#\?security_layer=.*/security_layer=tls/' /etc/xrdp/xrdp.ini \ + && sed -i 's/^#\?crypt_level=.*/crypt_level=high/' /etc/xrdp/xrdp.ini \ + && sed -i 's|^#\?param=Xorg|param=Xorg|' /etc/xrdp/sesman.ini + +# Xorg wrapper for xrdp sessions +COPY config/startwm.sh /etc/xrdp/startwm.sh +RUN chmod +x /etc/xrdp/startwm.sh + +# Openbox config for rdpuser +COPY config/openbox/ /home/rdpuser/.config/openbox/ +RUN chown -R rdpuser:rdpuser /home/rdpuser + +COPY entrypoint.sh /entrypoint.sh + +EXPOSE 3389 + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..534ab19 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# Alpine RDP with Openbox & Firefox + +Minimaler Docker-Container basierend auf Alpine Linux mit xrdp, Openbox und Firefox. + +## Voraussetzungen + +- Docker +- Docker Compose + +## Konfiguration + +`.env`-Datei anlegen (siehe `.env.example`): + +```env +RDP_PASSWORD=Start1234! +FIREFOX_URL=https://www.google.de +``` + +| Variable | Beschreibung | +|---|---| +| `RDP_PASSWORD` | Passwort fuer den RDP-Benutzer `rdpuser` | +| `FIREFOX_URL` | Startseite, die Firefox beim Oeffnen laedt | + +## Starten + +```bash +docker compose up -d --build +``` + +## Verbinden + +Per RDP-Client (z.B. Remmina, mstsc) verbinden: + +- **Host:** `localhost` +- **Port:** `3389` +- **Benutzer:** `rdpuser` +- **Passwort:** wie in `.env` gesetzt + +## Openbox-Menue + +Rechtsklick auf den Desktop oeffnet das Menue: + +- **Firefox** - Browser mit konfigurierter Startseite +- **Logoff** - Sitzung beenden + +## Persistenz + +Firefox-Profildaten werden im Ordner `./firefox-data` gespeichert und bleiben bei Container-Neustarts erhalten. + +## Stoppen + +```bash +docker compose down +``` diff --git a/config/openbox/autostart b/config/openbox/autostart new file mode 100644 index 0000000..2e86303 --- /dev/null +++ b/config/openbox/autostart @@ -0,0 +1 @@ +firefox & diff --git a/config/openbox/menu.xml b/config/openbox/menu.xml new file mode 100644 index 0000000..af67437 --- /dev/null +++ b/config/openbox/menu.xml @@ -0,0 +1,14 @@ + + + + + + firefox + + + + + + + + diff --git a/config/openbox/rc.xml b/config/openbox/rc.xml new file mode 100644 index 0000000..939a892 --- /dev/null +++ b/config/openbox/rc.xml @@ -0,0 +1,34 @@ + + + + 10 + 20 + + + yes + no + + + Clearlooks + + + menu.xml + + + 1 + + + + + + root-menu + + + + + + + yes + + + diff --git a/config/startwm.sh b/config/startwm.sh new file mode 100644 index 0000000..3d5d53e --- /dev/null +++ b/config/startwm.sh @@ -0,0 +1,13 @@ +#!/bin/sh +export DISPLAY=${DISPLAY:-:10} + +if [ -r /etc/profile ]; then + . /etc/profile +fi + +# Start dbus session +if command -v dbus-launch >/dev/null 2>&1; then + eval $(dbus-launch --sh-syntax) +fi + +exec openbox-session diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..223efe4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,12 @@ +services: + alpine-rdp: + build: . + container_name: alpine-rdp-firefox + environment: + - RDP_PASSWORD=${RDP_PASSWORD} + - FIREFOX_URL=${FIREFOX_URL} + network_mode: host + volumes: + - ./firefox-data:/home/rdpuser/.mozilla/firefox + shm_size: "1g" + restart: unless-stopped diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..c478767 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,36 @@ +#!/bin/sh +set -e + +USERNAME="rdpuser" +PASSWORD="${RDP_PASSWORD:-changeme}" +FIREFOX_URL="${FIREFOX_URL:-https://www.google.com}" + +# Set password for rdpuser +echo "${USERNAME}:${PASSWORD}" | chpasswd + +# Ensure firefox profile dir has correct ownership (volume mount) +mkdir -p "/home/${USERNAME}/.mozilla/firefox" +chown -R "${USERNAME}:${USERNAME}" "/home/${USERNAME}/.mozilla" + +# Create autoconfig files for Firefox default homepage +cat > /usr/lib/firefox/defaults/pref/autoconfig.js < /usr/lib/firefox/firefox.cfg <