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.

Wissensbank Linux

Diese Artikel wurden vom Gründer von Checkmk vor vielen Jahren geschrieben. Sie sind immer noch gültig und haben deshalb weiterhin ihr Zuhause auf dieser Webseite. Mathias hat in der Zwischenzeit die Monitoringlösung Checkmk entwickelt

Mehr zu Checkmk