X11在Gnu屏幕上转发,是否可能?

我经常使用GNU Screen。 但是,我一直试图弄清楚当我正在进行时,是否有某种方式让X11应用程序在屏幕上转发(这是一个字吗?)。 目前,如果我尝试通过屏幕运行’gedit’,它将在我的“服务器”计算机上打开,而不是在我的客户端上打开。 如果我在屏幕外做同样的事情,那么一切都很好。 但是当我使用屏幕时,我希望一切都很好!

谢谢!

PS:我已经google了问题,我看到xmove的提及,但我似乎无法在我的ubuntu上找到包含xmove的包。 (ubuntu 10.10)

要手动执行此操作,在进入SSH后,但在重新连接到屏幕之前,请检查DISPLAY环境变量:

echo $DISPLAY 

重新连接到屏幕后,显式设置环境变量:

 export DISPLAY=:N.0 

其中:N.0是附着前echo显示的内容。 这将不是完美的,因为某些应用程序可能期望与会话D-Bus通信,这通过SSH连接发送有点复杂。

在存储库中有一个名为xpra的程序,就像x11的gnu屏幕一样。 使用起来并不难:

X持久远程应用程序

Xpra为您提供了GNU Screen for X应用程序的function。

它允许用户在本地计算机上查看远程X应用程序,并从远程计算机断开连接并重新连接,而不会丢失正在运行的应用程序的状态。

Byobu自动重新连接ssh和gpg代理。 我可以让它重新附加显示变量,如果这对你有帮助…

这就是我在运行byobu时的工作方式

在“_byobu_source ..”行之前.bash_login中添加以下行:

 echo $DISPLAY > $HOME/.display.env 

然后将此行添加到.bashrc

 if [ ! -z ${SSH_CONNECTION+x} ]; then export DISPLAY=$(cat $HOME/.display.env) fi 

似乎问题是环境变量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 

我不认为这是最好的解决方案,或者最简洁,但它确实有效。

FreeNX是一个用于处理远程显示的精彩应用程序。

根据@harre建议,我发现这是最好的工作解决方案,至少对于RHEL来说是Putty。 我知道有一种比创建一个包含var的文件更好的方法,但是当通过gnu screen加载时,这可以使得X11能够访问DISPLAY

自动化解决方案

添加到.bashrc (或.bash_profile ,具体取决于您的用例)

 #.bashrc if [ -f ~/etc/.bash-screen-x11 ]; then echo $DISPLAY > $HOME/.display.env source ~/etc/.bash-screen-x11 fi 

然后添加以下文件(或您的路径选择)

 #~/etc/.bash-screen-x11 # sets back display var. if [ -z $STY ]; then export DISPLAY=$(cat $HOME/.display.env) fi