Теоретически да. У вас может быть обработчик заглушки в гостевой системе, который посылает сообщение демону, работающему на хосте, который фактически вызывает соответствующее приложение. Я никогда не видел такой установки сам, хотя.
Есть ли способ «перенаправить» щелчок по URL-адресу в гостевой системе VirtualBox, чтобы открыть его в браузере операционной системы?
Я использую VirtualBox OSE в Ubuntu 10.04.
У меня есть гостевая виртуальная машина Windows 7, которую я использую почти исключительно для MS Outlook для доступа к своему почтовому ящику Exchange. Если я щелкаю URL-адрес в Outlook, он явно открывается в IE на гостевой виртуальной машине, есть ли способ заставить его выполнить какое-либо перенаправление?
Если я щелкну URL-адрес внутри виртуальной машины, я хочу, чтобы он загружался в браузере по умолчанию на хосте Ubuntu.
6 ответов на вопрос
- Популярные
- Новые
- С комментариями
- Активные
Если бы был такой путь, это была бы огромная дыра в безопасности.
Максимум, что вы можете сделать, это использовать Shared Clipboard: с установленными гостевыми дополнениями буфер обмена вашей гостевой ОС может быть доступен для вашей хост-системы.
У меня была та же идея, что и у Игнасио Васкеса-Абрамса, и я ее реализовал.
Итак, первая часть этого - HTTP-сервер, который прослушивает запросы на компьютере, на котором вы хотите открыть браузер. При входящем запросе он открывает (в браузере) URL-адрес, указанный в качестве аргумента запроса POST.
Выбери один:
- Скрипт Python, без зависимостей: browser_daemon.py
- Скрипт Python, требуется Flask : browser_daemon_flask.py
Вы должны добавить этот скрипт в автозагрузку, он должен работать в фоновом режиме.
Вторая часть - это то, что вызывает запрос.
Выбери один:
- Скрипт оболочки, требуется curl : open_url.sh
- Скрипт Python, без зависимостей: open_url.py
Вы должны назначить этот скрипт в качестве браузера по умолчанию. Как это сделать ... это отдельный вопрос. Вы можете искать что-то вроде «Windows установить пользовательский исполняемый файл в качестве браузера по умолчанию» .
Он также может быть использован в качестве инструмента командной строки: ./open_url.py 'http://google.com/'
Скрипты Python должны работать на всех основных системах с любой относительно свежей версией Python (я подозреваю, 2.6+, 3.1+).
В Windows, если вы не хотите, чтобы скрипт Python запускался в командном окне, вы должны изменить его расширение на .pyw
. Используйте диспетчер задач, если хотите остановить его (ищите pythonw.exe ).
Сетевой адаптер VirtualBox должен быть настроен на NAT (настройка по умолчанию). Подробнее об IP-адресе здесь . Выбор порта является произвольным, смело меняйте 1337 на что-то другое везде.
Сервер защищен, потому что он слушает только соединения с локального хоста. VirtualBox заставляет его работать как-то. Но если вы хотите, чтобы это работало удаленно, укажите прослушиваемый IP-адрес как '0.0.0.0'
или ''
вместо 'localhost'
.
If you're using Google Chrome as your browser on both OSs, push browser may help: http://pushbrowserapp.com/
It's basically an extension that lets you send tabs from one device to another, currently supporting Chrome and iOS devices. In your situation, you'd click the link in Outlook, it'd open in Chrome in the VM, you'd click the push browser icon, and the tab would open in Chrome on your ubuntu machine.
I'm in the same situation. Here's my better than nothing solution:
I created the script ~/bin/pburl
that contains:
#!/bin/bash set -eu exec gnome-open $(xclip -out -selection clipboard) # EOF
What this does is takes any URL you have in your clipboard and opens it as a URL using gnome's default url-handler (Chrome in my case).
My usage is:
- In Outlook (on the Guest) I "copy hyperlink".
- I click on the desktop or a non-VM window.
- I press control-space which launches Synapse and type
pburl
.
Presto! The URL opens.
It's not as good as just clicking would be, but it does shorten the whole copy-open-browser-paste routine.
У меня нет 50 баллов, поэтому я не могу комментировать пост Олега Пирпина.
У меня есть некоторые улучшения:
Мы с Олегом переписывались в частном порядке, и он предоставил информацию о том, как настроить системный пользовательский модуль. Это может быть использовано для запуска скрипта при загрузке в пользовательском сеансе (чтобы он видел браузер пользователя). Инструкции здесь: [ https://gist.github.com/oprypin/0f0c3479ab53e00988b52919e5d7c144][1]
Я сделал некоторые улучшения в коде сервера Python. Я использую Host Only Networking в VirtualBox и использую iptables для маршрутизации определенных вещей из виртуальной машины. Я обнаружил, что серверный скрипт Python зависнет, если сеть VirtualBox не будет работать. Моя модификация проверяет, готова ли сеть и, если нет, спит в течение 10 секунд и пытается снова.
#!/usr/bin/env python # Credit to... Oleh Pyrpin for all of the cool stuff here. # See https://superuser.com/questions/140234/is-there-a-way-to-redirect-a-click-on-a-url-in-a-virtualbox-guest-to-open-in-t # # My improvements: 1. Wait for VirtualBox network to be available # 2. Check for available port so we can fail gracefully if something (probably another instance of us) is already listening on the port # markd89 import webbrowser, time, socket, os.path, sys try: from urllib.parse import parse_qs except ImportError: from urlparse import parse_qs def application(environ, start_response): try: if environ['REQUEST_METHOD'] == 'POST': try: length = int(environ['CONTENT_LENGTH']) except KeyError: length = None post = parse_qs(environ['wsgi.input'].read(length).decode('utf-8')) [url] = post['url'] webbrowser.open(url, new=2, autoraise=True) except Exception as e: print(repr(e)) start_response('200 OK', [('Content-Type', 'text/html; charset=utf-8')]) return [] if __name__ == '__main__': while True: #Loop every 10 seconds until we're able to start the Web Server if os.path.isfile('/sys/class/net/vboxnet1/operstate'): print("Debug: Path exists.") if 'up' in open('/sys/class/net/vboxnet1/operstate').read(): # Adjust this for the name of your vbox network print("Debug: vboxnet1 is up. Checking if port is available.") sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(2) #2 Second Timeout result = sock.connect_ex(('192.168.10.1',1337)) # Adjust this for the server and port you are using. if result == 0: print ("Debug: Port already in use. Maybe another instance of this script is running?") sys.exit(1) else: print ("Debug: Port available, starting web server.") from wsgiref.simple_server import make_server httpd = make_server('192.168.10.1', 1337, application) # This should match the server and port above, doh! httpd.serve_forever() else: print("Debug: vboxnet1 is not up yet.") time.sleep(10)
Я реализовал гостевую сторону Windows немного по-другому. У меня есть порт Windows curl (источник неизвестен, извините). Я решил использовать это вместо установки Python в системе Windows. Если у вас нет curl, вы можете использовать клиентский скрипт Python, приведенный в первой ссылке.
Я создал пакетный файл url_redirect_client.bat, содержащий:
@curl --data-urlencode "url=%~1" http://192.168.10.1:1337/ @exit
Я сделал указанный выше пакетный файл веб-браузером Windows по умолчанию и обработчиком .htm и .html с этим ключом реестра:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Classes\.CSS] @="urlredirectclient" [HKEY_CURRENT_USER\Software\Classes\.HTM] @="urlredirectclient" [HKEY_CURRENT_USER\Software\Classes\.HTML] @="urlredirectclient" [HKEY_CURRENT_USER\Software\Classes\urlredirectclient\shell\open\command] @="c:\\temp\\url_redirect_client.bat \"%1\"" [HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice] "Progid"="urlredirectclient" [HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice] "Progid"="urlredirectclient" [-HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.css] [-HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.htm] [-HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.html]
Я управлял этим в течение нескольких дней, и это, кажется, работает хорошо. Я столкнулся с одной проблемой с очень длинным URL-адресом от Amazon, но это не удалось. Возможно, использование оригинального авторского скрипта Python на стороне клиента не будет иметь такой проблемы, или, возможно, он нуждается в ком-то еще, чтобы продолжить развивать и улучшать его.
Похожие вопросы
-
6
Virtualbox, VMware, KVM или другое для виртуализации Ubuntu?
-
13
Как получить новую сессию браузера при открытии новой вкладки или окна в Firefox / Chrome?
-
5
Как автоматически удалить историю Flash / конфиденциальную информацию? Или остановить Flash от его х...
-
-
4
Важен ли прохождение теста Acid3?
-
3
Сброс браузера по умолчанию в OS X в Safari
-
5
Как я могу заставить VirtualBox хорошо играть с двумя мониторами?
-
1
Могу ли я установить плагины только для одного браузера?
-
3
Проблема, где Wi-Fi работает для Skype, но не для любого браузера?
-
5
Сделать Cmd + 1..9 для переключения вкладок в Safari?
-
3
Подводные камни виртуальных машин Windows XP