Używanie włóczęgi do uruchamiania maszyn wirtualnych w środowisku graficznym

148

Środowisko programistyczne mojej firmy oparte jest na maszynach wirtualnych działających na VirtualBox. Chcielibyśmy pójść o krok dalej i wykorzystać możliwości Vagranta, aby mieć opis maszyny w pliku tekstowym, a następnie móc „podnieść” tę maszynę na podstawie tego pliku tekstowego. W połączeniu z marionetką rozwiązałoby to problem polegający na tym, że każdy ma różne wersje oprogramowania zainstalowane na maszynie wirtualnej.

Jednak Vagrant wydaje się być bardzo skoncentrowany na rozwijaniu się na hoście, pozostawiając maszynę w tle. Musielibyśmy mieć nasze środowisko programistyczne w maszynie, więc potrzebowalibyśmy pełnego GUI, więc podczas wpisywania „vagrant up” powinna pojawić się maszyna z kompletnym środowiskiem graficznym (XFCE, KDE…).

Jak dotąd udało mi się stworzyć "podstawowe" pudełko z dystrybucji Xubuntu. Ale kiedy piszę „vagrant up”, mimo że pojawia się pulpit i mogę się poprawnie zalogować, Vagrant zawiesza się po wyświetleniu komunikatu „Oczekiwanie na uruchomienie komputera. Może to potrwać kilka minut ...”. Po chwili Vagrant wywala z powodu przekroczenia limitu czasu. Dlatego foldery współdzielone nie są tworzone ani nie jest wykonywany program obsługi pakietów -puppet-.

Jak stworzyć maszynę wirtualną z pełnym GUI przy użyciu Vagrant?

PRiera
źródło
1
Nigdy nie miałem problemu z używaniem tych pudełek . Może coś poszło nie tak, kiedy zapakowałeś swoje podstawowe pudełko.
bfitzpatrick
1
z naiwnego punktu widzenia, jeśli możesz programować na hoście, a nie na maszynie wirtualnej, dlaczego zawracasz sobie głowę instalacją funkcji GUI na Vagrant VM? dlaczego nie rozwinąć się na hoście?
Alexander Mills,
Programowanie na maszynie wirtualnej może skutkować mniejszą liczbą problemów, gdy specyfikacje VM / Vagrant są utrzymywane przez zespół programistów, aby były zsynchronizowane ze środowiskiem docelowym aplikacji. Otrzymasz mniej pełzających zależności i zachowań, które są unikalne dla twojego programisty. środowisko, gdy nie jest obecne (lub nie jest identyczne) w docelowym środowisku / instalacji.
Jim Dennis,
W rzeczywistości twój wniosek nie jest całkowicie słuszny. Vagrant nie polega na tym, aby środowisko deweloperskie było poza pudełkiem. Wiele osób w Linuksie rozwija się w terminalu. I możesz to zrobić dobrze z pudełkami włóczęgów tylko ssh.
erikbwork

Odpowiedzi:

150

Po prostu działam w trzech krokach. Porady askubuntu.comudzielone przeze mnie nie do końca zadziałały, więc wypróbuj tę uproszczoną wersję:

  1. Uzyskaj działający podstawowy obraz Ubuntu. Powinieneś być w stanie go uruchomić i vagrant ssh.
  2. Następnie włącz wyświetlacz VirtualBox, który jest domyślnie wyłączony. Zatrzymaj maszynę wirtualną i odkomentuj te wiersze w Vagrantfile:
    config.vm.provider: virtualbox do | vb |
      vb.gui = true
    koniec
  3. Uruchom maszynę wirtualną i obserwuj nowe okno wyświetlania. Teraz wystarczy zainstalować i uruchomić xfce4. Użyj vagrant sshi:
    sudo apt-get install xfce4
    sudo startxfce4 &
    

Jeśli po raz pierwszy używasz tego środowiska Ubuntu, przed zainstalowaniem xfce4 musisz uruchomić następujące polecenie:

sudo apt-get update

To wszystko, powinieneś trafić na xfce4sesję.

Aktualizacja: aby uzyskać lepsze wrażenia, polecam te ulepszenia:

  1. Nie uruchamiaj GUI jako root. Naprawdę chcesz pozostać vagrantużytkownikiem. Aby to zrobić, musisz zezwolić każdemu na uruchamianie GUI: sudo vim /etc/X11/Xwrapper.configi edycję go na allowed_users=anybody.
  2. Następnie zainstaluj narzędzia gościa VirtualBox przed uruchomieniem GUI. Zapewni to zdrową rozdzielczość ekranu, zintegrowaną mysz itp.
    $ sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
    $ sudo VBoxClient-all
  3. Dopiero teraz powinieneś uruchomić GUI jako vagrantużytkownik, z $ startxfce4&.

Aktualizacja 2: Wypróbowałem to dzisiaj, a VBoxClient-allskrypt nie zawsze jest instalowany. Jeśli go brakuje, możesz zastąpić go odpowiednikiem:

sudo VBoxClient --clipboard
sudo VBoxClient --draganddrop
sudo VBoxClient --display
sudo VBoxClient --checkhostversion
sudo VBoxClient - bez szwu
Powietrze
źródło
2
Chciałem tylko wpaść i powiedzieć, że po około 5 godzinach próby zmuszenia xfce do pracy w pudełku włóczęgi Fedory 19, rozwiązaniem była instalacja pakietu gościa virtualbox (yum install VirtualBox-guest.x86_64). Bez tego pakietu xorg z jakiegoś powodu nie mógł uzyskać dostępu do mojego monitora maszyny hosta. Więc ... Dzięki stary!
billmalarky
Próbując tego odkryłem, że kod kroku 3 musi być zawarty w Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| ... donemetodzie pliku Vagrantfile.
neontapir,
1
Możesz udostępnić Xwindows itp. Z Vagrant, dołączając następujące elementy do pliku Vagrantfile: #Provision X Windows, VirtualBox Guest, curl i inne pakiety apt config.vm.provision: shell,: inline => "sudo apt-get install -y curl xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11 "config.vm.provision: shell,: inline =>" sudo VBoxClient-all "</code>
Farrukh Najmi
2
Tylko ostrzeżenie,
Air
1
Wygląda na startxfce4to, że po zainstalowaniu można go uruchomić jako użytkownik inny niż root w systemie Ubuntu 16.04 (xenial)xserver-xorg-legacy
Laurence Billingham
74

Oto doskonała odpowiedź Air w postaci pliku Vagrantfile

Vagrant.configure(2) do |config|
  # Ubuntu 15.10
  config.vm.box = "ubuntu/wily64"

  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = true
  end

  # Install xfce and virtualbox additions
  config.vm.provision "shell", inline: "sudo apt-get update"
  config.vm.provision "shell", inline: "sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11"
  # Permit anyone to start the GUI
  config.vm.provision "shell", inline: "sudo sed -i 's/allowed_users=.*$/allowed_users=anybody/' /etc/X11/Xwrapper.config"
end

Aby uruchomić vm

vagrant up

Zaloguj się, podając nazwę użytkownika :, vagranthasło: vagrantpoprzez monit logowania w interfejsie użytkownika virtualbox.

Uruchom xfce

startx
Nik
źródło
To zadziałało dla mnie z dwoma małymi poprawkami. Najpierw otrzymałem 404, gdy szukałem pudełka „ubuntu / vivid64”, więc zmieniłem je na „larryli / vivid64”, które znalazłem na vagrantcloud. Po drugie musiałem dodać zainstalować wtyczkę vagrant-proxyconf do zarządzania ustawieniami proxy.
Daniel Watrous
2
Krzyczy -> startx nie jest obecnie zainstalowany?
prayagupd
1
Mój zły, Internet nie został skonfigurowany w virtualbox do pobrania xfce4. Teraz działa, ale czy jest sposób, aby pominąć logowanie i xfce4domyślnie uruchomić ?
prayagupd
@prayagupd jest nieco stary, ale czy możesz rozwinąć temat „Internet nie został skonfigurowany w virtualbox do pobrania xfce4”? Otrzymuję ten sam błąd podczas uruchamiania startx povagrant ssh
Joshua Zastrow
1
Mam problem, gdy moje wirtualne okno mówi „startx: polecenie nie zostało znalezione”. Czy ktoś mógłby mi pomóc zdiagnozować to?
OOProg
11

