Stary hardware na nowym software i przykładowe rozwiązanie problemów z tym związanych
22.01.2016 17:00
Są ferie, czas odpoczynku od szkoły oraz termin na zajęcie się własnymi projektami. Ostatnio, podczas porządków znalazłem stary album. Oczywistym jest, że trzeba by te zdjęcia ocalić od zapomnienia i przekształcić do cyfrowej formy. Na szczęście w mojej dość sporej kolekcji „złomu komputerowego” znalazł się też skaner, na którym osiadła do tej pory dość spora ilość kurzu. Był to jakiś Tevion MD 6190. Przeleżał kilka lat w zapomnieniu, ale liczyłem na to, że będzie sprawny. Po krótkiej chwili znalazłem do niego zasilacz (nie był od kompletu, ale miał takie same parametry: 12V, 1.25A). Nadszedł czas na instalację tego cudownego sprzętu.
Podłączam skaner do komputera. Windows 10 informuje mnie o wykryciu nowego sprzętu. Uruchamiam aplikację do skanowania, już ciesząc się z łatwo odniesionego sukcesu, a tu kicha – nie wykryto skanera. Otwieram menedżer urządzeń i rzeczywiście – system nie zainstalował sterowników do tego skanera. Myślę sobie trudno, pod Win 10 nie chodzi – nie będę rozpaczał. Sterowników do Win 10 nie mam. Po krótkich poszukiwaniach w czeluściach Internetu znalazłem jedynie stery do starożytnego, porzuconego Windowsa XP, które pod nowym dziełem Microsoftu nawet się nie uruchamiają. Nie będę instalował kolejnego systemu dla jednego, starego skanera. Ale miałem jeszcze asa w rękawie – Debiana Jessie. Linuks podobno posiada wsparcie dla każdego starego trupa, więc postanowiłem skorzystać z tej możliwości.
Linuks, podobnie jak Windows, nie poradził sobie z obsługą tego urządzenia. Z witryny projektu sane (http://www.sane-project.org ) dowiedziałem się, że ten skaner nie jest i nie będzie wspierany. Więc na ten trop szkoda było marnować czasu. Postanowiłem obrać najprostszą drogę do zwycięstwa – uruchomić Windows XP na Virtualboksie i tam zainstalować skaner i sterowniki do niego.
Nie byłbym sobą, gdybym poprzestał na skanowaniu przez wirtualnego XP’ka. Zadecydowałem, że moje rozwiązanie musi być transparentne, czyli otwieram na mojej 10‑tce skrót „Skanuj” który uruchamia „kreatora skanera i aparatu fotograficznego” z Windows XP, a wyniki zapisuje do folderu np.: Obrazy na Win 10. Chodziło mi po głowie rozwiązanie podobne do Windows XP Mode w Win7. Zresztą, spójrz na poniższy screen, aby zobaczyć efekt końcowy moich prac. To był mój cel.
Całą pracę trzeba by zacząć od utworzenia wirtualnej maszyny z Windows XP, a potem zainstalowania na niej rzeczonego systemu. Pamiętajmy o włączeniu akceleracji 3D i 2D oraz przeznaczeniu maksymalnej ilości pamięci na RAM wirtualnej karty graficznej (Video Memory=128MB), dzięki czemu nasz XP nie będzie działał jak muł. Jeśli nasz Virtualbox nie ma Extension Pack do lepszej obsługi USB, to też należy to doinstalować. Ustawienia mojego XP prezentują się następująco:
Kolejny etap to instalacja systemu. Instalacja jak instalacja, nie ma tu zbyt wiele do gadania, zresztą nie to jest tematem tego wpisu.
XP zainstalowany. Doinstalujmy jeszcze Guest Additions z Virtualboksa, aby to wszystko lepiej działało i zabierajmy się za uruchomienie skanera. Przechwytujemy go za pomocą menu Devices->USB. XP wykrył skaner i woła o sterowniki. Instalujemy je, co odbywa się bez żadnych problemów. W zasadzie jeśli chciałbym jedynie przeskanować kilka fotek, to mógłbym to zrobić teraz, ale wszak, byłoby to za proste i za mało bajeranckie.
Zaczynamy więc właściwą pracę. Pierwsze nasze założenie jest takie, aby uruchomić tryb Seamless Mode (View->Seamless Mode). Ten właśnie tryb pozwoli nam na stworzenie „wrażenia” że ta aplikacja, którą uruchomimy w wirtualnym XP’ku uruchomiona jest natywnie. Wrażenie to szybko psuje menu start XP, które pojawia się nad tym z 10‑tki. Rozwiązanie jest proste – wystarczy stworzyć bardzo prosty skrypt .bat o następującej treści:
@echo off taskkill /f /im explorer.exe
i wrzucić go do autostartu w wirtualnym XP.
Po restarcie systemu zauważymy problem, a mianowicie pewien rodzaj artefaktu graficznego – część tła z Windows XP przebija się do 10‑tki. Nie jest to estetyczny widok i trzeba to naprawić.
Tak jak poprzednio, tak i tutaj rozwiązanie jest proste. Wystarczy wrzucić do autostartu skrót do jakiejś aplikacji, która minimalizuje się przy starcie. Ja użyłem tu menedżera zadań.
Po kolejnym restarcie naszego wirtualnego XP’ka zauważymy, że problem został rozwiązany. Ale w tym momencie powstaje kolejne pytanie – jak będziemy uruchamiali aplikacje z naszego wirtualnego systemu, skoro nie mamy dostępu ani do menu start, ani do pulpitu? To jest całe sedno i cel mojego wpisu – gdyż tu z pomocą przychodzi nam znane głównie bardziej zaawansowanym użytkownikom konsolowe narzędzia Virtualboksa – a mianowicie VBoxManage.
Żebyśmy w skryptach za każdym razem nie musieli podawać pełnej lokalizacji do tego (lub innych) plików z Virtualboksa, dodajmy tę ścieżkę do odpowiedniej zmiennej środowiskowej. Aby to zrobić, wchodzimy do właściwości systemu. Przechodzimy na zakładkę Zaawansowane a potem klikamy przycisk Zmienne środowiskowe. Wybieramy zmienną Path a następnie klikamy przycisk Edytuj. Klikamy Nowy i podajemy ścieżkę do folderu Virtualboksa, np.: C:\Program Files\Oracle\Virtualbox.
Teraz nadeszła pora na przetestowanie tego rozwiązania. Uruchom konsolę cmd i wpisz polecenie VBoxManage. Powinno zostać bez problemu rozpoznane i wyświetlić pomoc.
VBoxManage ma ogromne możliwości. Znaczna część opcji udostępnianych przez ten program jest niemożliwa do wykonania przy użyciu interfejsu graficznego. My zajmiemy się głównie jedną grupą opcji – guestcontrol, która umożliwia nam za pomocą konsoli na systemie hosta uruchomić aplikację na wirtualizowanym systemie.
Nas interesuje polecenie run. Musimy użyć przełącznika –exe (po którym podajemy ścieżkę do pliku wykonywalnego na wirtualnym systemie), -‑username i –password. Funkcja ta nie zadziała, jeśli nasze konto na wirtualnym systemie nie ma ustawionego hasła. Drugim warunkiem jest uruchomienie wirtualnej maszyny również z poziomu cmd (nie wiem, dlaczego te polecenia nie działają, kiedy XP uruchomimy z GUI, ale mniejsza o to). Musimy więc poznać jeszcze jedną grupę poleceń, a mianowicie startvm.
Składnia jest (po raz kolejny użyję tego słowa) prosta. Podajemy po prostu nazwę wirtualnej maszyny. Np.:
VBoxManage startvm „Windows XP” –type GUI
Teraz możemy uruchomić w końcu nasz kreator skanera i aparatu fotograficznego. Plik tej funkcji to wiaacmgr.exe, który znajduje się w folderze System32. Wydajemy więc polecenie:
VBoxManage guestcontrol "Windows XP" run --exe "C:\\WINDOWS\\system32\\wiaacmgr.exe" --username "Karol" --password "5554432"
Nazwa użytkownika i hasło mogą oczywiście być u ciebie inne. Po wydaniu tego polecenia powinniśmy ujrzeć efekt podobny do tego, jaki był na pierwszym screenie tego wpisu. Sedno jest już prawie uchwycone. Zostały nam kosmetyczne poprawki. Pierwsza rzecz, którą zrobimy to optymalizacja szybkości. Uruchamianie i zamykanie XP’ka za każdym razem, kiedy chcemy skorzystać ze skanera jest nieoptymalne. Na szczęście Virtualbox ma taką funkcjonalność, która zwie się „zapisaniem stanu” wirtualnej maszyny. Nie możemy tego zrobić z poziomu GUI, więc musimy zrobić to z poziomu konsoli. Jeśli mamy uruchomionego XP’ka, to wydajmy polecenie:
VBoxManage controlvm „Windows XP” savestate
. Najwłaściwsze byłoby utworzenie na systemie hosta skryptów bat, lub skrótów, które służyłyby do uruchomienia naszego XP’ka, a po skończonej pracy ze starym oprogramowaniem, do jego zamknięcia.
Ja u siebie zrobiłem to w następujący sposób: Plik zapisz_stan.bat zawierał polecenie do zapisania stanu wirtualnej maszyny, które było wymienione nieco wyżej. Plik uruchom.bat, oprócz wspomnianego wcześniej polecenia do uruchamiania wirtualnej maszyny, zawierał jeszcze jedną linijkę:
VBoxManage setextradata „Windows XP” GUI/Seamless on
Linijka ta odpowiada za uruchomienie wirtualnej maszyny od razu w trybie „Seamless”. Główny plik skanuj.bat zawierał wspomniane wcześniej polecenie do uruchamiania aplikacji z systemu gościa z poziomu cmd.
Zostało nam jeszcze utworzenie filtra USB, dzięki któremu skaner po podłączeniu zawsze będzie przekazywany do wirtualnej maszyny. Z poziomu GUI wybieramy nasza wirtualną maszynę, uruchamiamy jej właściwości i na zakładce USB tworzymy filtr, wyglądający np.: tak jak poniżej.
Tworzymy jeszcze folder współdzielony:
Zmieniamy lokalizację folderu Moje Dokumenty w systemie Windows XP. Folder ten powinien znajdować się na naszym dysku współdzielonym. Dzięki temu wszystkie skany, zapisane przez kreator Windows XP zostaną zapisane bezpośrednio w folderze Moje Obrazy naszego systemu hosta.
To by było na tyle. Za pomocą tej kombinacji, którą przedstawiłem możemy nie tylko uruchomić stare oprogramowanie na nowym, ale również nowe na starym. Tym sposobem możesz dostarczyć np.: systemowi Windows XP najnowszego Internet Explorera/Microsoft Edge czy Office’a 2016 i własnie tym akcentem kończę dzisiejszy wpis :)