Seungmin Kim 1 rok temu
rodzic
commit
0f6b2530ef
3 zmienionych plików z 17 dodań i 14 usunięć
  1. 1 0
      Dockerfile
  2. 14 1
      README.md
  3. 2 13
      entrypoint.sh

+ 1 - 0
Dockerfile

@@ -461,6 +461,7 @@ ENV KDE_SESSION_VERSION=5
 ENV KDE_APPLICATIONS_AS_SCOPE=1
 ENV KWIN_COMPOSE=N
 ENV KWIN_EFFECTS_FORCE_ANIMATIONS=0
+ENV KWIN_EXPLICIT_SYNC=0
 ENV KWIN_X11_NO_SYNC_TO_VBLANK=1
 # Use sudoedit to change protected files instead of using sudo on kwrite
 ENV SUDO_EDITOR=kwrite

+ 14 - 1
README.md

@@ -354,6 +354,19 @@ Do not use `systemd`, `polkit`, FUSE mounts, or sandboxed application distributi
 
 </details>
 
+### I want to use this container with laptops or other integrated/hybrid GPU systems.
+
+<details>
+  <summary>Open Answer</summary>
+
+If you need a container that works out of the box, you should use [docker-nvidia-egl-desktop](https://github.com/selkies-project/docker-nvidia-egl-desktop).
+
+This container may work after some substantial configuration with the internal X.Org X11 server of the container, but is not guaranteed or officially supported.
+
+Some references include [https://wiki.archlinux.org/title/NVIDIA_Optimus](https://wiki.archlinux.org/title/NVIDIA_Optimus), [https://wiki.archlinux.org/title/Bumblebee](https://wiki.archlinux.org/title/Bumblebee), and [https://wiki.debian.org/NVIDIA%20Optimus](https://wiki.debian.org/NVIDIA%20Optimus).
+
+</details>
+
 ### I want to share one GPU with multiple containers to run GUI workloads.
 
 <details>
@@ -383,7 +396,7 @@ Then, edit the `/etc/X11/xorg.conf` file of your host outside the container and
 
 ```
 Section "ServerFlags"
-    Option "AutoAddGPU" "false"
+    Option "AutoAddGPU" "False"
 EndSection
 ```
 

+ 2 - 13
entrypoint.sh

@@ -80,14 +80,6 @@ if ! command -v nvidia-xconfig >/dev/null 2>&1; then
   fi
 fi
 
-# Allow starting Xorg from a pseudoterminal instead of strictly on a tty console
-if [ ! -f /etc/X11/Xwrapper.config ]; then
-    echo -e "allowed_users=anybody\nneeds_root_rights=yes" | tee /etc/X11/Xwrapper.config > /dev/null
-fi
-if grep -Fxq "allowed_users=console" /etc/X11/Xwrapper.config; then
-  sed -i "s/allowed_users=console/allowed_users=anybody/;$ a needs_root_rights=yes" /etc/X11/Xwrapper.config
-fi
-
 # Remove existing Xorg configuration
 if [ -f "/etc/X11/xorg.conf" ]; then
   rm -f "/etc/X11/xorg.conf"
@@ -136,13 +128,10 @@ sed -i '/Section\s\+"Monitor"/a\    '"$MODELINE" /etc/X11/xorg.conf
 sed -i '/"DPMS"/d' /etc/X11/xorg.conf
 sed -i '/Section\s\+"Monitor"/a\    Option         "DPMS" "False"' /etc/X11/xorg.conf
 # Prevent interference between GPUs, add this to the host or other containers running Xorg as well
-echo -e "Section \"ServerFlags\"\n    Option         \"DontVTSwitch\" \"True\"\n    Option         \"DontZap\" \"True\"\n    Option         \"AllowMouseOpenFail\" \"True\"\n    Option         \"AutoAddGPU\" \"False\"\n    Option         \"AutoBindGPU\" \"False\"\nEndSection" | tee -a /etc/X11/xorg.conf > /dev/null
-
-# Real sudo (sudo-root) is required in Ubuntu 20.04 but not newer Ubuntu, this symbolic link enables running Xorg inside a container with `-sharevts`
-ln -snf /dev/ptmx /dev/tty7 || sudo-root ln -snf /dev/ptmx /dev/tty7 || echo 'Failed to create /dev/tty7 device'
+echo -e "Section \"ServerFlags\"\n    Option         \"DontVTSwitch\" \"True\"\n    Option         \"DontZap\" \"True\"\n    Option         \"AllowMouseOpenFail\" \"True\"\n    Option         \"AutoAddGPU\" \"False\"\nEndSection" | tee -a /etc/X11/xorg.conf > /dev/null
 
 # Run Xorg server with required extensions
-/usr/bin/Xorg "${DISPLAY}" vt7 -noreset -novtswitch -sharevts -nolisten "tcp" -ac -dpi "${DISPLAY_DPI}" +extension "COMPOSITE" +extension "DAMAGE" +extension "GLX" +extension "RANDR" +extension "RENDER" +extension "MIT-SHM" +extension "XFIXES" +extension "XTEST" &
+/usr/lib/xorg/Xorg "${DISPLAY}" vt7 -noreset -novtswitch -sharevts -nolisten "tcp" -ac -dpi "${DISPLAY_DPI}" +extension "COMPOSITE" +extension "DAMAGE" +extension "GLX" +extension "RANDR" +extension "RENDER" +extension "MIT-SHM" +extension "XFIXES" +extension "XTEST" &
 
 # Wait for X server to start
 echo 'Waiting for X Socket' && until [ -S "/tmp/.X11-unix/X${DISPLAY#*:}" ]; do sleep 0.5; done && echo 'X Server is ready'