我经常使用 GNU Screen。但是,我一直在尝试弄清楚是否有某种方法可以让 X11 应用程序在我使用 ssh 时通过 screen 转发(这是一个词吗?)。目前,如果我尝试通过 screen 运行“gedit”,它会在我的“服务器”计算机上打开,而不是在我的客户端上打开。如果我在 screen 之外执行相同操作,则一切都正常。但是我希望当我使用 screen 时一切都正常!
谢谢!
附言:我在 Google 上搜索过该问题,并且看到了对 xmove 的提及,但是我似乎无法在我的 ubuntu 上找到包含 xmove 的包。(ubuntu 10.10)
答案1
要手动执行此操作,一旦您通过 SSH 登录,但在重新连接到屏幕之前,请检查您的 DISPLAY 环境变量:
echo $DISPLAY
重新连接到屏幕后,明确设置环境变量:
export DISPLAY=:N.0
在哪里:N.0是附加之前显示的内容echo
。这并不完美,因为某些应用程序可能希望与会话 D-Bus 对话,而通过 SSH 连接发送会话 D-Bus 会稍微复杂一些。
答案2
存储库中有一个名为 xpra 的程序,它类似于 x11 的 gnu screen。使用起来并不太难:
X 持久远程应用程序
Xpra 为您提供 X 应用程序的 GNU Screen 功能。
它允许用户在本地机器上查看远程 X 应用程序,并断开与远程机器的连接并重新连接,而不会丢失正在运行的应用程序的状态。
答案3
Byobu 会自动重新连接 ssh 和 gpg 代理。我可以让它重新连接显示变量,如果这对您有帮助的话……
答案4
问题似乎是环境变量 XAUTHORITY 没有保留在屏幕会话中。我通过将以下内容添加到我的 .bashrc 中解决了这个问题。我认为这不是必要的,但我想你应该做了你必须做的事情:
# ensure X forwarding is setup correctly, even for screen
XAUTH=~/.Xauthority
if [[ ! -e "${XAUTH}" ]]; then
# create new ~/.Xauthority file
xauth
fi
if [[ -z "${XAUTHORITY}" ]]; then
# export env var if not already available.
export XAUTHORITY="${XAUTH}"
fi
我不认为这是最好的解决方案,或者最简洁的解决方案,但它确实有效。