Iniciando um programa em uma sessão de tela via SSH

2

Ok, existem alguns tópicos semelhantes a este, mas o que eu quero fazer é executar um programa em uma sessão de tela em um computador remoto.

Assumindo minha liderança em this thread

Na esperança de que esteja correto, estou inserindo o comando:

ssh  [email protected] "screen -S test -d -m roslaunch startup startup_node"

que não inicia uma nova sessão de tela "test" ou executa meu script "roslaunch startup startup_node"

Eu posso criar um "teste" de sessão remota:

ssh  [email protected] "screen -S test -d -m"

Mas como posso então executar um comando nele? Como o comando screen -X é usado com uma tela nomeada?

Eu tentei, com base em this :

 ssh [email protected] "screen -X stuff "roslaunch startup startup_node^M" "

mas, novamente, não parece iniciar o processo remotamente. Ambos os comandos funcionam se você já estiver ssh'd no controle remoto.

Eu também tentei escrever um script startnav.sh na minha máquina remota que contém screen -S nav -d -m roslaunch startup startup_node e eu corro:

ssh [email protected] -t "./startnav.sh"

Isso cria a instância da tela, no entanto, ela está inativa como na seguinte saída

    ~$ ssh [email protected] -t screen -r nav
     There is a screen on:
            4506.nav    (04/06/15 12:30:09) (Dead ???)
     Remove dead screens with 'screen -wipe'.
     There is no screen to be resumed matching nav.
     Connection to 192.168.1.5 closed.

Por fim, acompanhei o pergunta aqui

e pode obter comandos bash normais para executar, mas não "startup_node de inicialização do roslaunch"

por exemplo

ssh -f [email protected]  "screen -dm -S nav htop "

iniciará uma sessão htop em uma tela separada em uma máquina remota. O sinalizador -f parece ser importante. Mas ainda não funciona para um roslaunch ou um script que contenha roslaunch, mesmo que funcione se for executado sem ssh. Além disso, para um programa temporal como sleep 10 , a tela só existirá até que o script seja concluído em execução.

    
por rocklegend 05.06.2015 / 03:22

1 resposta

1

Como no exemplo final da questão, o problema não estava no ambiente ssh ou na tela, a não ser que várias variáveis de ambiente específicas do ROS não estivessem configuradas. Isso ocorreu porque ~/.bashrc não foi chamado no controle remoto, o que os configurou para mim.

Uma vez que incluí a configuração de variáveis de ambiente específicas,

source /ros/devel/setup.sh

o sistema funcionou corretamente.

Arquivo de script startnav.sh :

#!/bin/bash

source ~/ros_ws/devel/setup.sh
roslaunch startup startup_node.launch

E a chamada para carregar o arquivo de script:

ssh [email protected] -f "screen -S nav -dm ./startnav.sh"
    
por rocklegend 05.06.2015 / 09:19