Improvements toward working with a shared host X server

This commit is contained in:
Josh.5
2022-01-12 09:16:06 +13:00
parent 55dfce5e6a
commit 8e877e3762
17 changed files with 336 additions and 218 deletions

View File

@@ -14,7 +14,7 @@ RUN \
&& apt-get update \ && apt-get update \
&& \ && \
echo "**** Install and configure locals ****" \ echo "**** Install and configure locals ****" \
&& apt-get -y install --no-install-recommends \ && apt-get install -y --no-install-recommends \
locales \ locales \
procps \ procps \
&& echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen \ && echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen \
@@ -40,7 +40,7 @@ RUN \
&& apt-get update \ && apt-get update \
&& \ && \
echo "**** Install certificates ****" \ echo "**** Install certificates ****" \
&& apt-get -y install --reinstall \ && apt-get install -y --reinstall \
ca-certificates \ ca-certificates \
&& \ && \
echo "**** Section cleanup ****" \ echo "**** Section cleanup ****" \
@@ -59,7 +59,7 @@ RUN \
&& apt-get update \ && apt-get update \
&& \ && \
echo "**** Install tools ****" \ echo "**** Install tools ****" \
&& apt-get -y install \ && apt-get install -y \
bash \ bash \
bash-completion \ bash-completion \
gcc \ gcc \
@@ -68,9 +68,12 @@ RUN \
less \ less \
make \ make \
nano \ nano \
rsync \
sudo \ sudo \
unzip \
vim \ vim \
wget \ wget \
xz-utils \
&& \ && \
echo "**** Section cleanup ****" \ echo "**** Section cleanup ****" \
&& apt-get clean autoclean -y \ && apt-get clean autoclean -y \
@@ -87,8 +90,9 @@ RUN \
echo "**** Update apt database ****" \ echo "**** Update apt database ****" \
&& apt-get update \ && apt-get update \
&& \ && \
echo "**** Install desktop requirements ****" \ echo "**** Install X Server requirements ****" \
&& apt-get -y install --no-install-recommends \ && apt-get install -y --no-install-recommends \
avahi-utils \
dbus-x11 \ dbus-x11 \
libxcomposite-dev \ libxcomposite-dev \
libxcursor1 \ libxcursor1 \
@@ -100,11 +104,14 @@ RUN \
python3 \ python3 \
python3-numpy \ python3-numpy \
python3-setuptools \ python3-setuptools \
rsync \
x11vnc \ x11vnc \
xauth \ xauth \
xfonts-base \
xorg \ xorg \
xserver-xorg-core \
xserver-xorg-input-libinput \
xserver-xorg-legacy \ xserver-xorg-legacy \
xserver-xorg-video-all \
xvfb \ xvfb \
&& \ && \
echo "**** Section cleanup ****" \ echo "**** Section cleanup ****" \
@@ -123,7 +130,7 @@ RUN \
&& apt-get update \ && apt-get update \
&& \ && \
echo "**** Install supervisor ****" \ echo "**** Install supervisor ****" \
&& apt-get -y install \ && apt-get install -y \
supervisor \ supervisor \
&& \ && \
echo "**** Section cleanup ****" \ echo "**** Section cleanup ****" \
@@ -142,7 +149,7 @@ RUN \
&& apt-get update \ && apt-get update \
&& \ && \
echo "**** Install openssh server ****" \ echo "**** Install openssh server ****" \
&& apt-get -y install \ && apt-get install -y \
openssh-server \ openssh-server \
&& echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config \ && echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config \
&& \ && \
@@ -217,7 +224,7 @@ RUN \
&& apt-get update \ && apt-get update \
&& \ && \
echo "**** Install desktop environment ****" \ echo "**** Install desktop environment ****" \
&& apt-get -y install \ && apt-get install -y \
xfce4 \ xfce4 \
xfce4-terminal \ xfce4-terminal \
msttcorefonts \ msttcorefonts \
@@ -240,7 +247,7 @@ RUN \
&& apt-get update \ && apt-get update \
&& \ && \
echo "**** Install firefox ****" \ echo "**** Install firefox ****" \
&& apt-get -y install \ && apt-get install -y \
firefox-esr \ firefox-esr \
&& \ && \
echo "**** Section cleanup ****" \ echo "**** Section cleanup ****" \
@@ -260,15 +267,18 @@ RUN \
&& apt-get update \ && apt-get update \
&& echo steam steam/question select "I AGREE" | debconf-set-selections \ && echo steam steam/question select "I AGREE" | debconf-set-selections \
&& echo steam steam/license note '' | debconf-set-selections \ && echo steam steam/license note '' | debconf-set-selections \
&& apt-get -y install \ && apt-get install -y \
steam \ libgl1-mesa-dri \
steam-devices \ libgl1-mesa-dri:i386 \
vulkan-tools \ libgl1-mesa-glx \
libglx-mesa0:i386 \
mesa-utils \ mesa-utils \
mesa-vulkan-drivers \ mesa-vulkan-drivers \
libglx-mesa0:i386 \
mesa-vulkan-drivers:i386 \ mesa-vulkan-drivers:i386 \
libgl1-mesa-dri:i386 \ vulkan-tools \
&& apt-get install -y \
steam \
steam-devices \
&& \ && \
echo "**** Section cleanup ****" \ echo "**** Section cleanup ****" \
&& apt-get clean autoclean -y \ && apt-get clean autoclean -y \
@@ -286,7 +296,7 @@ RUN \
&& apt-get update \ && apt-get update \
&& \ && \
echo "**** Install audio streaming deps ****" \ echo "**** Install audio streaming deps ****" \
&& apt-get -y install --no-install-recommends \ && apt-get install -y --no-install-recommends \
bzip2 \ bzip2 \
gstreamer1.0-alsa \ gstreamer1.0-alsa \
gstreamer1.0-gl \ gstreamer1.0-gl \
@@ -350,9 +360,10 @@ ENV \
DISPLAY_SIZEH="900" \ DISPLAY_SIZEH="900" \
DISPLAY_SIZEW="1600" \ DISPLAY_SIZEW="1600" \
DISPLAY_VIDEO_PORT="DFP" \ DISPLAY_VIDEO_PORT="DFP" \
DISPLAY=":0" \ DISPLAY=":55" \
NVIDIA_DRIVER_CAPABILITIES="all" \ NVIDIA_DRIVER_CAPABILITIES="all" \
NVIDIA_VISIBLE_DEVICES="all" NVIDIA_VISIBLE_DEVICES="all" \
MODE="primary"
# Be sure that the noVNC port is exposed # Be sure that the noVNC port is exposed
EXPOSE 8083 EXPOSE 8083

