Como associar tipos de arquivos no host Linux com aplicativos do Windows por meio do VirtualBox?

3

Como posso associar tipos de arquivos no Linux de desktop com aplicativos do Windows 7 executados pelo VirtualBox para que funcionem perfeitamente, iniciando o VirtualBox, se necessário?

Estou usando o KDE.

Método atual

(exemplo para arquivos do Excel):

Adicione uma nova entrada no menu inicial chamada "Excel"

  • Comando: /home/USER/bin/excelstarter.sh% f
    • Veja abaixo
  • O feedback de lançamento não funciona bem, por isso está desativado

Associe arquivos .xlsx ao "Excel" clicando com o botão direito do mouse e escolha executar como ...

  • Lembre-se de associações de aplicativos para todos os arquivos do tipo ...

Montar pastas relevantes no VirtualBox

  • Janela principal do VirtualBox > Configurações para máquina > Pastas compartilhadas:

    • Adicionar:
      • Caminho da pasta: / data
      • Montagem automática
      • Torne permanente
    • Adicionar:
      • Caminho da pasta: / home / USER
      • Montagem automática
      • Torne permanente

Desativar restrição de política de grupo em senhas vazias

Sem essa alteração, o VirtualBox não executará comandos se nenhuma senha tiver sido definida.

  • Executar gpedit.msc
  • Navegue até

    Configuração do Computador \ Configurações do Windows \ Configurações de Segurança \ Políticas Locais \ Opções de Segurança

  • Alterar

    Limitar o uso de senhas em branco da conta local ao logon de console somente para Desativado .

excelstarter.sh

A idéia aqui é que este arquivo cuida de iniciar o VirtualBox se ele ainda não estiver em execução, aguardando que ele seja iniciado e, em seguida, inicie o Excel com um caminho de arquivo que foi traduzido para as montagens correspondentes configuradas no VirtualBox. p>

# Start VM (if it is already started this does nothing)
VBoxManage startvm "win7_hilti"

# Replace folders with windows-local versions (mounts need to be setup)
# /data/ is mounted as F:
original=$1
findWhat=\/data/
replaceWith="F:\"
fixedFilePath="${original/$findWhat/$replaceWith}"

# /home/USER/ is mounted as G:
original=$fixedFilePath
findWhat=\/home\/USER/
replaceWith="G:\"
fixedFilePath="${original/$findWhat/$replaceWith}"

# Used for debugging the file paths
#notify-send $fixedFilePath

# Start Excel
# Try to run it until it the machine has started
until VBoxManage guestcontrol "VM-NAME" start --exe "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" --username WINDOWSUSER "excel" -- "$fixedFilePath"
do
  # Sleep 1 gave the problem that the mounts were not yet ready, sleep 2 seems to work fine
  sleep 2
done

Problemas

  • O VirtualBox não recebe o foco se já estava sendo executado em segundo plano.
  • Feio adormecido no loop enquanto aguarda o início do VirtualBox. O sono 1 deu problemas onde as montagens ainda não estavam configuradas. Em uma máquina mais lenta, esse valor pode precisar ser aumentado.
  • Às vezes, ele não inicia o Excel após o início do VirtualBox.

Referências

Controle de guest do VBoxManage

A correção para ativar o uso sem senha

    
por JKAbrams 07.05.2017 / 09:39

1 resposta

1

Vários ajustes:

- em vez de codificar o caminho para o aplicativo, usei o comando cmd.exe start:

options=( --username WINDOWSUSER --exe "%SystemRoot%\system32\cmd.exe" -- 'cmd' /c start "run this" "$fixedFilePath" ) onde $ fixedFilePath é como no seu código. Essas opções funcionam mesmo se $ fixedFilePath contiver espaços em branco.

Isso generaliza o script - ele funcionará agora para qualquer tipo de arquivo, não apenas para arquivos do Excel.

Ele também deve funcionar se $ fixedFilePath for um caminho completo para um programa dentro do convidado do Windows; o nome (com extensão) de um programa em% PATH; ou o nome (com extensão) se um programa registado, e. winword.exe, excel.exe.

Eu então testei a string retornada pelo VBoxManage guestcontrol no stderr:

nError=1
nTries=0

while [ $nError -gt 0 ] && [ $nTries -lt 20 ]; do

   nError=$(VBoxManage guestcontrol win7_hilti start "${options[@]}" 2>&1 >/dev/null | grep -c "error")
   ((++nTries))
   sleep 2

done

(alguns dos quais eu peguei emprestado de esta fonte )

    
por 11.08.2017 / 10:52