2

我不知道为什么,但是当我直接运行脚本时,与使用织物运行时相比,我得到了不同的结果。( http://docs.fabfile.org )

我正在尝试在亚马逊 ec2 vm 上的 ubuntu 13.04 上自动运行 vncserver 和 xfce4。

这是我的 shell 脚本:

echo $USER
vncserver -kill :1
pkill Xtightvnc|true; sleep 1; pkill -9 Xtightvnc|true
rm -fr $HOME/.vnc
mkdir $HOME/.vnc
chmod 700 $HOME/.vnc
echo 123457 | vncpasswd -f > $HOME/.vnc/passwd
chmod 600 $HOME/.vnc/passwd
cp /tmp/setuptmplts/home/_vnc/xstartup $HOME/.vnc/
chmod 755 $HOME/.vnc/xstartup
mkdir -p $HOME/.config
cp -a /tmp/setuptmplts/home/_config/xfce4 $HOME/.config/
vncserver -geometry 1366x768 -depth 24 :1

当我直接在 ec2 机器上运行此脚本时,它可以正常工作,我可以连接到它并查看 xfce 桌面。
但是当我用fabric运行它时,它运行没有错误,甚至我可以连接到vnc,但我只看到一个带有十字光标的灰色屏幕。这意味着我有 vncserver 进程但没有 xfce。

这是我的fabfile:

from fabric.api import run, env, task

env.use_ssh_config=True

@task
def vnc():
    run('/home/ubuntu/b')

我像这样运行我的 fabfile(我有一个 .ssh/config 文件):

fab -H ec2 vnc

它将没有错误地完成,但我没有 xfce 进程。

但是如果我通过 ssh 运行它,我将拥有 xfce 进程。

ssh ec2 /home/ubuntu/b

或者,如果我通过 ssh 连接到 vm,然后直接运行它,它就可以工作并且 xfce 是实时的。

我已将这两行添加到 bash 脚本 (/home/ubuntu/b) 的末尾:

sleep 3
echo `pgrep xfce`

而且我看到 xfce 在这两种情况下都是有效的!这意味着当我尝试使用织物时,我有 xfce!但我看到当织物完成它的工作时,xfce 进程就死了!当 vncserver 处于活动状态时。

我的 xstartup 文件是这样的(/tmp/setuptmplts/home/_vnc/xstartup):

#!/bin/sh

xrdb $HOME/.Xresources
xsetroot -solid grey
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession

我尝试取消注释 x-window-manager 但没有什么不同。xfce 进程在织物完成后死亡,但在我尝试使用 ssh 或直接使用时仍然存在。

4

2 回答 2

2

我从 Jeff Forcier (@bitprophet) 那里得到了这个答案 - 谢谢 Jeff

尝试在 run()/sudo() 中使用 'pty' 参数(也应该是一个 CLI 标志,在全局范围内控制相同的东西) - 我怀疑您在该脚本中运行的某些应用程序对控制 pty 敏感或缺少其中。这通常是造成这种行为差异的原因。

于 2013-10-17T16:49:59.940 回答
1

我怀疑您的 bash(或您通常使用的任何 shell)有一个在执行 Fabric 时未设置的环境变量。在 Fabric 中执行“导出”并将其与登录时获得的列表进行比较。

更具体地说,我怀疑它与DISPLAY未设置的变量有关。

查看https://stackoverflow.com/a/13801188/260805以在 Fabric 中设置环境变量。

于 2013-10-17T14:39:46.560 回答