You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用X11转发的rsync未设置DISPLAY变量的问题求助

解决rsync+ssh-X+sudo在Manjaro上DISPLAY未设置的问题

问题根源

单独执行ssh -X user@server 'sudo ls'能正常弹出密码窗口,但rsync调用时却提示Can't open display:,本质是rsync通过ssh发送命令时,远程的sudo进程没有继承到DISPLAY环境变量——直接ssh登录时shell会自动加载环境变量,但rsync是直接执行远程命令,跳过了shell的环境初始化环节。

解决方案

方案1:手动传递DISPLAY变量到远程sudo命令

修改rsync命令,把本地的DISPLAY变量直接注入到远程的rsync-path中:

rsync -Payz --delete --recursive -e "ssh -X" --rsync-path="DISPLAY=$DISPLAY sudo -A rsync" user@server:backup .

这样远程的sudo进程就能拿到DISPLAY值,ssh-askpass可以在你的Manjaro笔记本上弹出密码窗口。

方案2:修改服务器sudoers配置(更省心)

如果不想每次命令都带DISPLAY参数,可以在Debian服务器上配置sudo允许保留DISPLAY变量,或者直接给你的用户免密执行rsync权限:

  1. 登录服务器,执行sudo visudo编辑sudoers文件
  2. 添加以下任意一行:
    • 免密执行rsync(最省事,注意安全):
      your_server_username ALL=(ALL) NOPASSWD: /usr/bin/rsync
      
    • 让sudo保留DISPLAY环境变量:
      Defaults env_keep += "DISPLAY"
      
  3. 保存退出后,再执行原来的rsync命令即可正常工作。

验证方法

执行修改后的命令后,如果弹出密码输入窗口,输入服务器用户的sudo密码就能正常同步root属主的文件了。

内容的提问来源于stack exchange,提问作者Eternal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:52:35