first commit

This commit is contained in:
Stefan Hacker 2026-02-13 08:15:17 +01:00
commit 475ed08b94
8 changed files with 202 additions and 0 deletions

38
Dockerfile Normal file
View File

@ -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"]

54
README.md Normal file
View File

@ -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
```

1
config/openbox/autostart Normal file
View File

@ -0,0 +1 @@
firefox &

14
config/openbox/menu.xml Normal file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<openbox_menu xmlns="http://openbox.org/3.4/menu">
<menu id="root-menu" label="Menu">
<item label="Firefox">
<action name="Execute">
<execute>firefox</execute>
</action>
</item>
<separator/>
<item label="Logoff">
<action name="Exit"/>
</item>
</menu>
</openbox_menu>

34
config/openbox/rc.xml Normal file
View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<openbox_config xmlns="http://openbox.org/3.4/rc">
<resistance>
<strength>10</strength>
<screen_edge_strength>20</screen_edge_strength>
</resistance>
<focus>
<focusNew>yes</focusNew>
<followMouse>no</followMouse>
</focus>
<theme>
<name>Clearlooks</name>
</theme>
<menu>
<file>menu.xml</file>
</menu>
<desktops>
<number>1</number>
</desktops>
<mouse>
<context name="Root">
<mousebind button="Right" action="Press">
<action name="ShowMenu">
<menu>root-menu</menu>
</action>
</mousebind>
</context>
</mouse>
<applications>
<application class="*">
<maximized>yes</maximized>
</application>
</applications>
</openbox_config>

13
config/startwm.sh Normal file
View File

@ -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

12
docker-compose.yml Normal file
View File

@ -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

36
entrypoint.sh Executable file
View File

@ -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 <<EOF
pref("general.config.filename", "firefox.cfg");
pref("general.config.obscure_value", 0);
EOF
cat > /usr/lib/firefox/firefox.cfg <<EOF
// Firefox configuration
defaultPref("browser.startup.homepage", "${FIREFOX_URL}");
defaultPref("browser.startup.page", 1);
EOF
chown -R "${USERNAME}:${USERNAME}" "/home/${USERNAME}"
# Generate xrdp keys if missing
if [ ! -f /etc/xrdp/rsakeys.ini ]; then
xrdp-keygen xrdp /etc/xrdp/rsakeys.ini
fi
# Start xrdp services
xrdp-sesman --nodaemon &
exec xrdp --nodaemon