修复 /tmp 的多实例化导致“connect /tmp/.X11-unix/X0:没有这样的文件或目录”

修复 /tmp 的多实例化导致“connect /tmp/.X11-unix/X0:没有这样的文件或目录”

/tmp在具有目录的多座桌面系统中多实例化/tmp/.X11-unix/目录和Xn实例仍然是在 root 下创建的,/tmp而不是在用户下创建的。

ssh -Y开箱或开箱并尝试运行 X11 应用程序(通过 X 转发)会生成connect /tmp/.X11-unix/X0: No such file or directory

据推测,这是因为会话是由未实例化的 root 或系统用户帐户创建的,因此最终位于传统/tmp位置。

有没有办法解决这个问题,或者它们只是不兼容?

系统当前用作lightdm登录管理器,因此Xorg会话由 root 运行。

答案1

一种解决方法(不是完整的解决方案)是封装ssh在创建中继的脚本中。

~/bin/ssh

# Do we have a display?
# Does our display relay exist?
if [ ! -z $DISPLAY ] && \
   [ ! -e "/tmp/.X11-unix/X${DISPLAY#*:}*" ]
then
    # Create X11-unix dir if need be.
    mkdir -p /tmp/.X11-unix

    # Create reusable display relay
    socat \
     UNIX-LISTEN:/tmp/.X11-unix/X${DISPLAY#*:},fork,reuseaddr \
     ABSTRACT-CONNECT:/tmp/.X11-unix/X${DISPLAY#*:} \
     &>/dev/null &
fi

# Do the useful thing...
/usr/bin/ssh $@

相关内容