GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – LXC; Bereitstellung von Images mit kleinstmöglichem X11

Ja, es ist möglich, eine vollständige X11-Desktopumgebung in einem LXC-Container auszuführen.

Im Moment mache ich das auf Arch Linux. Ich werde nicht sagen, dass es "leicht" ist, da ich nicht so weit gegangen bin, Dinge aus der Standardinstallation des Paketmanagers zu entfernen, aber ich kann bestätigen, dass es sehr gut funktioniert.

Sie müssen alle Kernel-Treiber sowohl auf dem HOST als auch im Container installieren. Solche Dinge wie der Grafiktreiber (ich benutze nvidia). Sie müssen die Geräteknoten in dev innerhalb des Containers zugänglich machen, indem Sie Ihre container.conf so konfigurieren, dass sie dies zulässt. Sie müssen dann sicherstellen, dass diese Geräteknoten innerhalb des Containers erstellt werden (d. h. mknod).

Also, um deine Frage zu beantworten:JA, es funktioniert. Wenn ich weiter helfen oder weitere Details bereitstellen kann, lassen Sie es mich bitte wissen.

--- Zusätzliche Informationen bereitgestellt ---

In meinem Container.../etc/inittab startet in Runlevel 5 und startet "slim"Slim ist für die Verwendung von vt09 konfiguriert:

 # Path, X server and arguments (if needed)
 # Note: -xauth $authfile is automatically appended
 default_path        /bin:/usr/bin:/usr/local/bin
 default_xserver     /usr/bin/X
 xserver_arguments   -nolisten tcp vt09

Ich verwende auf meinem aktuellen vt kein zweites X-Display, sondern ein ganz anderes (zwischen vielen davon kann ich mit STRG+ALT+Fn wechseln).

Wenn Sie slim nicht verwenden, können Sie ein Konstrukt wie dieses verwenden, um X auf einem anderen vt zu starten:

 /usr/bin/startx -- :10 vt10

Das startet X auf dem Display :10 und setzt es auf vt10 (STRG+ALT+F10). Diese müssen nicht übereinstimmen, aber ich denke, es ist besser, wenn sie es tun.

Sie benötigen Ihre Containerkonfiguration, um die relevanten Geräte wie folgt verfügbar zu machen:

 # XOrg Desktop
 lxc.cgroup.devices.allow = c 4:10 rwm    # /dev/tty10 X Desktop
 lxc.cgroup.devices.allow = c 195:* rwm  # /dev/nvidia Graphics card
 lxc.cgroup.devices.allow = c 13:* rwm   # /dev/input/* input devices

Und Sie müssen die Geräte in Ihrem Container erstellen:

 # display vt device
 mknod -m 666 /dev/tty10 c 4 10

 # NVIDIA graphics card devices
 mknod -m 666 /dev/nvidia0 c 195 0
 mknod -m 666 /dev/nvidiactl c 195 255

 # input devices
 mkdir  /dev/input           # input devices
 chmod 755 /dev/input
 mknod -m 666 /dev/input/mice c 13 63 # mice

Ich habe auch manuell Eingabegeräte konfiguriert (da wir kein udev incontainer haben)

 Section "ServerFlags"
         Option "AutoAddDevices" "False"
 EndSection

 Section "ServerLayout"
     Identifier     "Desktop"
     InputDevice    "Mouse0" "CorePointer"
     InputDevice    "Keyboard0" "CoreKeyboard"
 EndSection

 Section "InputDevice"
     Identifier "Keyboard0"
     Driver "kbd"
     Option "XkbLayout" "gb"
 EndSection

 Section "InputDevice"
     Identifier "Mouse0"
     Driver "mouse"
     Option "Protocol" "auto"
     Option "Device" "/dev/input/mice"
     Option "ZAxisMapping" "4 5 6 7"
 EndSection

Das obige geht in eine Datei /etc/X11/xorg.conf.d/10-input.conf

Ich bin mir nicht sicher, ob irgendetwas davon hilft, aber viel Glück!


Ja, das können Sie tun. Sie können auch lxc.mount.entry verwenden damit Sie das Initialisierungsskript nicht innerhalb des Containers mit allen mknod ausführen müssen Befehle. Die Konfiguration des lxc-Containers sollte also etwa Folgendes enthalten:

lxc.cgroup.devices.allow = c 4:7 rwm
lxc.mount.entry = /dev/tty7 dev/tty7 none bind,optional,create=file
lxc.cgroup.devices.allow = c 4:8 rwm
lxc.mount.entry = /dev/tty8 dev/tty8 none bind,optional,create=file
lxc.cgroup.devices.allow = c 10:63 rwm
lxc.mount.entry = /dev/vga_arbiter dev/vga_arbiter none bind,optional,create=file
lxc.cgroup.devices.allow = c 13:* rwm
lxc.mount.entry = /dev/input dev/input none bind,optional,create=dir
lxc.cgroup.devices.allow = c 29:0 rwm
lxc.mount.entry = /dev/fb0 dev/fb0 none bind,optional,create=file
# /dev/dri/card0 AMD Graphics card
lxc.cgroup.devices.allow = c 226:0 rwm 
lxc.cgroup.devices.allow = c 226:64 rwm
lxc.cgroup.devices.allow = c 226:128 rwm
lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir
#lxc.cgroup.devices.allow = c 195:* rwm  # /dev/nvidia Graphics card
#lxc.mount.entry = /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
#lxc.mount.entry = /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
#lxc.cgroup.devices.allow = c 116:* rwm
#lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir

Um Eingabegeräte für X zu konfigurieren, können Sie evdev verwenden , was besonders nützlich ist, wenn Sie xf86-input-keyboard nicht verwenden können Treiber. Da die genaue Zahl von event* Einträge in der Konfigurationsdatei (z.B. /usr/share/X11/xorg.conf.d/10-lxc-input.conf ) hängt davon ab, was sich in /dev/input/ Ihres Containers befindet, Sie könnten ein Skript verwenden, um eines zu generieren:

#!/bin/bash
cat >/usr/share/X11/xorg.conf.d/10-lxc-input.conf << _EOF_
Section "ServerFlags"
     Option "AutoAddDevices" "False"
EndSection
_EOF_

cd /dev/input
for input in event*
do
cat >> /usr/share/X11/xorg.conf.d/10-lxc-input.conf <<_EOF_
Section "InputDevice"
    Identifier "$input"
    Option "Device" "/dev/input/$input"
    Option "AutoServerLayout" "true"
    Driver "evdev"
EndSection
_EOF_
done

Dies sollte ausreichen, damit X funktioniert:

/usr/bin/startx -- :0 vt07

Sie können auch Audio aktivieren, indem Sie entweder /dev/snd übergeben oder pulseaudio über TCP oder einen Socket einrichten.


Linux
  1. Hinter den Kulissen mit Linux-Containern

  2. Linux-Container mit LXC auf Ubuntu 16.04 einrichten

  3. JQ-Befehl in Linux mit Beispielen

  4. Linux – Warum lässt mich Linux nicht mit /dev/dsp spielen?

  5. Es ist möglich, eine .dll unter Linux zu verwenden

wc Linux-Befehl mit Beispielen

Linux-IP-Befehl mit Beispielen

15 Linux-PS-Befehl mit Beispielen

Linux-Container mit LXC auf CentOS 7 / RHEL 7 einrichten

Docker-Tutorial – Erste Schritte mit Docker unter Linux

Finden und setzen Sie mit Fondo schöne Hintergrundbilder für den Linux-Desktop