几天前,我的 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 是否有可能尝试恢复之前运行的容器的状态?任何人都可以提供有关如何防止这种情况的任何提示吗?