Skip to content

Instantly share code, notes, and snippets.

@emdnaia
Forked from HoKim98/Dockerfile
Created December 16, 2024 04:05
Show Gist options
  • Select an option

  • Save emdnaia/15b1784f5b756d46733317c1333a1185 to your computer and use it in GitHub Desktop.

Select an option

Save emdnaia/15b1784f5b756d46733317c1333a1185 to your computer and use it in GitHub Desktop.
Multi-screen (Multi-GPU) XFCE Settings
#!/bin/bash
# Copyright (c) 2023 Ho Kim ([email protected]). All rights reserved.
# Prehibit errors
set -e -o pipefail
# Verbose
set -x
# Configure command-line arguments
SCREEN=$1
# Set local variables
DESKTOP_HOME="${HOME}/desktop/${SCREEN}"
# Install nvidia-ctk and generate NVIDIA GPU CDI
sudo dnf install -y nvidia-container-toolkit-base
mkdir -p /etc/cdi
nvidia-ctk cdi generate --device-name-strategy=type-index --format=json >/etc/cdi/nvidia.json 2>/dev/null
# Create a container-wise home directory
mkdir -p "${DESKTOP_HOME}"
# Build a desktop environment image
docker build --tag desktop .
# Spawn a desktop environment per screen
podman run -d --privileged \
--device nvidia.com/gpu=all \
--env "DISPLAY=:0.${SCREEN}" \
--name "desktop-${SCREEN}" \
--net host \
--restart unless-stopped \
--volume "${DESKTOP_HOME}:/root:rw" \
--volume /tmp/.ICE-unix:/tmp/.ICE-unix:rw \
--volume /tmp/.X11-unix:/tmp/.X11-unix:rw \
--volume /var/lib/dbus/machine-id:/var/lib/dbus/machine-id:ro \
--user $(id -u) \
--group-add $(id -g) \
desktop
# Finished!
exec echo "OK!"
# Copyright (c) 2023 Ho Kim ([email protected]). All rights reserved.
# Configure environment variables
ARG ROCKYLINUX_VERSION="8"
# Be ready for serving
FROM "quay.io/rockylinux/rockylinux:${ROCKYLINUX_VERSION}" as base
# Install desktop environment dependencies
RUN dnf install -y \
epel-release \
&& dnf install -y \
dbus-x11 \
file-roller \
mesa-dri-drivers \
sqlite \
Thunar thunar-archive-plugin thunar-volman \
xfce4-appfinder xfce4-notifyd xfce4-panel xfce4-pulseaudio-plugin \
xfce4-session xfce4-settings xfce4-terminal \
xfconf xfdesktop xfwm4 \
# Cleanup
&& dnf clean all \
&& rm -rf /var/cache /var/log/dnf* /var/log/yum.*
# Execute xfce4-session after init
ENTRYPOINT [ "/usr/bin/env" ]
CMD [ "bash", "-c", "sleep 1; xfce4-session" ]
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" Below "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "0"
EndSection
Section "Files"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
# generated from default
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "NVIDIA TITAN V"
BusID "PCI:115:0:0"
EndSection
Section "Device"
Identifier "Device1"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "NVIDIA TITAN V"
BusID "PCI:166:0:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
DefaultDepth 24
Option "Stereo" "0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Device "Device1"
DefaultDepth 24
Option "Stereo" "0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment