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.
|