X.org arbeitet ohne Socket in Chroot?

8

Ich habe ein Chroot-Setup und habe ohne Probleme grafische Anwendungen ausgeführt. Das einzige Setup, das ich gemacht habe, ist eingestellt DISPLAY=:0und 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 tcpFlag gestartet und ich habe einen Unix-Domain-Socket, /tmp/.X11-unixaber 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-unixist auf der Chroot völlig leer. Wie ist es möglich, dass meine Chroot grafische Anwendungen auf meinem X11-Display starten kann?

Scoopta
quelle

Antworten:

4

Der X-Server unterstützt auch abstrakte Sockets, die mit UNIX-Sockets identisch sind und ähnliche Pfadnamen wie UNIX-Sockets haben. Die Pfadnamen beginnen jedoch mit einem NUL-Zeichen. Weitere Informationen finden Sie in der Dokumentation zu "abstract" in der Manpage zu Unix (7) . In allen Namespaces und Chroots des Dateisystems ist effektiv ein abstrakter Socket vorhanden. Sie müssen nichts mit der Chroot oder dem Namespace verknüpfen, um es zu verwenden.

Vielleicht verwenden sowohl der X-Server als auch der Client einen abstrakten Socket für die Kommunikation? X-Clients, die die Standard-X-Client-Bibliotheken verwenden, versuchen automatisch, einen abstrakten Socket zu verwenden, bevor sie versuchen, den Standard-UNIX-Socket zu verwenden. In libxcb siehe _xcb_openund _xcb_open_abstractin src / xcb_util.c .

Josh Triplett
quelle
Das ist interessant. Ich werde einen Blick darauf werfen und sehen, ob das so ist.
Scoopta
1
Ja, das scheint es zu sein. netstatenthüllt einen Socket namens @/tmp/.X11-unix/X0und wenn man sich umschaut, scheint das @ zu symbolisieren, dass es abstrakt ist.
Scoopta
2
Beachten Sie, dass abstrakte Sockets eine Linux-spezifische Erweiterung für tragbare Unix-Sockets sind. In der Linux- unix.7Manpage 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."
Andrew Henle