如何为当前会话自动设置$ DISPLAY变量

时间:2009-06-29 09:12:45

标签: linux shell vnc

我看到$ display设置为localhost:0,0如果我在vnc服务器上运行这可能不正确,有没有办法在我的登录脚本中自动设置它?

5 个答案:

答案 0 :(得分:8)

你使用Bash吗?转到主目录中的.bashrc文件并设置变量,然后将其导出。

DISPLAY = localhost:0.0;导出DISPLAY

如果要为所有用户执行此操作,可以使用/ etc / bashrc。

您可能还想查看〜/ .bash_profile和/ etc / profile

修改

function get_xserver ()
{
    case $TERM in
       xterm )
            XSERVER=$(who am i | awk '{print $NF}' | tr -d ')''(' )    
            XSERVER=${XSERVER%%:*}
            ;;
        aterm | rxvt)           
            ;;
    esac  
}

if [ -z ${DISPLAY:=""} ]; then
    get_xserver
    if [[ -z ${XSERVER}  || ${XSERVER} == $(hostname) || \
      ${XSERVER} == "unix" ]]; then 
        DISPLAY=":0.0"          # Display on local host.
    else
        DISPLAY=${XSERVER}:0.0  # Display on remote host.
    fi
fi

export DISPLAY

答案 1 :(得分:7)

这是我刚刚被击倒的东西。它检查上次启动的“gnome-session”进程的环境(当VNC启动会话/窗口管理器时,正确设置了DISPLAY)。将“gnome-session”替换为VNC服务器在启动时启动的任何进程的名称。

PID=`pgrep -n -u $USER gnome-session`
if [ -n "$PID" ]; then
    export DISPLAY=`awk 'BEGIN{FS="="; RS="\0"}  $1=="DISPLAY" {print $2; exit}' /proc/$PID/environ`
    echo "DISPLAY set to $DISPLAY"
else
    echo "Could not set DISPLAY"
fi
unset PID

您应该只能将其放在.bashrc文件中。

答案 2 :(得分:1)

我猜这里是基于我过去曾解决过的问题:

  • 您正在连接到计算机B上的vnc服务器,使用计算机A上的VNC客户端显示它
  • 您在机器B上启动控制台(xterm或同等产品)并使用它连接到机器C
  • 你想在机器C上启动一个基于X的应用程序,让它显示在机器B上的VNC服务器上,这样你就可以在机器A上看到它。

我最终得到了两个解决方案。我原来的解决方案是基于使用rsh。从那时起,我们的大多数服务器都安装了ssh,这使得这更容易。

使用rsh,我将一个机器与操作系统表和自定义选项放在一起,这将在perl中指导这个过程。 Bourne shell还不够,我们在Sun或HP机器上没有bash(当时AIX上没有bash - AIX 5L还没有出来)。 Korn shell也不是一个选择,因为我们的大多数Linux机箱都没有安装pdksh。但是,如果你不面对这些限制,我认为你可以用ksh或bash实现这个想法。

无论如何,我基本上会运行'rsh $ machine -l $ user“$ cmd”'其中$ machine当然是我登录的机器,$ user,同样显而易见(虽然当我进去的时候)作为“root”这有一些差异,因为我们在某些机器上有多个根源,原因我并不完全理解),而且$ cmd基本上是“DISPLAY = $ DISPLAY xterm”,不过如果我推出了konsole,例如$ cmd将是“konsole --display = $ DISPLAY”。由于$ DISPLAY是在本地进行评估(正确设置),而不是通过rsh直接传递,因此显示将始终正确设置。

如果已经设置,我还必须确保没有人像重置DISPLAY那样愚蠢。

现在,我只使用ssh,确保服务器(sshd_config)上的X11Forwarding设置为yes,然后我可以ssh到机器,让X命令通过线加密,它总是会去回到正确的地方。

答案 3 :(得分:1)

您的vncserver有一个配置文件,用于设置显示编号。要自动执行此操作,一种解决方案是解析此文件,提取数字并正确设置。更简单(更好)的方法是在配置脚本中设置此显示编号,并在VNC服务器配置和init脚本中使用它。

答案 4 :(得分:0)

一旦登录,您需要告诉您的vnc客户端导出正确的$ DISPLAY。您如何做到这一点可能取决于您的vnc客户端。