View File

@@ -8,6 +8,7 @@ Play your games in the browser with audio. Connect another device and use it wit
- Root access - Root access
- SSH server for remote terminal access - SSH server for remote terminal access
--- ---
## Notes: ## Notes:
@@ -27,6 +28,18 @@ In this container, Steam is configured to automatically start. If you wish to ad
### NETWORK MODE: ### NETWORK MODE:
If you want to use the container as a Steam Remote Play (previously "In Home Streaming") host device you should create a custom network and assign this container it's own IP, if you don't do this the traffic will be routed through the internet since Steam thinks you are on a different network. If you want to use the container as a Steam Remote Play (previously "In Home Streaming") host device you should create a custom network and assign this container it's own IP, if you don't do this the traffic will be routed through the internet since Steam thinks you are on a different network.
### USING HOST X SERVER:
If your host is already running X, you can just use that. To do this, be sure to configure:
- DISPLAY=:0
**(Variable)** - *Configures the sceen to use the primary display. Set this to whatever your host is using*
- MODE=secondary
**(Variable)** - *Configures the container to not start an X server of its own*
- HOST_DBUS=true
**(Variable)** - *Optional - Configures the container to use the host dbus process*
- /run/dbus:/run/dbus:ro
**(Mount)** - *Optional - Configures the container to use the host dbus process*
--- ---
## Running: ## Running:

View File

