编辑1

编辑1

几天前,我的 Debian 8 机器中的 X 服务器启动过程中断了。我不确定是什么导致了这种情况,但可能是 apt-get 升级或回滚尝试安装 Nvidia 驱动程序。

每次重新启动后 /var/log/Xorg.0.log 都会显示以下跟踪:

[    60.603] _XSERVTransSocketUNIXCreateListener: ...SocketCreateListener() failed
[    60.603] _XSERVTransMakeAllCOTSServerListeners: server already running
[    60.603] (EE) 
Fatal server error:
[    60.603] (EE) Cannot establish any listening sockets - Make sure an X server isn't already running(EE)
[    60.603] (EE) 
Please consult the The X.Org Foundation support 
         at http://wiki.x.org
 for help. 
[    60.603] (EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information.
[    60.603] (EE) 
[    60.603] (EE) Server terminated with error (1). Closing log file.

服务器未运行,但 /tmp/.X11-unix/X0 存在并且是一个目录,而不是套接字。如果我以 root 身份登录并执行

rmdir /tmp/.X11-unix/X0 ; service kdm restart

然后X服务器启动没有问题。

知道可能发生什么情况以及如何解决此问题以便 X 服务器可以在没有用户干预的情况下启动吗?

编辑1

以下find命令没有返回任何结果(根本没有输出):

find /etc /var /usr -type f -print0 | xargs -0 grep X11-unix | grep mkdir
find / -mount -path /dev -prune -o -path /proc -prune -o -type f -print0 | xargs -0 grep X11-unix | grep mkdir

所以我将-a exit,always -S all -F dir=/tmp/.X11-unix规则添加到/etc/audit.rules,产生了以下痕迹:

type=SYSCALL msg=audit(1495391670.743:93): arch=c000003e syscall=83 success=yes exit=0 a0=c2082a2420 a1=1ed a2=0 a3=0 items=2 ppid=1 pid=926 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="docker" exe="/usr/bin/docker" key=(null)
type=CWD msg=audit(1495391670.743:93):  cwd="/"
type=PATH msg=audit(1495391670.743:93): item=0 name="/tmp/.X11-unix/" inode=48365573 dev=fe:02 mode=041777 ouid=0 ogid=0 rdev=00:00 nametype=PARENT
type=PATH msg=audit(1495391670.743:93): item=1 name="/tmp/.X11-unix/X0" inode=48365588 dev=fe:02 mode=040755 ouid=0 ogid=0 rdev=00:00 nametype=CREATE
type=PROCTITLE msg=audit(1495391670.743:93): proctitle=2F7573722F62696E2F646F636B6572002D64002D480066643A2F2F

成功的系统调用 83 就是成功的mkdir,不是吗?这个问题已经成为Docker问题。在过去的几周里,我开始-volume /tmp/.X11-unix:/tmp/.X11-unix在我的容器中使用码头化X11 应用程序。然而,我不明白为什么它要创建目录/tmp/.X11-unix/X0,考虑到我没有X0在路径中指定部分,而且这些容器是在桌面加载后启动的,而不是之前。

Docker 是否有可能尝试恢复之前运行的容器的状态?任何人都可以提供有关如何防止这种情况的任何提示吗?

相关内容