12

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

4

5 回答 5

10

这是我刚刚敲过的东西。它检查上次启动的“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 文件中。

于 2009-07-21T23:47:08.780 回答
8

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

显示=本地主机:0.0;导出显示

如果您想为所有用户执行此操作,您可以使用 /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
于 2009-06-29T09:23:49.080 回答
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,确保服务器上的 X11Forwarding 设置为 yes(sshd_config),然后我可以 ssh 到机器,让 X 命令通过加密的线路,它总是会回到正确的地方。

于 2009-06-29T16:46:50.310 回答
1

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

于 2009-07-17T08:19:28.923 回答
0

登录后,您需要告诉您的 vnc 客户端导出正确的 $DISPLAY。如何执行此操作可能取决于您的 vnc 客户端。

于 2009-06-29T11:43:47.207 回答