Unity 3D Web Player на Linux через Pipelight


Здравствуй, Хабрасообщество. Думаю, многие задавались вопросом, существует ли рабочий порт Unity 3D Web player под Linux. К сожалению, официально эта платформа (на данный момент) не поддерживается, и веб-плагин работает только под Windows/Mac OS. Некоторые для решения этой проблемы использовали связку Wine + Firefox for Windows + Unity 3D WP for Windows. Однако эта связка работает нестабильно, и существуют проблемы с зацикленным обновлением Unity 3D WP. Сегодня мы рассмотрим более функциональное решение с использованием браузеров под Linux, а сделаем мы это с помощью Pipelight.


Что такое Pipelight?


Pipelight — это враппер Windows NPAPI для Windows плагинов (Unity 3D WP, Silverlight, Flash и т.д.), позволяющий использовать эти плагины в натив-Linux браузерах. Pipelight состоит из двух частей: Linux библиотеки, которая подгружается браузером, и Windows программы, стартующей в Wine. Windows программа эмитирует Win-браузер и подгружает Win-DLL необходимого плагина. Когда вы открываете веб-страницу, которой требуется этот плагин, библиотека посылает все запросы с Linux-браузера через туннель в Windows-процесс, образуя некий «мост» между браузером и плагином. Более подробную информацию можно найти здесь (англ.).

Установка


Я устанавливал и тестировал Pipelight под Kubuntu 13.10 и Firefox 28. Соответственно, буду описывать процесс под неё, но ваша система и браузер могут отличаться (также поддерживаются: Debian, Arch Linux, openSUSE, Fedora 18/19/20, AVLinux, Slackware, CentOS 6, SteamOS, Mageia 4… и кастомные дистрибутивы).

Установка очень проста и осуществляется всего в несколько шагов, необходимые Wine библиотеки подтянуться сами:
# Добавляем ppa репозиторий:
sudo add-apt-repository ppa:pipelight/stable
# Устанавливаем пакет:
sudo apt-get update
sudo apt-get install --install-recommends pipelight-multi
# И тут же обновляем:
sudo pipelight-plugin --update


Обращу ваше внимание на то, что новая версия пакета называется «pipelight-multi», а не «pipelight», который перешёл в состояние deprecated.
Также из-за первоначальной направленности на Silverlight, Pipelight может вытянуть шрифты, которые защищены лицензией Microsoft. В этом случае вам придётся принять лицензионное соглашение. Впрочем, у меня оно не запрашивалось даже после включения Silverlight'a.

Теперь, включаем поддержку Unity:
sudo pipelight-plugin --enable unity3d


Жмём [Y], после этого запустится Wine приложение, ждём его загрузки, перезагружаем браузер — всё, готово!

Вы также можете включить другие плагины, которые поддерживаются Pipelight (Silverlight или например Flash, так как Linux версия отстаёт от Win):
# Silverlight
sudo pipelight-plugin --enable silverlight
# Silverlight 5.0
sudo pipelight-plugin --disable silverlight --enable silverlight5.0
# Flash
sudo pipelight-plugin --enable flash


Не работает!


Если установка прошла успешно, но Unity Web приложение отказывается грузиться на странице, то, скорее всего, в него встроена проверка User Agent'a, отсекающая не Win/Mac OS системы.
Проблема решается довольно просто.

Устанавливаем один из рекомендованных плагинов (за совместимость с другими плагинами разработчики не ручаются) для быстрой смены юзер агента:

Chrome:
1. Устанавливаем плагин — chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg
2. Для Unity 3D выбираем «Safari / Mac OS X»
3. Для Silverlight — «Windows Firefox 15».

Firefox:
1. Устанавливаем плагин — addons.mozilla.org/en-US/firefox/addon/user-agent-overrider
2. Открываем настройки плагина и дописываем следующие строки:
Firefox 15/Windows: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1

Safari/OSX: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10

3. Для Unity 3D выбираем «Safari/OSX»
4. Для Silverlight — «Firefox 15/Windows».

Всё равно не работает!


Если все работало хорошо, а потом внезапно перестало, попробуйте очистить home папку pipelight (Внимание: перед этой операцией желательно сделать бэкап этих данных, иначе Вы можете потерять сейвы к играм и настройки к приложениям!):

rm -rf ~/.wine-pipelight/


Загляните в официальный FAQ (англ.) и баг трекер.
Для дистрибутивов отличных от Ubuntu может потребоваться пересобрать специальные Wine пакеты, подробности — тут (англ.).

Всё сломалось после обновления браузера!


Попробуйте отключить и заново включить плагины, а так же выполнить команду:

