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.