26 Commits

Author SHA1 Message Date
Chris Richardson
06b3cdadb4 asd
Some checks failed
Main / Build arm64v8 image (push) Successful in 6m0s
Main / Push arm64v8 image (push) Successful in 2m2s
Main / Push manifest (push) Failing after 14s
Main / Publish GitHub release (push) Has been skipped
2025-07-11 01:38:08 -04:00
Chris Richardson
2ba5712784 asd
Some checks failed
Main / Build arm64v8 image (push) Successful in 4m13s
Main / Push arm64v8 image (push) Successful in 2m24s
Main / Push manifest (push) Failing after 14s
Main / Publish GitHub release (push) Has been skipped
2025-07-10 23:59:02 -04:00
Chris Richardson
0c21d5e626 asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 1m39s
Main / Push arm64v8 image (push) Has been skipped
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 23:52:56 -04:00
Chris Richardson
5be7976f0a asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 1m53s
Main / Push arm64v8 image (push) Has been skipped
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 23:45:31 -04:00
Chris Richardson
959769a05c asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 27s
Main / Push arm64v8 image (push) Has been skipped
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 23:40:16 -04:00
Chris Richardson
6883446078 asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 28s
Main / Push arm64v8 image (push) Has been skipped
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 23:32:56 -04:00
Chris Richardson
dc02217869 asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 22s
Main / Push arm64v8 image (push) Has been skipped
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 23:28:58 -04:00
Chris Richardson
968880f2cc asd
Some checks failed
Main / Build arm64v8 image (push) Successful in 10m46s
Main / Push arm64v8 image (push) Successful in 2m2s
Main / Push manifest (push) Failing after 16s
Main / Publish GitHub release (push) Has been skipped
2025-07-10 22:20:14 -04:00
Chris Richardson
01e08053a2 asd
Some checks failed
Main / Build arm64v8 image (push) Successful in 1m29s
Main / Push arm64v8 image (push) Failing after 1m7s
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 21:49:19 -04:00
Chris Richardson
6fd275c24b asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 1m1s
Main / Push arm64v8 image (push) Has been skipped
Main / Push manifest (push) Has been skipped
Main / Publish GitHub release (push) Has been skipped
2025-07-10 21:21:36 -04:00
Chris Richardson
f3294ccbdc asd
Some checks failed
Main / Build arm64v8 image (push) Successful in 8m59s
Main / Push arm64v8 image (push) Failing after 54s
2025-07-10 21:05:49 -04:00
Chris Richardson
5a9a1d969e asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 57s
Main / Push arm64v8 image (push) Has been skipped
2025-07-10 19:56:23 -04:00
Chris Richardson
71b2f80c3a asd
All checks were successful
Main / Build arm64v8 image (push) Successful in 1m1s
Main / Push arm64v8 image (push) Has been skipped
2025-07-10 19:47:49 -04:00
Chris Richardson
00e50f9bb5 asd
All checks were successful
Main / Build arm64v8 image (push) Successful in 10m5s
Main / Push arm64v8 image (push) Has been skipped
2025-07-10 19:29:08 -04:00
Chris Richardson
9b5bffe885 asd
All checks were successful
Main / Build arm64v8 image (push) Successful in 10m17s
Main / Push arm64v8 image (push) Has been skipped
2025-07-10 19:09:13 -04:00
Chris Richardson
106fc86664 asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 8m3s
Main / Push arm64v8 image (push) Has been skipped
2025-07-10 18:49:48 -04:00
Chris Richardson
b11206ea40 asd
Some checks failed
Main / Build arm64v8 image (push) Failing after 1m12s
Main / Push arm64v8 image (push) Has been skipped
2025-07-10 18:26:50 -04:00
Héctor Molinero Fernández
208f30a208 v126 2025-06-21 13:50:39 +02:00
Héctor Molinero Fernández
933f557a3e Disable glx module if /dev/dri/ does not exist 2025-06-21 13:49:35 +02:00
Héctor Molinero Fernández
4a45adaa58 Use dummy driver in headless Xorg 2025-06-21 13:49:26 +02:00
Héctor Molinero Fernández
558f1ec368 Fix service enabling conditions for xrdp bootstrap and headless X server 2025-06-21 12:43:03 +02:00
Héctor Molinero Fernández
29799461a9 v125 2025-06-13 01:09:47 +02:00
Héctor Molinero Fernández
a0a0b44fdc Add wlfreerdp script 2025-06-13 01:09:39 +02:00
Héctor Molinero Fernández
cdbd8bdcec Update xrdp PulseAudio module to v0.8 2025-06-13 01:04:09 +02:00
Héctor Molinero Fernández
fad6c80479 Update xorgxrdp to v0.10.4 2025-06-13 01:01:58 +02:00
Héctor Molinero Fernández
bf90f2e2c9 Update xrdp to v0.10.3 2025-06-13 01:00:56 +02:00
8 changed files with 121 additions and 80 deletions

