我看到$ display设置为localhost:0,0如果我在vnc服务器上运行这可能不正确,有没有办法在我的登录脚本中自动设置它?
答案 0 :(得分:8)
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)
我猜这里是基于我过去曾解决过的问题:
我最终得到了两个解决方案。我原来的解决方案是基于使用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客户端。