Разные результаты между прогоном ткани и прямым прогоном

Я не знаю почему, но я получаю разные результаты, когда я запускаю сценарий напрямую, по сравнению с тем, когда я запускаю его с тканью. (http://docs.fabfile.org)

Я пытаюсь автоматически запустить vncserver и xfce4 на ubuntu 13.04 на amazon ec2 vm.

Это мой сценарий оболочки:

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.
Но когда я запускаю его с тканью, он работает без ошибок, и даже я могу подключиться к 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

Или, если я подключаюсь к vm через ssh, а затем запускаю его напрямую, он работает, и 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 или напрямую.


person iman    schedule 17.10.2013    source источник


Ответы (2)


Я получил этот ответ от Джеффа Форсьера (@bitprophet) - Спасибо, Джефф

Попробуйте повернуть аргумент pty для run () / sudo () (также должен быть флаг CLI, управляющий тем же самым глобально) - я подозреваю, что некоторые из приложений, которые вы запускаете в этом скрипте, чувствительны к управляющему pty или не имеют из них. Часто это является причиной различий в поведении.

person iman    schedule 17.10.2013

Я подозреваю, что ваш bash (или любая другая оболочка, которую вы обычно используете) имеет переменную среды, которая не устанавливается при выполнении Fabric. Выполните «экспорт» в Fabric и сравните его со списком, который вы получаете при входе в систему.

В частности, я подозреваю, что это связано с неустановленной переменной DISPLAY.

Взгляните на https://stackoverflow.com/a/13801188/260805 для установки переменных среды в Fabric.

person Ztyx    schedule 17.10.2013