Recently, I was trying to run a GUI front-end to Valgrind (Valkyrie) from within a chroot’d environment on Fedora 9. It failed to run, and after some searching I figured out the problem. Here’s the story.
First, I made sure to disable access control from outside the chroot (warning: make sure you understand the security implications of this!):
[dev]$ xhost + localhost
localhost being added to access control list
Next, I entered the chroot’d environment and attempted to run the application, but it failed with the following error:
[chroot]$ valkyrie
valkyrie: cannot connect to X server 127.0.0.1:0.0
The problem is that the X server is configured by default NOT to listen for remote connections (usually on port 6000). I verified that this was the problem by leaving the chroot and trying to connect via telnet:
[dev]$ telnet 127.0.0.1 6000
Trying 127.0.0.1…
telnet: connect to address 127.0.0.1: Connection refused
The way to fix this on previous Fedora installations was to use gdmsetup. However, this is no longer available. Hunting through the KDE config files I found the solution: change the arguments passed to the X server after login in the kdmrc file.
NOTE: I’m using fluxbox as my desktop environment… KDE is used for the Fedora login screen, which is why we are messing with its config files.
[dev]$ sudo su
[root]# cd /etc/kde/kdm
[root]# cp kdmrc kdmrc.old
[root]# vi kdmrc
On my system, the problem was this line:
ServerArgsLocal=-br -nolisten tcp
I simply changed it to:
ServerArgLocal=-br
I restarted my X server and tried to connect with telnet again (this time with success):
[dev]$ telnet 127.0.0.1 6000
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]’.
Then, I once again disabled X access control (`xhost + localhost`) and everything worked fine. Hope this helps!
EDITED 11/17/2008: Changed ‘xhost +’ to ‘xhost + localhost’