sudo pipelight-plugin --create-mozilla-plugins


Известные проблемы с Unity 3D WP


Pipelight поддерживает большинство Unity Web приложений, однако в некоторых возникают проблемы, над которыми разработчики работают (по их заверениям, на момент написания статьи):

1. Остановка загрузки файла посередине. Решается перезагрузкой страницы: загрузка не обрывается, начинается докачка оставшейся части файла.
2. Постоянно зажатая клавиша левой стрелки (left arrow key). Решается либо перезагрузкой страницы, либо является неразрешимой проблемой для конкретного приложения.
3. Конкретное приложение не запускается вообще. К сожалению, встречается с шансом примерно 1 к 20.

Выводы и P.S.


Pipelight позволяет легко и быстро насладиться Unity 3D Web приложениями в вашем любимом Linux дистрибутиве.
Конечно, это не совсем полноценная работоспособность «как от производителя», но намного легче по ресурсам, чем параллельная VM машина, стабильнее чем Wine, и гораздо лучше, чем ничего :-)

P.S. Буду рад любой конструктивной критике касательно поста, пожеланиям, а также указаниям на ошибки, оговорки и опечатки в личку.
Поделиться публикацией

Комментарии 19

    –1
    Скоро в таких извращениях не будет необходимости ибо они запилили поддержку WebGL в 5 версии.
      0
      Слишком категоричное заявление, не находите? WebGL — это альтернатива веб-плееру, но аж никак не полноценная его замена.
        +1
        Они то может и запилили, но вот готовы ли разработчики плагинов реализовывать весь свой функционал на JS?
          –1
          Не понимаю о каких плагинах идёт речь.
            +1
              +1
              Вот смотри, есть годная игрушка для соц. сети ВК — Contract Wars. Это онлайн шутер от первого лица, написанный на Unty. Для организации сети используется популярный плагин Photon Network, для GUI вероятно тоже используется какой либо плагин. А теперь представь, что они захотят портировать игру на WebGL — что им делать с используемыми плагинами? Возможно их когда нибудь и выпустят на JS, но возможно и нет… Писать свои велосипеды? Бред.
                +1
                Вот смотри, поддержка WebGL в Unity реализована через компиляцию кода из C в asm.js. Поэтому я не вижу проблем в использовании любых плагинов из ассет стора. Так же разработчику необязательно знать JS, он может писать на своём любимом C# или Boo или чо там ещё есть в Unity. Так что я считаю, что WebGL — это еще какая альтернатива web-плееру.

                Ссылка по теме — ru.wikipedia.org/wiki/Asm.js
                  –1
                  Тем не менее разработчикам плагинов нужно еще скомпилировать код С в JS, а как мне думается — не каждый код можно так просто взять и портировать. Наверняка там используются и какие нибудь нативные вещи.
                    0
                    >>> Наверняка там используются и какие нибудь нативные вещи.

                    То есть вы не знаете ничего определенного, но уверены, что всё плохо?
                      +1
                      Вы знаете еще меньше, но уверены, что все хорошо!
                    0
                    Да ну? Ану запилите-ка мне поддержку UDP (без которого трудно представить динамичную онлайн-игру) в браузере? WebSockets не предлагать. Несмотря на то, что C# транслируется в итоге в JS, ограничения самого браузера никуда не деваются.
                      0
                      Я практически не разбираюсь в сокетах, но гугление выдало вот такую статью от 14.05.2012: blog.alexmaccaw.com/chrome-tcp-udp
            0
            Тоже недавно мучался с Pipelight (почему-то не до конца закачивал файл с установщиком Unity)
            Правда работает Unity не очень: управление мышкой очень плохое: когда медленно двигаешь вверх, видно, что она вначале идёт вверх, а потом с такой же силою опускается опять вниз, поэтому работают только большие рывки ( это всё только в играх от первого лица, если есть курсор, то он движется нормально)
              0
              Для полноты картины не хватает ссылок на сайты-примеры, где можно было бы сразу проверить, успешна ли установка.
                0
                Я думал об этом, но не стал вставлять их, что бы их случайно не посчитали «рекламными» ссылками.
                0
                Еще widevine оно умеет!

                А у меня ContractWars так и не запустилось.
                  0
                  К сожалению, про ContractWars написано даже в официальном мануале, разработчикам не удалось его запустить. Остается только верить что с новыми версиями ситуация изменится к лучшему.
                    0
                    Pipelight 0.2.7.1~ubuntu13.10.1, ContractWars полностью работает!)
                    0
                    Pipelight не работает для актуальной версии плеера. Проверять на порталах не вариант, там игры старые собранные под древнюю версию плеера

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое