Ihr Vorhaben
Sie haben unter dem Unterverzeichnis /test
ein Linux-System installiert oder die Wurzelpartition eines anderen Linux-Systems gemountet. Mit dem Befehl chroot /test
können Sie zwar wie gewohnt "hineinwechseln" und Programme aufrufen. Das Starten von grafischen Programmen scheitert aber, selbst wenn Sie DISPLAY
auf :0
setzen.
Das Problem
Lokale Programme kommunizieren mit dem X-Server Ihres Rechners über ein Unix-Socket im Verzeichnis /tmp/.X11-unix
. In Ihrer chroot
-Umgebung gibt keinen Zugriff auf dieses Socket.
Die Lösung
Mit einem mount-Befehl blenden Sie das Verzeichnis /tmp/.X11-unix
des "äußeren" Rechners in den chroot
-Käfig ein:
root@linux# mkdir -p /test/tmp/.X11-unix
root@linux# mount --bind /tmp/.X11-unix /test/tmp/.X11-unix
Außerdem erlauben Sie Zugriff auf das Display für alle lokalen Prozesse:
user@linux> xhost + local:
Nach dem Aufruf von chroot /test
setzen Sie im inneren System die DISPLAY
-Variable auf :0
und können nun grafische Programme starten:
root@linux# chroot /test
root@linux# export DISPLAY=:0
root@linux# xterm
Übrigens: Eine TCP-Verbindung über localhost
ist bei den meisten Distributionen aus Sicherheitsgründen per Default ausgeschaltet, sonst könnte man statt obigem Trick und den Umweg über localhost
gehen. Außen xhost + localhost
eingeben und innen export DISPLAY=localhost:0
.