Executar comandos em um convidado do Ubuntu na VirtualBox VM do host do Windows

3

Estou trabalhando em alguma codificação e tenho uma ideia que deve funcionar, mas não tenho idéia de como fazê-la funcionar. Estou usando o Wolfram Mathematica na minha máquina host do Windows para executar algum código, mas tenho que exportar um arquivo para um programa baseado em Linux que eu executo em uma VM do Ubuntu Virtualbox. A partir de agora, quando o arquivo é exportado, tenho que passar por cima e clicar nele para executá-lo.

Embora não seja muito trabalhoso, gostaria de automatizá-lo para que o Mathematica possa chamar meu outro programa e não precisar clicar em nada. Esforcei-me ao máximo para procurar ajuda on-line, mas, honestamente, isso está acima da minha cabeça (sou um engenheiro civil, que não conhece muito os computadores).

Aqui está o que eu tenho até agora:

C:\Program Files\Oracle\VirtualBox\VBoxManage guestcontrol "Ubuntu" execute --username (myname) --password (mypassword) --verbose --wait-exit --wait-stdout --image "/home/(myname)/Desktop/oof2-2.1.11/oof2"

Ele me diz VERR_ACCESS_DENIEDe fecha a sessão do convidado.

Quando executo o meu programa no Ubuntu, tudo o que preciso fazer é digitar oof2a janela do terminal e a inicialização, mas como faço para fazê-lo através da linha de comando? Eu li o manual de controle de convidados do VirtualBox e não vi nada que eu pudesse entender que se aplica diretamente. Qualquer ajuda é apreciada.

Como observação final, posso executar os exemplos fornecidos no manual de controle de convidados e eles funcionam bem.

Hogy88
fonte
Se você fizer login na máquina Ubuntu a partir do VirtualBox, poderá executar o aplicativo usando o caminho completo /home/(myname)/Desktop/oof2-2.1.11/oof2?
heavyd
Bem, na verdade eu não posso. Inicialmente dizia "acesso negado", então eu fiz o sudo ... e disse "comando não encontrado". Como descubro qual caminho o terminal está usando? Novamente, eu apenas digito "oof2" e ele aparece.
precisa saber é o seguinte
tentewhich oof2
heavyd
O caminho é '/ usr / local / bin / oof2'. Agora eu posso digitar todo o script acima, mas substituir o --image "..." por --image "/ usr / local / bin / oof2" e ele roda, eu acho. Ele diz o seguinte: Processo '...' iniciado Processo finalizado Código de saída = 1 (status = 500 [finalizado com sucesso]) Fechando a sessão do convidado ... Isso parece melhor, mas não tenho certeza qual é o próximo passo. Se eu digitar '/ usr / ...' no terminal, será exibida a GUI do oof2. Preciso executar a versão em texto e fazer com que ela carregue um script (digite '/ usr / local / bin / oof2 --text' no terminal e ele será inicializado). Alguma ideia?
Hogy88
oof2 --helpou oof2 -hveja se existe uma opção para transmitir um script. Mas se você estiver tentando iniciar um aplicativo GUI, poderá ter dificuldades porque o VirtualBox está iniciando uma nova sessão para o usuário que não estaria associada à área de trabalho atual.
heavyd

Respostas:

1

Aqui está a ajuda do vboxmanagecomando:

 guestcontrol              <uuid|vmname>

                             exec[ute]
                             --image <path to program> --username <name>
                             [--passwordfile <file> | --password <password>]
                             [--domain <domain>] [--verbose] [--timeout <msec>]
                             [--environment "<NAME>=<VALUE> [<NAME>=<VALUE>]"]
                             [--wait-exit] [--wait-stdout] [--wait-stderr]
                             [--dos2unix] [--unix2dos]
                             [-- [<argument1>] ... [<argumentN>]]

Portanto, o comando completo deve ser:

C:\Program Files\Oracle\VirtualBox\VBoxManage guestcontrol "Ubuntu" execute --username (myname) --password (mypassword) --verbose --wait-exit --wait-stdout --image "/usr/local/bin/oof2" -- --text

Observe o extra --. Tudo depois disso será passado como argumento para o processo.


Configurando SSH

  1. Instale o PuTTY na máquina host. ( Link direto para o instalador)
  2. Abra um terminal na VM e digite ip -4 addr. Procure seu endereço IP, ele estará ao lado da palavra "inet" na seção "eth0" (provavelmente será 10.0.2.XXX)
  3. Na janela da VM, abra o menu "Dispositivo" e selecione "Rede" -> "Configurações de rede". A partir daí, selecione "Port Forwarding"
  4. Adicione uma regra, Porta do host = 2222, IP do convidado =, Porta do convidado = 22. Clique em OK em todas as caixas de diálogo.
  5. Execute o putty, use localhostcomo o nome do host e 2222como a porta. Clique em "Abrir"

Se isso funcionar e você obtiver um terminal, agora poderá usar este comando para executar seu aplicativo:

C:\Program Files (x86)\PuTTY\plink.exe -P 2222 -pw mypassword myname@localhost  "/usr/local/bin/oof2" --text
pesado
fonte
Você tem algum conhecimento sobre maldições em Python? Ele está me dando '_curses.error: endwin () retornou Processo ERR terminada'
Hogy88
Não, mas eu diria que tem a ver com executá-lo dessa maneira. Você já tentou executá-lo no SSH?
heavyd 30/01
Eu não tenho, e eu não sei o que é ainda (desculpe ... se você imagiologia Homer Simpson tentando código, estou muito perto)
Hogy88
Não tem problema, é uma maneira de conectar-se pela rede e não através da caixa virtual. A VM está conectada à rede? Em caso afirmativo, qual o tipo de rede selecionado em VB (NAT, ponte, etc.)?
heavyd
É uma conexão NAT.
precisa saber é o seguinte