@@ -5,7 +5,7 @@
# File Created: Saturday, 8th January 2022 2:34:23 pm # File Created: Saturday, 8th January 2022 2:34:23 pm
# Author: Josh.5 (jsunnex@gmail.com) # Author: Josh.5 (jsunnex@gmail.com)
# ----- # -----
# Last Modified: Monday, 10th January 2022 11:04:51 pm # Last Modified: Tuesday, 11th January 2022 9:43:50 pm
# Modified By: Josh.5 (jsunnex@gmail.com) # Modified By: Josh.5 (jsunnex@gmail.com)
### ###
@@ -13,37 +13,100 @@ script_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd );
project_base_path=$(realpath ${script_path}/..); project_base_path=$(realpath ${script_path}/..);
if [[ ${1} == "stop" ]]; then # Parse params
docker stop steam-headless additional_docker_params=""
docker rm steam-headless container_name="steam"
for ARG in ${@}; do
case ${ARG} in
*primary)
primary="true";
;;
*nvidia)
nvidia="true";
;;
*hostx)
hostx="true";
;;
*fb)
framebuffer="true";
;;
stop)
script_mode="stop"
;;
tail)
script_mode="tail"
;;
user)
script_mode="user"
;;
root)
script_mode="root"
;;
*)
;;
esac
done
if [[ "${primary}" == "true" ]]; then
container_name="${container_name}-p"
additional_docker_params="${additional_docker_params} -e MODE='primary'"
hostx="false"
else
container_name="${container_name}-s"
additional_docker_params="${additional_docker_params} -e MODE='secondary'"
framebuffer="false"
fi
if [[ "${hostx}" == "true" ]]; then
container_name="${container_name}-hx"
additional_docker_params="${additional_docker_params} -v /tmp/.X11-unix:/tmp/.X11-unix"
additional_docker_params="${additional_docker_params} -e MODE='secondary'"
nvidia="false"
framebuffer="false"
else
additional_docker_params="${additional_docker_params} -v /tmp/headless/.X11-unix:/tmp/.X11-unix"
fi
if [[ "${nvidia}" == "true" ]]; then
container_name="${container_name}-hw"
additional_docker_params="${additional_docker_params} --runtime=nvidia"
framebuffer="false"
fi
if [[ "${framebuffer}" == "true" ]]; then
# TODO: Enable xvfb
container_name="${container_name}-fb"
fi
# If a mode was given, run that instead
if [[ "${script_mode}" == "stop" ]]; then
docker stop ${container_name}
docker rm ${container_name}
exit $? exit $?
elif [[ ${1} == "tail" ]]; then elif [[ "${script_mode}" == "tail" ]]; then
docker logs -f steam-headless docker logs -f ${container_name}
exit $? exit $?
elif [[ ${1} == "user" ]]; then elif [[ "${script_mode}" == "user" ]]; then
docker exec -ti --user default steam-headless bash docker exec -ti --user default ${container_name} bash
exit $? exit $?
elif [[ ${1} == "root" ]]; then elif [[ "${script_mode}" == "root" ]]; then
docker exec -ti --user 0 steam-headless bash docker exec -ti --user 0 ${container_name} bash
exit $? exit $?
fi fi
docker stop steam-headless # Stop previous instance
docker rm steam-headless docker stop ${container_name}
docker rm ${container_name}
sleep 1 sleep 1
docker run -d --name='steam-headless' \ # Run
--privileged=true \ docker run -d --name="${container_name}" \
--net='br0' --ip='192.168.1.208' \ --privileged=true \
--cpuset-cpus='3,9,4,10,5,11' \ --ipc="host" \
-e PUID="99" \ -e PUID="99" \
-e PGID="100" \ -e PGID="100" \
-e UMASK='000' \ -e UMASK="000" \
-e USER_PASSWORD="password" \ -e USER_PASSWORD="password" \
-e USER="default" \ -e USER="default" \
-e HOME="/home/test" \
-e USER_HOME="/home/default" \ -e USER_HOME="/home/default" \
-e TZ="Pacific/Auckland" \ -e TZ="Pacific/Auckland" \
-e USER_LOCALES="en_US.UTF-8 UTF-8" \ -e USER_LOCALES="en_US.UTF-8 UTF-8" \
@@ -53,14 +116,17 @@ docker run -d --name='steam-headless' \
-e DISPLAY_SIZEH="720" \ -e DISPLAY_SIZEH="720" \
-e DISPLAY_SIZEW="1280" \ -e DISPLAY_SIZEW="1280" \
-e DISPLAY_VIDEO_PORT="DFP" \ -e DISPLAY_VIDEO_PORT="DFP" \
-e DISPLAY=":0" \ -e DISPLAY=":55" \
-e NVIDIA_DRIVER_CAPABILITIES="all" \ -e NVIDIA_DRIVER_CAPABILITIES="all" \
-e NVIDIA_VISIBLE_DEVICES="all" \ -e NVIDIA_VISIBLE_DEVICES="all" \
-v "${project_base_path}/config/home/default":'/home/default':'rw' \ -p 8083:8083 \
--hostname='steam-headless' \ -p 32123:32123 \
-v "${project_base_path}/config/home/default-${container_name}":"/home/default":"rw" \
-v "/tmp/":"/tmp/":"rw" \
--hostname="${container_name}" \
--shm-size=2G \ --shm-size=2G \
--runtime=nvidia \ ${additional_docker_params} \
josh5/steam-headless:latest josh5/steam-headless:develop
docker logs -f steam-headless docker logs -f ${container_name}

View File

@@ -5,7 +5,7 @@
# File Created: Saturday, 8th January 2022 7:08:46 pm # File Created: Saturday, 8th January 2022 7:08:46 pm
# Author: Josh.5 (jsunnex@gmail.com) # Author: Josh.5 (jsunnex@gmail.com)
# ----- # -----
# Last Modified: Tuesday, 11th January 2022 1:02:16 am # Last Modified: Tuesday, 11th January 2022 8:44:17 pm
# Modified By: Josh.5 (jsunnex@gmail.com) # Modified By: Josh.5 (jsunnex@gmail.com)
### ###
@@ -44,4 +44,6 @@ for user_init_script in ${USER_HOME}/init.d/*.sh ; do
done done
echo "**** Starting supervisord ****"; echo "**** Starting supervisord ****";
exec /usr/bin/supervisord -c /etc/supervisor/supervisord.conf --nodaemon mkdir -p /var/log/supervisor
chmod a+rw /var/log/supervisor
exec /usr/bin/supervisord -c /etc/supervisor/supervisord.conf --nodaemon --user root

View File

@@ -0,0 +1,32 @@
[program:pulseaudio]
autostart=true
priority=10
directory=/
command=/usr/bin/pulseaudio -vvvv --disallow-module-loading --disallow-exit --exit-idle-time=-1
user=%(ENV_USER)s
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s"
autorestart=true
stopsignal=QUIT
stdout_logfile=/home/%(ENV_USER)s/.cache/log/pulseaudio.log
stderr_logfile=/home/%(ENV_USER)s/.cache/log/pulseaudio.err
[program:audiostream]
autostart=true
priority=10
command=tcpserver localhost 5901 gst-launch-1.0 -q pulsesrc server=/tmp/pulseaudio.socket ! audio/x-raw, channels=2, rate=24000 ! cutter ! opusenc ! webmmux ! fdsink fd=1
user=%(ENV_USER)s
autorestart=true
stopsignal=QUIT
stdout_logfile=/home/%(ENV_USER)s/.cache/log/audiostream.log
stderr_logfile=/home/%(ENV_USER)s/.cache/log/audiostream.err
[program:audiowebsock]
autostart=true
priority=10
command=/usr/local/bin/websockify 32123 localhost:5901
user=%(ENV_USER)s
autorestart=true
stopsignal=QUIT
stdout_logfile=/home/%(ENV_USER)s/.cache/log/audiowebsock.log
stderr_logfile=/home/%(ENV_USER)s/.cache/log/audiowebsock.err

View File

@@ -0,0 +1,10 @@
[program:dbus]
autostart=true
priority=10
directory=/
command=dbus-daemon --config-file=/usr/share/dbus-1/system.conf --nofork --nopidfile
user=%(ENV_USER)s
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s"
autorestart=true
stopsignal=QUIT

View File

@@ -1,130 +0,0 @@
[supervisord]
user=root
nodaemon=true
[program:ssh]
autostart=true
priority=10
directory=/
command=/usr/sbin/sshd -D
user=root
autorestart=true
stopsignal=QUIT
[program:dbus]
autostart=true
priority=10
directory=/
command=dbus-daemon --config-file=/usr/share/dbus-1/system.conf --nofork --nopidfile
user=%(ENV_USER)s
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s"
autorestart=true
stopsignal=QUIT
[program:pulseaudio]
autostart=true
priority=10
directory=/
command=/usr/bin/pulseaudio -vvvv --disallow-module-loading --disallow-exit --exit-idle-time=-1
user=%(ENV_USER)s
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s"
autorestart=true
stopsignal=QUIT
stdout_logfile=/home/%(ENV_USER)s/.cache/log/pulseaudio.log
stderr_logfile=/home/%(ENV_USER)s/.cache/log/pulseaudio.err
[program:audiostream]
autostart=true
priority=10
command=tcpserver localhost 5901 gst-launch-1.0 -q pulsesrc server=/tmp/pulseaudio.socket ! audio/x-raw, channels=2, rate=24000 ! cutter ! opusenc ! webmmux ! fdsink fd=1
autorestart=true
stopsignal=QUIT
stdout_logfile=/home/%(ENV_USER)s/.cache/log/audiostream.log
stderr_logfile=/home/%(ENV_USER)s/.cache/log/audiostream.err
[program:audiowebsock]
autostart=true
priority=10
command=/usr/local/bin/websockify 32123 localhost:5901
autorestart=true
stopsignal=QUIT
stdout_logfile=/home/%(ENV_USER)s/.cache/log/audiowebsock.log
stderr_logfile=/home/%(ENV_USER)s/.cache/log/audiowebsock.err
[program:xorg]
autostart=true
priority=20
directory=/
command=/usr/bin/Xorg vt7 -novtswitch -sharevts -dpi "%(ENV_DISPLAY_DPI)s" +extension "MIT-SHM" %(ENV_DISPLAY)s
#command=/usr/bin/Xorg -novtswitch -sharevts -dpi "%(ENV_DISPLAY_DPI)s" +extension "MIT-SHM" "%(ENV_DISPLAY)s"
user=%(ENV_USER)s
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s",DISPLAY="%(ENV_DISPLAY)s",XDG_RUNTIME_DIR="/tmp/xdg",RUNLEVEL="3"
autorestart=true
stopsignal=QUIT
stdout_logfile=/home/%(ENV_USER)s/.cache/log/xorg.log
stderr_logfile=/home/%(ENV_USER)s/.cache/log/xorg.err
# Dont use xvfb as it does not work with nvidia X11 configuration
# [program:xvfb]
# autostart=false
# priority=20
# directory=/
# command=/usr/bin/Xvfb %(ENV_DISPLAY)s -screen 0 1920x1080x24
# user=%(ENV_USER)s
# environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s"
# autorestart=true
# stopsignal=QUIT
# stdout_logfile=/home/%(ENV_USER)s/.cache/log/xvfb.log
# stderr_logfile=/home/%(ENV_USER)s/.cache/log/xvfb.err
[program:x11vnc]
autostart=true
priority=30
directory=/
#command=/usr/bin/x11vnc -display %(ENV_DISPLAY)s -xkb
command=/usr/bin/x11vnc -display %(ENV_DISPLAY)s -rfbport 5900 -shared -forever
user=%(ENV_USER)s
autorestart=true
stopsignal=QUIT
stdout_logfile=/home/%(ENV_USER)s/.cache/log/x11vnc.log
stderr_logfile=/home/%(ENV_USER)s/.cache/log/x11vnc.err
[program:de]
autostart=true
priority=50
directory=/home/%(ENV_USER)s
command=/usr/bin/startxfce4
#command=/usr/bin/mate-session
#command=/usr/bin/startlxqt
#command=/usr/bin/dbus-launch startxfce4
#command=/usr/bin/dbus-launch xfce4-session
#command=/usr/bin/dbus-launch startplasma-x11
user=%(ENV_USER)s
autorestart=true
stopsignal=QUIT
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s",DISPLAY="%(ENV_DISPLAY)s"
stdout_logfile=/home/%(ENV_USER)s/.cache/log/de.log
stderr_logfile=/home/%(ENV_USER)s/.cache/log/de.err
## Experimental launch directly to steam big picture... (this is cool, but not ideal for headless)
# [program:steam]
# autostart=true
# priority=50
# directory=/home/%(ENV_USER)s
# command=/usr/bin/steam -bigpicture
# user=%(ENV_USER)s
# autorestart=true
# stopsignal=QUIT
# environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s",DISPLAY="%(ENV_DISPLAY)s"
# stdout_logfile=/home/%(ENV_USER)s/.cache/log/steam.log
# stderr_logfile=/home/%(ENV_USER)s/.cache/log/steam.err
[program:novnc]
autostart=true
priority=100
command=/opt/noVNC/utils/launch.sh --vnc localhost:5900 --listen 8083
#command=/usr/share/novnc/utils/launch.sh --vnc localhost:5900 --listen 8083
#command=/usr/local/bin/websockify -D --web=/usr/share/novnc/ --cert=/etc/ssl/novnc.pem 8083 localhost:5900
user=%(ENV_USER)s
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s"
autorestart=true

View File

@@ -0,0 +1,9 @@
[program:ssh]
autostart=true
priority=10
directory=/
command=/usr/sbin/sshd -D
user=root
autorestart=true
stopsignal=QUIT

View File

@@ -0,0 +1,13 @@
# Optionally launch directly to steam big picture (disabled by default)
[program:steam]
autostart=false
priority=50
directory=/home/%(ENV_USER)s
command=/usr/game/steam -bigpicture
user=%(ENV_USER)s
autorestart=true
stopsignal=QUIT
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s",DISPLAY="%(ENV_DISPLAY)s"
stdout_logfile=/home/%(ENV_USER)s/.cache/log/steam.log
stderr_logfile=/home/%(ENV_USER)s/.cache/log/steam.err

View File

@@ -0,0 +1,19 @@
[program:x11vnc]
autostart=true
priority=30
directory=/
command=/usr/bin/x11vnc -display %(ENV_DISPLAY)s -rfbport 5900 -shared -forever
user=%(ENV_USER)s
autorestart=true
stopsignal=QUIT
stdout_logfile=/home/%(ENV_USER)s/.cache/log/x11vnc.log
stderr_logfile=/home/%(ENV_USER)s/.cache/log/x11vnc.err
[program:novnc]
autostart=true
priority=30
command=/opt/noVNC/utils/launch.sh --vnc localhost:5900 --listen 8083
user=%(ENV_USER)s
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s"
autorestart=true

View File

@@ -0,0 +1,12 @@
[program:xfce4]
autostart=true
priority=50
directory=/home/%(ENV_USER)s
command=/usr/bin/startxfce4
user=%(ENV_USER)s
autorestart=true
stopsignal=QUIT
environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s",DISPLAY="%(ENV_DISPLAY)s"
stdout_logfile=/home/%(ENV_USER)s/.cache/log/de.log
stderr_logfile=/home/%(ENV_USER)s/.cache/log/de.err

View File

@@ -0,0 +1,12 @@
[program:xorg]
autostart=false
priority=20
directory=/
command=/usr/bin/start-xorg.sh
user=root
environment=DISPLAY="%(ENV_DISPLAY)s",DISPLAY_DPI="%(ENV_DISPLAY_DPI)s",XDG_RUNTIME_DIR="/tmp/.X11-unix"
autorestart=true
stopsignal=QUIT
stdout_logfile=/var/log/supervisor/xorg.log
stderr_logfile=/var/log/supervisor/xorg.err

View File

@@ -0,0 +1,26 @@
# Configure dbus
echo "**** Configure container dbus ****";
if [[ "${HOST_DBUS}" == "true" ]]; then
echo "Container configured to use the host dbus";
# Disable supervisord script
sed -i 's|^autostart.*=.*$|autostart=false|' /etc/supervisor/conf.d/dbus.conf
else
echo "Container configured to run its own dbus";
# Enable supervisord script
sed -i 's|^autostart.*=.*$|autostart=true|' /etc/supervisor/conf.d/dbus.conf
# Configure dbus to run as USER
sed -i "/ <user>/c\ <user>${USER}</user>" /usr/share/dbus-1/system.conf
# Remove old dbus session
rm -rf ${USER_HOME}/.dbus/session-bus/* 2> /dev/null
# Remove old dbus pids
mkdir -p /var/run/dbus
chown -R ${PUID}:${PGID} /var/run/dbus/
chmod -R 770 /var/run/dbus/
# Generate a dbus machine ID
dbus-uuidgen > /var/lib/dbus/machine-id
# Remove old lockfiles
find /var/run/dbus -name "pid" -exec rm -f {} \;
fi
echo "DONE"

View File

@@ -1,32 +0,0 @@
# Configure system paths
echo "**** Configure system paths ****";
sed -i "/ <user>/c\ <user>${USER}</user>" /usr/share/dbus-1/system.conf
if [ ! -d /tmp/xdg ]; then
mkdir -p /tmp/xdg
fi
echo "Configure dbus";
# Remove old dbus session
rm -rf ${USER_HOME}/.dbus/session-bus/* 2> /dev/null
# Remove old dbus pids
mkdir -p /var/run/dbus
chown -R ${PUID}:${PGID} /var/run/dbus/
chmod -R 770 /var/run/dbus/
# Generate a dbus machine ID
dbus-uuidgen > /var/lib/dbus/machine-id
echo "Configure X Windows context"
chown -R ${PUID}:${PGID} /tmp/xdg
chmod -R 0700 /tmp/xdg
echo "Configure X Windows session"
rm -rfv /tmp/.ICE-unix*
mkdir -p /tmp/.ICE-unix
chown root:root /tmp/.ICE-unix/
chmod 1777 /tmp/.ICE-unix/
echo "Remove old lockfiles"
find /var/run/dbus -name "pid" -exec rm -f {} \;
find /tmp -name ".X99*" -exec rm -f {} \;
echo "DONE"

View File

@@ -19,7 +19,7 @@ function download_driver {
mkdir -p ${USER_HOME}/.cache/nvidia mkdir -p ${USER_HOME}/.cache/nvidia
if [[ ! -f "${USER_HOME}/.cache/nvidia/NVIDIA_${nvidia_host_driver_version}.run" ]]; then if [[ ! -f "${USER_HOME}/.cache/nvidia/NVIDIA_${nvidia_host_driver_version}.run" ]]; then
echo "Downloading driver" echo "Downloading driver v${nvidia_host_driver_version}"
wget -q --show-progress --progress=bar:force:noscroll \ wget -q --show-progress --progress=bar:force:noscroll \
-O /tmp/NVIDIA.run \ -O /tmp/NVIDIA.run \
http://download.nvidia.com/XFree86/Linux-x86_64/${nvidia_host_driver_version}/NVIDIA-Linux-x86_64-${nvidia_host_driver_version}.run http://download.nvidia.com/XFree86/Linux-x86_64/${nvidia_host_driver_version}/NVIDIA-Linux-x86_64-${nvidia_host_driver_version}.run
@@ -32,12 +32,12 @@ function download_driver {
function install_driver { function install_driver {
# Check here if the currently installed version matches using nvidia-settings # Check here if the currently installed version matches using nvidia-settings
nvidia_settings_version=$(nvidia-settings --version 2> /dev/null | grep version | cut -d ' ' -f 4) nvidia_settings_version=$(nvidia-settings --version 2> /dev/null | grep version | cut -d ' ' -f 4)
[[ "${nvidia_settings_version}x" == "${nvidia_host_driver_version}x" ]] && return 0 [[ "${nvidia_settings_version}x" == "${nvidia_host_driver_version}x" ]] && return 0;
# Download the driver (if it does not yet exist locally) # Download the driver (if it does not yet exist locally)
download_driver download_driver
echo "Installing driver" echo "Installing driver v${nvidia_host_driver_version} to match what is running on the host"
chmod +x ${USER_HOME}/.cache/nvidia/NVIDIA_${nvidia_host_driver_version}.run chmod +x ${USER_HOME}/.cache/nvidia/NVIDIA_${nvidia_host_driver_version}.run
${USER_HOME}/.cache/nvidia/NVIDIA_${nvidia_host_driver_version}.run \ ${USER_HOME}/.cache/nvidia/NVIDIA_${nvidia_host_driver_version}.run \
--silent \ --silent \

View File

@@ -25,13 +25,6 @@ fi
# Configure a NVIDIA X11 config # Configure a NVIDIA X11 config
function configure_nvidia_x_server { function configure_nvidia_x_server {
# Configure x to be run by anyone
if grep -Fxq "allowed_users=console" /etc/X11/Xwrapper.config; then
echo "Configure Xwrapper.config"
sed -i "s/allowed_users=console/allowed_users=anybody/" /etc/X11/Xwrapper.config
fi
# Configure xorg for NVIDIA
echo "Configuring X11 with GPU ID: '${gpu_select}'" echo "Configuring X11 with GPU ID: '${gpu_select}'"
nvidia_gpu_hex_id=$(nvidia-smi --format=csv --query-gpu=pci.bus_id --id="${gpu_select}" 2> /dev/null | sed -n 2p) nvidia_gpu_hex_id=$(nvidia-smi --format=csv --query-gpu=pci.bus_id --id="${gpu_select}" 2> /dev/null | sed -n 2p)
IFS=":." ARR_ID=(${nvidia_gpu_hex_id}) IFS=":." ARR_ID=(${nvidia_gpu_hex_id})
@@ -45,12 +38,44 @@ function configure_nvidia_x_server {
sed -i '/Section\s\+"Monitor"/a\ '"${MODELINE}" /etc/X11/xorg.conf sed -i '/Section\s\+"Monitor"/a\ '"${MODELINE}" /etc/X11/xorg.conf
} }
# Allow anybody for running x server
function configure_x_server {
# Configure x to be run by anyone
if grep -Fxq "allowed_users=console" /etc/X11/Xwrapper.config; then
echo "Configure Xwrapper.config"
sed -i "s/allowed_users=console/allowed_users=anybody/" /etc/X11/Xwrapper.config
fi
# Ensure the X socket path exists
if [ ! -d /tmp/.X11-unix ]; then
mkdir -p /tmp/.X11-unix
fi
# Check if this container is being run as a secondary instance
if [ "${MODE}" == "p" ] | [ "${MODE}" == "primary" ]; then
echo "Configure container as primary the X server"
# Enable supervisord script
sed -i 's|^autostart.*=.*$|autostart=true|' /etc/supervisor/conf.d/xorg.conf
elif [ "${MODE}" == "fb" ] | [ "${MODE}" == "framebuffer" ]; then
echo "Configure container to use a virtual framebuffer as the X server"
# Disable supervisord script
sed -i 's|^autostart.*=.*$|autostart=false|' /etc/supervisor/conf.d/xorg.conf
else
echo "Configure container as secondary and do not run an X server"
# Disable supervisord script
sed -i 's|^autostart.*=.*$|autostart=false|' /etc/supervisor/conf.d/xorg.conf
fi
# Make startup script executable
chmod +x /usr/bin/start-xorg.sh
}
if [[ -z ${nvidia_gpu_hex_id} ]]; then if [[ -z ${nvidia_gpu_hex_id} ]]; then
echo "**** Generate default xorg.conf ****"; echo "**** Generate default xorg.conf ****";
# TODO: Configure xorg.conf with no NVIDIA GPU configure_x_server
else else
echo "**** Generate NVIDIA xorg.conf ****"; echo "**** Generate NVIDIA xorg.conf ****";
configure_x_server
configure_nvidia_x_server configure_nvidia_x_server
fi fi

View File

@@ -0,0 +1,30 @@
#!/usr/bin/env bash
###
# File: start-xorg.sh
# Project: bin
# File Created: Tuesday, 11th January 2022 8:28:52 pm
# Author: Josh.5 (jsunnex@gmail.com)
# -----
# Last Modified: Tuesday, 11th January 2022 9:38:51 pm
# Modified By: Josh.5 (jsunnex@gmail.com)
###
DISPLAY=${DISPLAY:-:55}
DISPLAY_DPI=${DPI:-:96}
XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-/tmp/.X11-unix}
# Clear out old lock files
display_file=/tmp/.X11-unix/X${DISPLAY#:}
if [ -S ${display_file} ]; then
LOG "Removing ${display_file} before starting"
rm -f /tmp/.X${DISPLAY#:}-lock
rm ${display_file}
fi
/usr/bin/Xorg -ac -noreset -novtswitch -sharevts -dpi "${DISPLAY_DPI}" +extension "GLX" +extension "RANDR" +extension "RENDER" vt7 "${DISPLAY}"
# /usr/bin/Xorg -ac -noreset -novtswitch -sharevts -dpi "${DISPLAY_DPI}" +extension "GLX" +extension "RANDR" +extension "RENDER" +extension "MIT-SHM" vt7 "${DISPLAY}"
# /usr/bin/Xorg -novtswitch -sharevts -dpi "${DISPLAY_DPI}" +extension "MIT-SHM" vt7 ${DISPLAY}
# /usr/bin/Xorg -novtswitch -sharevts -dpi "${DISPLAY_DPI}" +extension "MIT-SHM" "${DISPLAY}"
# /usr/bin/Xorg -ac -noreset +extension GLX +extension RANDR +extension RENDER vt7 "${DISPLAY}"