Moje 2 centy

  • Upewnij się, że korzystasz z najnowszego vagranta (teraz 1.3.3) + VirtualBox (4.2.18), aby uniknąć błędów.

  • Możesz użyć skryptu powłoki lub polecenia wbudowanego, aby zainstalować środowisko pulpitu lub lekkiego menedżera okien

    Na przykład zainstalować LXDE na górze Ubuntu 12.04 Precise polu bazowej z vagrantbox.es

Vagrant.configure("2") do |config|
  # ... other configuration

  config.vm.provision "shell" do |s|
    s.inline = "apt-get install lubuntu-desktop -y"
  end
end
  • Jeśli budujesz własne pudełka bazowe włóczęgów, upewnij się, że postępujesz zgodnie z instrukcjami pakowania pudełka podstawowego lub rozważ narzędzia takie jak pakowacz (lub veewee) do zautomatyzowania budowy.
Terry Wang
źródło
9

Oto nieco dostosowany plik Vagrantfile dla Ubuntu 18.04 LTS / bionic - dzięki odpowiedziom Air i Nika oraz ten post wyjaśniający, jak zwiększyć rozmiar dysku podczas korzystania z VirtualBox (domyślnie = 10 GB).

Maszyna wirtualna zawiera ekran logowania LightDM.

Aktualizacja: utworzyłem repozytorium GitHub na podstawie tego przykładu i dodałem wiele pakietów oprogramowania do programowania frontend + backend.

# Optional - enlarge disk:
#vagrant plugin install vagrant-disksize
vagrant up
vagrant reload
# After reboot, the VM screen should show the LightDM login screen.
# Log in as user "vagrant", password "vagrant".
Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/bionic64"
  # Optional - enlarge disk (will also convert the format from VMDK to VDI):
  #config.disksize.size = "50GB"

  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = true
  end

  # /ubuntu/1067929/on-18-04-package-virtualbox-guest-utils-does-not-exist
  config.vm.provision "shell", inline: "sudo apt-add-repository multiverse && sudo apt-get update"

  # Install xfce and virtualbox additions.
  # (Not sure if these packages could be helpful as well: virtualbox-guest-utils-hwe virtualbox-guest-x11-hwe)
  config.vm.provision "shell", inline: "sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11"
  # Permit anyone to start the GUI
  config.vm.provision "shell", inline: "sudo sed -i 's/allowed_users=.*$/allowed_users=anybody/' /etc/X11/Xwrapper.config"

  # Optional: Use LightDM login screen (-> not required to run "startx")
  config.vm.provision "shell", inline: "sudo apt-get install -y lightdm lightdm-gtk-greeter"
  # Optional: Install a more feature-rich applications menu
  config.vm.provision "shell", inline: "sudo apt-get install -y xfce4-whiskermenu-plugin"
end
mh8020
źródło
W Ubuntu 16.04 musiałem zainstalować xserver-xorg-legacy, aby plik XWrapper.config istniał / był używany.
MZB
Dalsze testy sugerują, że linia sed może nie być potrzebna, zgodnie z komentarzem w połączonym repozytorium github.
MZB
@ mh8020 Dziękujemy za utworzenie repozytorium github. Bardzo czysty i łatwy do naśladowania, właśnie to, czego potrzebowałem. Tylko jeden problem: nie mogę uruchomić dźwięku w systemie gościa Ubuntu! Masz jakiś pomysł, co mogłoby to umożliwić w twojej obecnej konfiguracji?
timmwagener
7

Używam obrazu pulpitu Ubuntu, działa dobrze z dwoma monitorami w systemie Windows z dostawcą wirtualnych skrzynek.

Vagrant.configure(2) do |config|
  config.vm.box = "box-cutter/ubuntu1404-desktop"

  config.ssh.forward_agent = true

  config.vm.network "forwarded_port", guest: 8080, host: 8080
  config.vm.network "forwarded_port", guest: 3000, host: 3000


  config.vm.synced_folder "../../git", "/home/vagrant/git"

  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
    vb.customize ["modifyvm", :id, "--monitorcount", "2"]
    vb.memory = "2048"
  end