View File

@@ -19,7 +19,7 @@ jobs:
contents: "read"
strategy:
matrix:
arch: ["native", "amd64", "arm64v8"]
arch: ["arm64v8"]
steps:
- name: "Checkout project"
uses: "actions/checkout@v4"
@@ -32,7 +32,7 @@ jobs:
make IMAGE_BUILD_OPTS="--pull" "build-${{ matrix.arch }}-image" "save-${{ matrix.arch }}-image"
- name: "Upload artifacts"
if: "startsWith(github.ref, 'refs/tags/v') && matrix.arch != 'native'"
uses: "actions/upload-artifact@v4"
uses: "christopherhx/gitea-upload-artifact@v4"
with:
name: "dist-${{ matrix.arch }}"
path: "./dist/"
@@ -47,21 +47,19 @@ jobs:
contents: "read"
strategy:
matrix:
arch: ["amd64", "arm64v8"]
arch: ["arm64v8"]
steps:
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Download artifacts"
uses: "actions/download-artifact@v4"
uses: "christopherhx/gitea-download-artifact@v4"
with:
name: "dist-${{ matrix.arch }}"
path: "./dist/"
- name: "Login to Docker Hub"
uses: "docker/login-action@v3"
with:
registry: "docker.io"
username: "${{ secrets.DOCKERHUB_USERNAME }}"
password: "${{ secrets.DOCKERHUB_TOKEN }}"
# - name: "Login to Docker Hub"
# uses: "docker/login-action@v3"
# with:
# registry: "d.lilpenguins.com"
- name: "Load and push image"
run: |
make "load-${{ matrix.arch }}-image" "push-${{ matrix.arch }}-image"
@@ -76,12 +74,10 @@ jobs:
steps:
- name: "Checkout project"
uses: "actions/checkout@v4"
- name: "Login to Docker Hub"
uses: "docker/login-action@v3"
with:
registry: "docker.io"
username: "${{ secrets.DOCKERHUB_USERNAME }}"
password: "${{ secrets.DOCKERHUB_TOKEN }}"
# - name: "Login to Docker Hub"
# uses: "docker/login-action@v3"
# with:
# registry: "d.lilpenguins.com"
- name: "Push manifest"
run: |
make push-cross-manifest

View File

@@ -1,22 +1,22 @@
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
name: "Rebuild latest release"
#name: "Rebuild latest release"
on:
schedule:
- cron: "20 04 * * 1"
workflow_dispatch:
#on:
# schedule:
# - cron: "20 04 * * 1"
# workflow_dispatch:
permissions: {}
#permissions: {}
jobs:
trigger-rebuild:
name: "Trigger rebuild"
runs-on: "ubuntu-latest"
permissions:
actions: "write"
contents: "read"
steps:
- name: "Trigger rebuild"
uses: "hectorm/ghaction-trigger-workflow@04c79e7a4e0c0b94bbcff3829f38359e34f1ea9e"
with:
workflow-id: "main.yml"
#jobs:
# trigger-rebuild:
# name: "Trigger rebuild"
# runs-on: "ubuntu-latest"
# permissions:
# actions: "write"
# contents: "read"
# steps:
# - name: "Trigger rebuild"
# uses: "hectorm/ghaction-trigger-workflow@04c79e7a4e0c0b94bbcff3829f38359e34f1ea9e"
# with:
# workflow-id: "main.yml"

View File

