Grafische Programme in einer chroot-Umgebung aufrufen

23. Oktober 2005

Ihr Vorhaben

Sie haben unter dem Unterverzeichnis /test ein Linuxsystem installiert oder die Wurzelpartition eines anderen Linuxsystems 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.