diff --git a/Dockerfile.m4 b/Dockerfile.m4 index 95c10a9..e4c1e89 100644 --- a/Dockerfile.m4 +++ b/Dockerfile.m4 @@ -27,11 +27,13 @@ m4_ifelse(ENABLE_32BIT_SUPPORT, 1, [[m4_dnl flex \ git \ intltool \ + libbz2-dev \ libegl-dev \ libegl1-mesa \ libegl1-mesa-dev \ libepoxy-dev \ libfdk-aac-dev \ + libfreetype-dev \ libfuse-dev \ libgbm-dev \ libgl-dev \ @@ -56,15 +58,20 @@ m4_ifelse(ENABLE_32BIT_SUPPORT, 1, [[m4_dnl libxfixes-dev \ libxml2-dev \ libxrandr-dev \ + libxt-dev \ libxtst-dev \ libxv-dev \ nasm \ ocl-icd-opencl-dev \ pkg-config \ texinfo \ + x11-xkb-utils \ + xauth \ + xkb-data \ xserver-xorg-dev \ xsltproc \ xutils-dev \ + zlib1g-dev \ m4_ifelse(ENABLE_32BIT_SUPPORT, 1, [[m4_dnl && apt-get install -y --no-install-recommends -o APT::Immediate-Configure=0 \ g++-multilib \ @@ -163,6 +170,36 @@ RUN make deb RUN dpkg -i ./virtualgl32_*.deb ]])m4_dnl +# Build TurboVNC +ARG TURBOVNC_TREEISH=3.0beta1 +ARG TURBOVNC_REMOTE=https://github.com/TurboVNC/turbovnc.git +RUN mkdir /tmp/turbovnc/ +WORKDIR /tmp/turbovnc/ +RUN git clone "${TURBOVNC_REMOTE:?}" ./ +RUN git checkout "${TURBOVNC_TREEISH:?}" +RUN git submodule update --init --recursive +RUN mkdir /tmp/turbovnc/build/ +WORKDIR /tmp/turbovnc/build/ +RUN cmake ./ \ + -G 'Unix Makefiles' \ + -D PKGNAME=turbovnc \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/opt/TurboVNC \ + -D TVNC_BUILDSERVER=1 \ + -D TVNC_BUILDWEBSERVER=0 \ + -D TVNC_BUILDVIEWER=0 \ + -D TVNC_BUILDHELPER=0 \ + -D TVNC_SYSTEMLIBS=1 \ + -D TVNC_SYSTEMX11=1 \ + -D TVNC_DLOPENSSL=1 \ + -D TVNC_USEPAM=1 \ + -D TVNC_GLX=1 \ + -D TVNC_NVCONTROL=1 \ + ../ +RUN make -j"$(nproc)" +RUN make deb +RUN dpkg -i ./turbovnc_*.deb + # Build xrdp ARG XRDP_TREEISH=v0.9.17 ARG XRDP_REMOTE=https://github.com/neutrinolabs/xrdp.git @@ -233,10 +270,12 @@ m4_ifelse(ENABLE_32BIT_SUPPORT, 1, [[m4_dnl ca-certificates \ dbus \ dbus-x11 \ + libbz2-1.0 \ libegl1 \ libegl1-mesa \ libepoxy0 \ libfdk-aac1 \ + libfreetype6 \ libfuse2 \ libgbm1 \ libgl1 \ @@ -261,6 +300,7 @@ m4_ifelse(ENABLE_32BIT_SUPPORT, 1, [[m4_dnl libxfixes3 \ libxml2 \ libxrandr2 \ + libxt6 \ libxtst6 \ libxv1 \ locales \ @@ -277,6 +317,9 @@ m4_ifelse(ENABLE_32BIT_SUPPORT, 1, [[m4_dnl runit \ tini \ tzdata \ + x11-xkb-utils \ + xauth \ + xkb-data \ xserver-xorg-core \ xserver-xorg-input-evdev \ xserver-xorg-input-joystick \ @@ -284,6 +327,7 @@ m4_ifelse(ENABLE_32BIT_SUPPORT, 1, [[m4_dnl xserver-xorg-video-dummy \ xserver-xorg-video-fbdev \ xserver-xorg-video-vesa \ + zlib1g \ m4_ifelse(ENABLE_32BIT_SUPPORT, 1, [[m4_dnl && apt-get install -y --no-install-recommends -o APT::Immediate-Configure=0 \ libegl1:i386 \ @@ -446,6 +490,10 @@ COPY --from=build --chown=root:root /tmp/virtualgl/build32/virtualgl32_*.deb /op RUN dpkg -i /opt/pkg/virtualgl32.deb ]])m4_dnl +# Install TurboVNC from package +COPY --from=build --chown=root:root /tmp/turbovnc/build/turbovnc_*.deb /opt/pkg/turbovnc.deb +RUN dpkg -i /opt/pkg/turbovnc.deb + # Install xrdp from package COPY --from=build --chown=root:root /tmp/xrdp/xrdp_*.deb /opt/pkg/xrdp.deb RUN dpkg -i /opt/pkg/xrdp.deb @@ -483,7 +531,7 @@ RUN printf '%s\n' "${TZ:?}" > /etc/timezone \ # Setup PATH ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games -ENV PATH=/opt/VirtualGL/bin:${PATH} +ENV PATH=/opt/libjpeg-turbo/bin:/opt/VirtualGL/bin:/opt/TurboVNC/bin:${PATH} # Setup D-Bus RUN mkdir /run/dbus/ && chown messagebus:messagebus /run/dbus/ diff --git a/config/xrdp/sesman.ini b/config/xrdp/sesman.ini index 7b3c831..16dc072 100644 --- a/config/xrdp/sesman.ini +++ b/config/xrdp/sesman.ini @@ -22,7 +22,7 @@ Policy=Default [Logging] LogFile=/var/log/xrdp-sesman.log LogLevel=INFO -EnableSyslog=0 +EnableSyslog=false SyslogLevel=INFO [Xorg] @@ -33,6 +33,15 @@ param=-noreset param=-nolisten param=tcp +[Xvnc] +param=/opt/TurboVNC/bin/Xvnc +param=-bs +param=-nolisten +param=tcp +param=-localhost +param=-dpi +param=96 + [Chansrv] EnableFuseMount=true FuseMountName=.thinclient_drives diff --git a/config/xrdp/xrdp.ini b/config/xrdp/xrdp.ini index b0c319f..5451728 100644 --- a/config/xrdp/xrdp.ini +++ b/config/xrdp/xrdp.ini @@ -1,17 +1,17 @@ [Globals] ini_version=1 fork=true -address=0.0.0.0 port=3389 use_vsock=false -tcp_nodelay=true +tcp_nodelay=false tcp_keepalive=true security_layer=tls +crypt_level=high key_file=/etc/xrdp/key.pem certificate=/etc/xrdp/cert.pem ssl_protocols=TLSv1.2, TLSv1.3 tls_ciphers=HIGH -autorun=Xorg +autorun= allow_channels=true allow_multimon=true bitmap_cache=true @@ -67,10 +67,10 @@ ip=127.0.0.1 port=-1 code=20 -;[Xvnc] -;name=Xvnc -;lib=libvnc.so -;username=ask -;password=ask -;ip=127.0.0.1 -;port=-1 +[Xvnc] +name=Xvnc +lib=libvnc.so +username=ask +password=ask +ip=127.0.0.1 +port=-1 diff --git a/xfreerdp.sh b/xfreerdp.sh index 8442f37..923b337 100755 --- a/xfreerdp.sh +++ b/xfreerdp.sh @@ -5,12 +5,13 @@ export LC_ALL=C RDP_HOST=127.0.0.1 RDP_PORT=3389 +RDP_DOMAIN=Xorg RDP_USER=user RDP_PASSWORD=password exec xfreerdp \ /v:"${RDP_HOST:?}":"${RDP_PORT:?}" \ - /u:"${RDP_USER:?}" /p:"${RDP_PASSWORD:?}" \ + /u:"${RDP_DOMAIN:?}"\\"${RDP_USER:?}" /p:"${RDP_PASSWORD:?}" \ /log-level:INFO /cert:ignore \ /rfx /rfx-mode:video /dynamic-resolution \ /audio-mode:0 /sound:sys:pulse,rate:44100 \