From 310bca135d9a9c054ed438ee3565786f02021ec3 Mon Sep 17 00:00:00 2001 From: Dennis Buchhorn Date: Tue, 17 Jan 2023 10:12:37 +0100 Subject: [PATCH] [scripts] add xrdp_nvidia_setup --- scripts/xrdp_nvidia_setup | 89 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100755 scripts/xrdp_nvidia_setup diff --git a/scripts/xrdp_nvidia_setup b/scripts/xrdp_nvidia_setup new file mode 100755 index 0000000..fb30e37 --- /dev/null +++ b/scripts/xrdp_nvidia_setup @@ -0,0 +1,89 @@ +#!/usr/bin/env bash + +## originally copied from https://gist.githubusercontent.com/Nexarian/0eb26a3284b21b55b6e1e8653ed88ec9/raw/8faa8b0909b82a8c611cbbfe7663b4b66fa80373/xrdp-nvidia-setup.sh (2023-01-17) + +set -e + +cd ~ + +sudo -v + +# Make sure system is in a good, updated, clean, state. +sudo apt-get -y update +sudo apt-get -y dist-upgrade +sudo apt-get -y autoremove + +# Install CUDA (Shamelessly copied from Nvidia's website): +wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb +sudo dpkg -i cuda-keyring_1.0-1_all.deb +sudo apt-get update +sudo apt-get -y install cuda + +sudo usermod $USER -a -G video +sudo usermod $USER -a -G tty +sudo usermod $USER -a -G render + +# XRDP Build Pre-reqs Part 1 +sudo apt-get -y install git autoconf libtool pkg-config gcc g++ make \ + libssl-dev libpam0g-dev libjpeg-dev libx11-dev libxfixes-dev libxrandr-dev \ + flex bison libxml2-dev intltool xsltproc xutils-dev python3-libxml2 g++ \ + xutils libfuse-dev libmp3lame-dev nasm libpixman-1-dev xserver-xorg-dev \ + libjson-c-dev libsndfile1-dev libspeex-dev libspeexdsp-dev libpulse-dev \ + libpulse0 autopoint \*turbojpeg\* libfdk-aac-dev libopus-dev libgbm-dev \ + libx264\* libx264-dev + +#XRDP Build Pre-reqs Part 2 (For some reason apt needs this to be separate) +sudo apt-get -y install libepoxy-dev + +#System Pre-reqs +sudo apt-get -y install xorg xserver-xorg-legacy dbus-x11 +sudo apt-get -y remove dbus-user-session + +sudo tee /etc/X11/Xwrapper.config > /dev/null << EOL +# Xwrapper.config (Debian X Window System server wrapper configuration file) +# +# This file was generated by the post-installation script of the +# xserver-xorg-legacy package using values from the debconf database. +# +# See the Xwrapper.config(5) manual page for more information. +# +# This file is automatically updated on upgrades of the xserver-xorg-legacy +# package *only* if it has not been modified since the last upgrade of that +# package. +# +# If you have edited this file but would like it to be automatically updated +# again, run the following command as root: +# dpkg-reconfigure xserver-xorg-legacy +needs_root_rights=no +allowed_users=anybody +EOL + +BUILD_DIR=$(mktemp -d) + +echo "Building xrdp..." +git clone https://github.com/Nexarian/xrdp.git --branch mainline_merge "$BUILD_DIR/xrdp" +cd "$BUILD_DIR/xrdp" +./bootstrap +./configure --enable-fuse --enable-rfxcodec --enable-pixman --enable-mp3lame \ + --enable-sound --enable-opus --enable-fdkaac --enable-x264 --enable-nvenc +make -j $(nproc) clean all +sudo make install + +echo "Building xorgxrdp..." +git clone https://github.com/Nexarian/xorgxrdp.git --branch mainline_merge "$BUILD_DIR/xorgxrdp" +cd "$BUILD_DIR/xorgxrdp" +./bootstrap +./configure --with-simd --enable-lrandr +make -j $(nproc) clean all +sudo make install + +echo "Configuring Nvidia..." +BUS_ID=$(nvidia-smi --query-gpu=pci.bus --format=csv | sed -n '2 p' | xargs -I{} printf "%d\n" {}) +# Alternative method to get the BUS ID that doesn't work on some systems (Such as a laptop with an Intel iGPU and an Nvidia Discrete GPU). +# BUS_ID=$(lspci | grep -e 'VGA.*NVIDIA' | cut -d: -f1 | xargs -I{} printf "%d\n" 0x{} | sed -n 1p) +# nvidia-xconfig --query-gpu-info +sudo sed -i -E 's/(BusID "PCI:)[[:digit:]]+(:0:0")/\1'$BUS_ID'\2/' /etc/X11/xrdp/xorg_nvidia.conf + +echo "Starting the server..." +sudo systemctl enable xrdp +sudo service xrdp start