ddd 无法连接到 X Window:这是错误还是本地配置错误?

ddd 无法连接到 X Window:这是错误还是本地配置错误?

我目前正在分析一个ddd因无法连接到 X Window 而挂起的问题。这是 strace 的输出:

connect(4, {sa_family=AF_LOCAL, sun_path=@"/tmp/.X11-unix/X0"}, 20) = 0
getpeername(4, {sa_family=AF_LOCAL, sun_path=@"/tmp/.X11-unix/X0"}, [20]) = 0
uname({sysname="Linux", nodename="terra-arch", ...}) = 0
access("/home/phil/.Xauthority", R_OK)  = 0
open("/home/phil/.Xauthority", O_RDONLY) = 5
fstat(5, {st_mode=S_IFREG|0600, st_size=55, ...}) = 0
read(5, "\1\0\0\nterra-arch\0\0010\0\22MIT-MAGIC-COO"..., 4096) = 55
read(5, "", 4096)                       = 0
close(5)                                = 0
getsockname(4, {sa_family=AF_LOCAL, NULL}, [2]) = 0
fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(4, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
poll([{fd=4, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=4, revents=POLLOUT}])
writev(4, [{"...", 12}, {"", 0}, {"MIT-MAGIC-COOKIE-1", 18}, {"...", 2}, {"...", 16}, {"...", 0}], 6) = 48
recvmsg(4, 0x7ffc641c6e80, 0)           = -1 EAGAIN (Resource temporarily unavailable)

在recvmsg调用之前,它与“/tmp/.X11-unix/X0”套接字通信并发送MIT-MAGIC-COOKIE-1带有writev调用的a。然后它会永远循环(recvmsg 调用不断失败)。

不久前还有效,ddd是唯一似乎受到影响的应用程序。不幸的是,我不熟悉XWindow授权协议

我正在使用 Arch Linux。不确定是否相关,但 xorg-server 最近更新了:

ls -alhgtr /var/cache/pacman/pkg/xorg-*
...
-rw-r--r-- 1 root  27K Mar 25 10:01 /var/cache/pacman/pkg/xorg-server-common-1.18.2-4-x86_64.pkg.tar.xz
-rw-r--r-- 1 root 1.3M Mar 25 10:01 /var/cache/pacman/pkg/xorg-server-1.18.2-4-x86_64.pkg.tar.xz
-rw-r--r-- 1 root 708K Mar 25 10:01 /var/cache/pacman/pkg/xorg-server-xvfb-1.18.2-4-x86_64.pkg.tar.xz
-rw-r--r-- 1 root  17K Apr  1 18:25 /var/cache/pacman/pkg/xorg-xinit-1.3.4-4-x86_64.pkg.tar.xz
-rw-r--r-- 1 root 732K Apr  5 19:36 /var/cache/pacman/pkg/xorg-server-xvfb-1.18.3-1-x86_64.pkg.tar.xz
-rw-r--r-- 1 root  27K Apr  5 19:36 /var/cache/pacman/pkg/xorg-server-common-1.18.3-1-x86_64.pkg.tar.xz
-rw-r--r-- 1 root 1.3M Apr  5 19:36 /var/cache/pacman/pkg/xorg-server-1.18.3-1-x86_64.pkg.tar.xz

/tmp/.X11-unix/X0存在并且由 root 拥有:

$ ls -l /tmp/.X11-unix
total 0
srwxrwxrwx 1 root root 0 Apr  5 21:22 X0

如果我跑步sudo ddd,它就会起作用。

我不确定是否应该编写错误报告,或者这是否是我本地系统上的错误。你能帮我缩小范围吗?

答案1

结果发现是配置问题。移动~/.ddd目录以便ddd使用新的配置,解决了问题。

这解释了为什么它与 sudo 一起工作,因为它是作为 root 用户执行的,没有混乱的配置。

值得一提的是,我对strace输出的解释也不正确。看到recvmsg返回循环EAGAIN(“资源暂时不可用”)是正常行为。它仅意味着应用程序正在轮询套接字以查找事件。这就是它与 X11 通信的方式。

相关内容