Aug 31, 2009

Ανταλλάσσοντας παραμέτρους (parameter passing) μεταξύ guest και host στο Virtualbox

Αφορμή για αυτό το άρθρο αποτέλεσε η περίπτωση της αγοράς μιας εξωτερικής οθόνης που υποστήριζε υψηλότερες αναλύσεις από αυτές του laptop μου. Ένα πρόβλημα που προκύπτει για τις εικονικές μηχανές που τρέχουν Linux με εκδόσεις του πυρήνα παλαιότερες του 2.6.27 είναι το ότι η παραμετροποίηση τους στηρίζεται στο αρχείο xorg.conf και κυρίως δεν υποστηρίζουν δυναμικό επαναπροσδιορισμό της ανάλυσης οθόνης (dynamic screen resolution) Έτσι, σε περιπτώσεις που θέλουμε να δουλέψουμε σε μια υψηλότερη ανάλυση, θα πρέπει να αλλάξουμε τα βασικά αρχεία ρυθμίσεων.

Ευτυχώς, το Virtualbox διαθέτει ένα μηχανισμό μεταφοράς παραμέτρων από το host στο guest σύστημα. H εντολή VBoxManage μπορεί να χρησιμοποιηθεί στο host σύστημα ώστε να θέσει την τιμή σε μια μεταβλητή, που μπορεί αργότερα να διαβαστεί από το ένα guest σύστημα με την εντολή VBoxControl. Ένα παράδειγμα περάσματος παραμέτρου σε ένα virtual machine με το όνομα Centos είναι:

VBoxManage guestproperty set CentOS high_resolution "1"

Αντίστοιχα από το περιβάλλον του guest μπορούμε να εκδώσουμε την αντίστοιχη εντολή με το ακόλουθο output:

>VBoxControl guestproperty high_resolution
VirtualBox Guest Additions Command Line Management Interface Version 3.0.4
(C) 2008 Sun Microsystems, Inc.
All rights reserved.

Value: 1

Κατά αυτόν τον τρόπο, μπορούμε να φτιάξουμε ένα script στον host που θέτει παραμέτρους. Αντίστοιχα στο guest, με την ενεργοποίηση του συστήματος (πχ. στο αρχείο /etc/init.d/boot.local στο SuSE Enterprise Desktop) μπορούμε να κάνουμε κάποια ενέργεια. Στην περίπτωση μου, έχω φτιάξει δυο αρχεία ρυθμίσεων για την οθόνη, ένα για την εγγενή ανάλυση του laptop και ένα άλλο για την εξωτερική οθόνη που αντιγράφονται ανάλογα στο /etc/X11/xorg.conf Ακολουθεί ο κώδικας του script που εκτελείται στον guest:

#!/bin/bash

AT_HOME=`VBoxControl guestproperty get high_resolution|grep Value|grep 1|wc -l`

if [ "$AT_HOME" = "1" ]
then
# setting high resolution.
cp /etc/X11/xorg.conf.1680 /etc/X11/xorg.conf
cp /home/spk/.gconf/desktop/gnome/screen/default/0/%gconf.xml.1680 /home/spk/.gconf/desktop/gnome/screen/default/0/%gconf.xml
else
cp /etc/X11/xorg.conf.1440 /etc/X11/xorg.conf
cp /home/spk/.gconf/desktop/gnome/screen/default/0/%gconf.xml.1440 /home/spk/.gconf/desktop/gnome/screen/default/0/%gconf.xml

fi

Στην περίπτωση του SLED 10, πέρα από την μεταβολή του xorg.conf, χρειάστηκε και η ενημέρωση ενός ειδικού αρχείου του GNOME.

Σε γενικές γραμμές η μεταφορά παραμέτρων από host σε guest αποτελεί ένα εξαιρετικά δυνατό γνώρισμα του Virtualbox, που μπορεί να σας λύσει τα χέρια για την αυτοματοποίηση διαδικασιών.

No comments: