如何在EC2实例上无需手动RDP连接创建.Xauthority文件?
问题背景
你在搭载MATE桌面的Amazon Linux 2 EC2实例上,希望通过SSH连接后在实例本地运行GUI程序(如obs-studio),但因缺少.Xauthority文件且指定的DISPLAY对应的X服务器未启动,出现错误:Can't find source path /tmp/.X11-unix/X10: No such file or directory。手动RDP连接后该文件会自动生成,但需要无需手动操作的自动生成方法。
解决方案
方法1:通过User Data自动配置X服务器与.Xauthority
在实例启动的User Data脚本中添加以下内容,确保实例启动时自动启动图形界面并生成授权文件:
#!/bin/bash # 设置默认启动图形界面 systemctl set-default graphical.target systemctl start graphical.target # 等待X服务器完全启动 sleep 10 # 为ec2-user生成.Xauthority文件 su - ec2-user -c ' # 获取当前运行的X服务器DISPLAY编号(通常为:0) DISPLAY=$(ps aux | grep Xorg | grep -v grep | awk '\''{print $NF}'\'') if [ -z "$DISPLAY" ]; then DISPLAY=":0" # 手动启动X服务器(未自动启动时执行) startx & sleep 5 fi # 生成授权条目并保存到.Xauthority xauth generate $DISPLAY . trusted xauth add $DISPLAY . $(mcookie) '
方法2:SSH连接后手动生成(适用于已运行的实例)
如果实例已启动,可通过SSH连接后执行以下命令:
# 确认X服务器运行状态,获取正确的DISPLAY编号 ps aux | grep Xorg | grep -v grep # 假设DISPLAY为:0,生成.Xauthority文件 xauth generate :0 . trusted xauth add :0 . $(mcookie) # 导出正确的DISPLAY变量(替换为实际编号) export DISPLAY=:0 # 运行GUI程序 obs-studio
关键说明
- 错误中
/tmp/.X11-unix/X10不存在,是因为你指定的DISPLAY=:10没有对应的X服务器在运行。MATE桌面默认启动的X服务器通常使用:0,需以实际运行的X服务器编号为准。 .Xauthority文件的作用是验证X客户端与X服务器的连接权限,xauth命令用于管理该文件的授权条目。- 启动图形界面后,即使关闭RDP连接,X服务器仍会保持运行,后续SSH连接可直接使用已生成的
.Xauthority文件。
内容的提问来源于stack exchange,提问作者andbaxevanos
相关产品推荐
相关产品推荐

