Ich habe ein Chroot-Setup und habe ohne Probleme grafische Anwendungen ausgeführt. Das einzige Setup, das ich gemacht habe, ist eingestellt DISPLAY=:0
und es funktioniert. Ich dachte jedoch immer, dass Unix-Domain-Sockets für X11 verwendet werden, sodass ich nicht herausfinden konnte, warum dies funktioniert. Ich habe ein wenig gegraben und es stellte sich heraus, dass ich recht hatte. Mein X.org-Server wird mit dem -nolisten tcp
Flag gestartet und ich habe einen Unix-Domain-Socket, /tmp/.X11-unix
aber irgendwie kann meine Chroot grafische Anwendungen auf diesem X11-Display ohne Socket starten. Ich habe den Socket nie fest mit der Chroot verbunden, tatsächlich befinden sie sich nicht einmal im selben Dateisystem. /tmp/.X11-unix
ist auf der Chroot völlig leer. Wie ist es möglich, dass meine Chroot grafische Anwendungen auf meinem X11-Display starten kann?
netstat
enthüllt einen Socket namens@/tmp/.X11-unix/X0
und wenn man sich umschaut, scheint das @ zu symbolisieren, dass es abstrakt ist.unix.7
Manpage heißt es : "Linux unterstützt auch einen abstrakten Namespace, der vom Dateisystem unabhängig ist." und "Der abstrakte Socket-Namespace ist eine nicht portierbare Linux-Erweiterung."