@@ -4,13 +4,14 @@ m4_changequote([[, ]])
## "build" stage
##################################################
m4_ifdef([[CROSS_ARCH]], [[FROM docker.io/CROSS_ARCH/ubuntu:24.04]], [[FROM docker.io/ubuntu:24.04]]) AS build
m4_ifdef([[CROSS_ARCH]], [[FROM dtcooper/raspberrypi-os:latest]], [[FROM dtcooper/raspberrypi-os:latest]]) AS build
SHELL ["/bin/sh", "-euc"]
# Enable source repositories
RUN <<-EOF
sed -i '/^Types: deb$/s/$/ deb-src/' /etc/apt/sources.list.d/ubuntu.sources
sed -i '/^Types: deb$/s/$/ deb-src/' /etc/apt/sources.list.d/debian.sources
sed -i '/^Components: main$/s/$/ contrib non-free non-free-firmware/' /etc/apt/sources.list.d/debian.sources
EOF
# Install packages
@@ -26,11 +27,13 @@ RUN <<-EOF
cmake \
dbus-x11 \
devscripts \
doxygen \
dpkg-dev \
flex \
git \
intltool \
libbz2-dev \
libdrm-dev \
libegl-dev \
libegl1-mesa-dev \
libepoxy-dev \
@@ -73,6 +76,7 @@ RUN <<-EOF
x11-xkb-utils \
xauth \
xkb-data \
xserver-xorg-core \
xserver-xorg-dev \
xsltproc \
xutils-dev \
@@ -154,7 +158,7 @@ RUN <<-EOF
EOF
# Build xrdp
ARG XRDP_TREEISH=v0.10.2
ARG XRDP_TREEISH=v0.10.3
ARG XRDP_REMOTE=https://github.com/neutrinolabs/xrdp.git
WORKDIR /tmp/xrdp/
RUN <<-EOF
@@ -186,7 +190,7 @@ RUN <<-EOF
EOF
# Build xorgxrdp
ARG XORGXRDP_TREEISH=v0.10.3
ARG XORGXRDP_TREEISH=v0.10.4
ARG XORGXRDP_REMOTE=https://github.com/neutrinolabs/xorgxrdp.git
WORKDIR /tmp/xorgxrdp/
RUN <<-EOF
@@ -205,7 +209,7 @@ RUN <<-EOF
EOF
# Build xrdp PulseAudio module
ARG XRDP_PULSEAUDIO_TREEISH=v0.7
ARG XRDP_PULSEAUDIO_TREEISH=v0.8
ARG XRDP_PULSEAUDIO_REMOTE=https://github.com/neutrinolabs/pulseaudio-module-xrdp.git
WORKDIR /tmp/
RUN <<-EOF
@@ -233,7 +237,7 @@ EOF
## "main" stage
##################################################
m4_ifdef([[CROSS_ARCH]], [[FROM docker.io/CROSS_ARCH/ubuntu:24.04]], [[FROM docker.io/ubuntu:24.04]]) AS main
m4_ifdef([[CROSS_ARCH]], [[FROM dtcooper/raspberrypi-os:latest]], [[FROM dtcooper/raspberrypi-os:latest]]) AS main
SHELL ["/bin/sh", "-euc"]
@@ -244,6 +248,11 @@ RUN <<-EOF
find /etc/apt/preferences.d/ -type f -not -perm 0644 -exec chmod 0644 '{}' ';'
EOF
RUN <<-EOF
sed -i '/^Types: deb$/s/$/ deb-src/' /etc/apt/sources.list.d/debian.sources
sed -i '/^Components: main$/s/$/ contrib non-free non-free-firmware/' /etc/apt/sources.list.d/debian.sources
EOF
# Install base packages
RUN <<-EOF
export DEBIAN_FRONTEND=noninteractive
@@ -266,6 +275,8 @@ RUN <<-EOF
libgl1 \
libgl1-mesa-dri \
libgles2 \
libgles2-mesa \
libgles2-mesa-dev \
libglu1 \
libglvnd0 \
libglx-mesa0 \
@@ -275,7 +286,7 @@ RUN <<-EOF
libpam0g \
libpixman-1-0 \
libpulse0 \
libssl3t64 \
libssl3 \
libsystemd0 \
libx11-6 \
libx11-xcb1 \
@@ -288,7 +299,7 @@ RUN <<-EOF
libxml2 \
libxrandr2 \
libxshmfence1 \
libxt6t64 \
libxt6 \
libxtst6 \
libxv1 \
locales \
@@ -315,6 +326,7 @@ RUN <<-EOF
xserver-xorg-video-dummy \
xserver-xorg-video-fbdev \
xserver-xorg-video-vesa \
xorg-dev \
zlib1g
m4_ifelse(ENABLE_AMD_SUPPORT, 1, [[m4_dnl
apt-get install -y --no-install-recommends -o APT::Immediate-Configure=0 \
@@ -378,8 +390,7 @@ RUN <<-EOF
gnome-keyring \
gtk2-engines-pixbuf \
htop \
indicator-application \
indicator-messages \
ayatana-indicator-messages \
iproute2 \
iputils-ping \
libavcodec-extra \
@@ -434,7 +445,7 @@ RUN <<-EOF
xfonts-base \
xinput \
xterm \
xubuntu-default-settings \
debian-mate-default-settings \
xutils \
xz-utils \
zenity \

View File

@@ -10,8 +10,8 @@ M4 := $(shell command -v m4 2>/dev/null)
DISTDIR := ./dist
DOCKERFILE_TEMPLATE := ./Dockerfile.m4
IMAGE_REGISTRY := docker.io
IMAGE_NAMESPACE := hectorm
IMAGE_REGISTRY := d.lilpenguins.com
IMAGE_NAMESPACE := desktop
IMAGE_PROJECT := xubuntu
IMAGE_NAME := $(IMAGE_REGISTRY)/$(IMAGE_NAMESPACE)/$(IMAGE_PROJECT)
ifeq ($(shell '$(GIT)' status --porcelain 2>/dev/null),)

View File

@@ -1,20 +1,15 @@
#!/bin/sh
if [ -z "${VGL_DISPLAY-}" ]; then
# Use the dummy X server if it is enabled
if [ "${SERVICE_XORG_HEADLESS_ENABLED:?}" = 'true' ]; then
export VGL_DISPLAY=:0.0
else
# Otherwise try to use the EGL backend
for card in /dev/dri/card*; do
if /opt/VirtualGL/bin/eglinfo -B "${card:?}" 2>/dev/null; then
export VGL_DISPLAY="${card:?}"
break
fi
done
# And fallback to DISPLAY if the EGL backend is not available
if [ -z "${VGL_DISPLAY-}" ] && [ -n "${DISPLAY-}" ]; then
export VGL_DISPLAY="${DISPLAY:?}"
# Try to use the EGL backend
for card in /dev/dri/card*; do
if /opt/VirtualGL/bin/eglinfo -B "${card:?}" 2>/dev/null; then
export VGL_DISPLAY="${card:?}"
break
fi
done
# And fallback to DISPLAY if the EGL backend is not available
if [ -z "${VGL_DISPLAY-}" ] && [ -n "${DISPLAY-}" ]; then
export VGL_DISPLAY="${DISPLAY:?}"
fi
fi

View File

@@ -1,30 +1,20 @@
Section "Module"
Load "xorgxrdp"
EndSection
Section "ServerLayout"
Identifier "ServerLayout0"
Screen "Screen0"
Disable "glx"
EndSection
Section "ServerFlags"
Option "DefaultServerLayout" "ServerLayout0"
Option "DontVTSwitch" "on"
Option "PciForceNone" "on"
Option "AutoAddDevices" "off"
Option "AutoAddGPU" "off"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Unknown"
ModelName "Unknown"
EndSection
Section "Device"
Identifier "Device0"
Driver "xrdpdev"
Option "DRMDevice" "/dev/dri/renderD128"
Option "DRI3" "1"
Section "ServerLayout"
Identifier "ServerLayout0"
Screen "Screen0"
InputDevice "Keyboard0"
InputDevice "Mouse0"
EndSection
Section "Screen"
@@ -35,3 +25,26 @@ Section "Screen"
Modes "800x600"
EndSubSection
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Unknown"
ModelName "Unknown"
EndSection
Section "Device"
Identifier "Device0"
Driver "dummy"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "void"
Option "CoreKeyboard" "true"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "void"
Option "CorePointer" "true"
EndSection

View File

@@ -67,13 +67,19 @@ if [ ! -d /run/user/"${UNPRIVILEGED_USER_UID:?}"/ ]; then
chown "${UNPRIVILEGED_USER_NAME:?}:" /run/user/"${UNPRIVILEGED_USER_UID:?}"/
fi
# Disable glx module if /dev/dri/ does not exist
if [ ! -d /dev/dri/ ]; then
printf '%s\n' '"/dev/dri/" does not exist, glx module will be disabled' 1>&2
sed -i 's|Load \("glx"\)|Disable \1|g' /opt/xrdp/etc/X11/xrdp/xorg.conf
fi
# Enable xrdp bootstrap service
if [ "${SERVICE_XRDP_BOOTSTRAP_ENABLED:?}" = 'true' ]; then
if [ "${SERVICE_XRDP_BOOTSTRAP_ENABLED:?}" = 'true' ] && [ ! -L "${SVDIR:?}"/xrdp-bootstrap ]; then
ln -s /etc/sv/xrdp-bootstrap "${SVDIR:?}"
fi
# Enable headless X server service
if [ "${SERVICE_XORG_HEADLESS_ENABLED:?}" = 'true' ]; then
if [ "${SERVICE_XORG_HEADLESS_ENABLED:?}" = 'true' ] && [ ! -L "${SVDIR:?}"/xorg-headless ]; then
ln -s /etc/sv/xorg-headless "${SVDIR:?}"
fi

20
wlfreerdp.sh Executable file
View File

@@ -0,0 +1,20 @@
#!/bin/sh
set -eu
export LC_ALL=C
RDP_HOST=127.0.0.1
RDP_PORT=3389
RDP_DOMAIN=Xorg
RDP_USER=user
RDP_PASSWORD=password
exec wlfreerdp3 \
/v:"${RDP_HOST:?}":"${RDP_PORT:?}" \
/u:"${RDP_DOMAIN:?}"\\"${RDP_USER:?}" /p:"${RDP_PASSWORD:?}" \
/log-level:INFO /cert:ignore \
/gfx:AVC444v2 /bpp:32 /dynamic-resolution \
/audio-mode:0 /sound:sys:pulse,rate:44100 \
/microphone:sys:pulse,rate:44100 \
+clipboard +home-drive \
-compression -encryption