我如何自动设置我的当前会话$ DISPLAYvariables

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

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

DISPLAY = localhost: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 

这是我刚刚敲的东西。 它检查上次启动的“gnome会话”过程的环境(当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文件中。

我在这里猜测,根据我曾经解决过的问题:

  • 您正在连接到计算机B上的vnc服务器,并使用计算机A上的VNC客户端进行显示
  • 您将在机器B上启动一个控制台(xterm或同等版本),并使用它连接到机器C.
  • 您希望在计算机C上启动基于X的应用程序,并将其显示给计算机B上的VNC服务器,以便您可以在计算机A上看到它。

我结束了两个解决方案。 我原来的解决方案是基于使用rsh。 从那以后,我们大部分的服务器都安装了ssh,这样做更简单了。

使用rsh,我把一个机器vs操作系统的表格和用perl指导这个过程的自定义选项放在一起。 Bourne shell是不够的,而且我们没有在Sun或HP机器上使用bash(当时AIX上没有bash) – AIX 5L还没有出来。 因为我们的大多数Linux机器都没有安装pdksh,所以Korn shell也没什么可选。 但是,如果你不面对这些限制,我想可以用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命令穿过加密的线路,并且总是返回到正确的位置。

你的vncserver有一个配置文件,可以设置显示号码。 要自动完成,一个解决方案是解析这个文件,提取数字并正确设置。 一个更简单(更好)是将这个显示号码设置在配置脚本中,并在你的VNC服务器配置和init脚本中使用它。

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