end
Andrzej Rehmann
źródło
3
vb.customize ["modifyvm", :id, '--audio', 'dsound', '--audiocontroller', 'ac97']aby uzyskać dźwięk z vm (w razie potrzeby)
Igonato
narzędzie do cięcia pudełek nie dostarcza już gotowych obrazów.
krock
5

Możesz również rozważyć użycie programu Packer do tworzenia obrazów VirtualBox dla programistów.

Zamiast udostępniać plik Vagrantfile, którego programiści używają do budowania i uruchamiania swoich maszyn wirtualnych, miałbyś szablon pakera (json), który jest używany do tworzenia obrazu maszyny wirtualnej. Programiści pobierają lub kopiują obraz i uruchamiają go lokalnie, bezpośrednio w VB, bez konieczności samodzielnego tworzenia.

Wiele z publicznie udostępnionych pudełek bazowych Vagrant jest tworzonych za pomocą Packera.

Kief
źródło
2

/ubuntu/300799/does-ubuntu-12-04-lts-32-bit-have-graphic-user-interface/300805#300805

Po zainstalowaniu pulpitu będziesz również chciał zainstalować GDM, który pozwoli ci uruchomić bezpośrednio w środowisku graficznym. Będziesz także chciał to skonfigurować.

Więc może to dodać?

Vagrant::Config.run do |config|
    config.vm.provision :shell, :inline => "sudo apt-get install gdm"
    config.vm.provision :shell, :inline => "sudo dpkg-reconfigure gdm"
end
Anthony Roberts
źródło
1
... lub lżejszy xdm
geekQ
1

Poprawiłem trochę odpowiedź Nik, aby uniknąć HTTP 404:

Vagrant.configure(2) do |config|
  # Ubuntu 15.10
  config.vm.box = "bento/ubuntu-18.04"

  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = true
  end

  # Install xfce and virtualbox additions
  config.vm.provision "shell", inline: "sudo apt-get update"
  config.vm.provision "shell", inline: "sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11"
  # Permit anyone to start the GUI
  config.vm.provision "shell", inline: "sudo sed -i 's/allowed_users=.*$/allowed_users=anybody/' /etc/X11/Xwrapper.config"
end
Stepan Yakovenko
źródło
0

Dodając do powyższego komentarza billmalarky'ego, na fedorze 20 przed uruchomieniem xfce konieczne było:

  • Zainstaluj VirtualBox-guest.rpm (dostępne w repozytoriach rpmfusion)
  • grupy yum oznaczają instalację „graphical_environment”
  • yum groupinstall „Xfce”
  • yum zainstaluj xorg-x11-drivers

Oto kod:

config.vm.provision "shell", inline: <<-SHELL        
    #Install Virtual Box guest additions from rpmfusion repos
    cd /vagrant
    yum install -y rpmfusion-free-release-20.noarch.rpm 
    yum install -y rpmfusion-nonfree-release-20.noarch.rpm
    yum update -y
    yum install -y VirtualBox-guest

    #Add XFCE desktop to fedora server
    yum groups mark install 'graphical_environment'
    yum groupinstall -y "Xfce"
    yum install -y xorg-x11-drivers   
SHELL
Izak Marais
źródło
0

Podobnie jak xfce4rozwiązanie @Air. Kiedyś odniosłem sukces, ale dziś nie udało mi się z Ubuntu16.04. Mam ten błąd:

xrdb can't open display 1

Ale na szczęście okazało się, że to działa:

startx
Scil
źródło
0

Widzę, że kilka osób ma problemy z poleceniem „startx: nie znaleziono polecenia”. Miałem to też, a to dlatego, że próbowałem zalogować się i startx przed zakończeniem pierwszej obsługi administracyjnej. Bądź cierpliwy, idź na kawę. Sprawdź oryginalne okno konsoli, aby zobaczyć, co się dzieje, zwłaszcza po zakończeniu obsługi administracyjnej.

Adrian Yorke
źródło