Compilando o Mir Display Server

Como compilar o Mir Display Server no Debian e no Ubuntu

A um tempo atras a Canonical anunciou o novo servidor gráfico, ou servidor X chamado Mir, que vai ser integrado em sistemas touch como o Ubuntu for Phones, Ubuntu for Tablet, ou seja o Ubuntu Touch s e também será implementado com total disponibilidade no Ubuntu Desktop. Essa implementação poderá acontecer totalmente nas distribuições do Ubuntu 14.04 LTS ou consequentemente nas versões “Touchs”, que acompanharam os devices, lancados no final do ano, com um pré-lançamento para outubro (e olhe lá!). Vocẽ pode acompanhar o processo de trabalho em cima do Mir, Unity Next e outros projetos em http://status.ubuntu.com/, como no http://launchpad.net

O que é o Mir?

Mir será o novo Display Server que vai integrar graficamente o Ubuntu Touch e Desktop, assim como a tentativa frustada da Microsoft com o Windows 8, so que dessa vez, algo bastante eficiente. A canonical se pronunciou dizendo que não estava satisfeita com o Xorg e o composite do Wayland e por isso encontrou a necessidade de escrever do zero. Seu ambiente gráfico, o Unity, também vai passar por um processo de compatibilidade com o Mir , totalmente integrado aos recursos do QT5 e scripts QML (QMir Note: https://launchpad.net/qmir). Isso compoe o appmenu-qt, Unity com o nome de Unity Next e todas as outras aplicações do Ubuntu, como o software-center, update-manager e outros recursos do GNOME, como o gnome-language-selector, gstreamer-properties, gnome-control-center, gnome-session, e outros utilizados pelo proprio Unity para ser configurado. Nos casos dos componentes e aplicações do GNOME que são utilizados no Unity, como o wallpaper e desktop e todas as aplicações ja comentadas aqui, acredito que serão portadas para QT5/QML para o seu funcionamento, tal como alguma portabilidade de aplicações restritas do proprio Ubuntu Touch para Desktop. Vale lembrar que o Xorg (assim como o antigo e anterior Xfree86), possui um código fonte de 30 anos atrás, o que virou um grande repositório de “legado”, e módulos não mais utilizados. Então, como ele somente funciona na sua versão inicial com drivers da comunidade, então a regra numero 1 para compilar todo o source é remover a instalação de drivers proprietarios, como o da intel, ati e nvidia (acredito que o VGA driver de emulação do virtualbox possa te dar alguns problemas também, como aconteceu comigo, então dedique uma máquina somente para isso e NÃO o seu desktop).

Vale lembrar que o x11 common é dependencia de instalação do Mir de acordo com o seu repositório do Mir Team.

O Mir nao trabalha com o Compiz e ele possui um proprio, como o mircompositor e outros fontes que constituem o Mir na hora da compilação, como o mirshell, mirlogging, mirfrontend, miroptions, mirinput, mirgraphics, mirserver é claro, mirclient, mirds, o enjoado e malvado gmock (removi o gmock do Makefile) e outros fontes.

Então, no lugar do Surface Flinger no Ubuntu Touch (servidor gráfico do android),  e nas versões Desktop no lugar do Xorg, será disponibilizado ambos com o Mir Display Server e todo o processo de integração, como código fonte e procedimentos ja estão disponibilizados pelo Launchpad da Canonical. (fonte: https://wiki.ubuntu.com/MirSpec e https://wiki.ubuntu.com/Mir/)

Procedimentos de compilação do Mir Display Server no Ubuntu e Debian.

Em primeiro momento voce precisa entender que as primeiras versões do Mir são homologadas e testadas no Ubuntu Raring, a versão 13.04, que será o seu primeiro pre-requisito para a sua compilação e como falei, remoção dos drivers proprietários. Sobre o fato de compilar no Debian, voce verá que no source existem total integração com o Debian, até pelo fato que o Ubuntu é baseado no Debian (ver cat /etc/debian_version), é muito fácil de executar aplicações do Ubuntu atual no Debian Unstable (sid) e no muito Testing (esquece o Stable).

Para compilar o Mir, voce precisa instalar alguns pacotes como o Bazaar, para que voce possa baixar o source code do Mir, conforme os desenvolvedores liberam novas versões pelo seu controle de versão. Os outros pacotes são necessários para a compilação no formato Debian (o que serve para o Ubuntu), como atualização de alguns pacotes. Então atualize o seu Ubuntu 13.04 e Debian Unstable e instale o pacote bzr. (fonte: http://bazaar.canonical.com/en/)

$sudo apt-get install bzr

Aproveite, instale logo o pacote devscripts, para que voce possa compilar no “estilo Debian”, com o comando mk-build-deps, o que facilita bastante sendo orientado pelo source, e outros pacotes importantíssimos como o vera++ e valdring, que é necessario instalar para compilar todo o source do Mir. Mas vamos aproveitar e instalar tudo que é necessário (o kernel package, apenas inclui):

$sudo apt-get install devscripts equivs cmake valdrind vera++ ubuntu-dev-tools devscripts build-essential kernel-package -y

Primeiro vamos puxar o source code do Mir para o diretório mir/, com o comando: $ bzr branch lp:mir

Para começar a baixar as dependências, entre no diretório mir/, que foi criado quando solicitado o source code, para ser compilado digite o seguinte comando (e não se assuste se voce ver pacotes e fontes com relação ao Android)
#mk-build-deps –install –tool “apt-get -y” –build-dep debian/control

Quando concluir, crie o diretório build dentro do diretório mir, e entre nele com o comando: mkdir build && cd build

Você pode usar o ” cmake-gui .. “pelo gráfico para preparar e orientar o source a ser compilado, devido as muitas opções do Mir, algumas ainda em não uso, então cuidado para voce não parar aqui. Eu marquei bastante itens ….

Para compilar digite:
$cmake ..  (os 2 pontos é para preparar o diretorio anterior)
$make
(ou com a opção -j8 para especificar o numero de jobs e voce pode concluir com a compilação com o ctest.)

O processo de compilação do código fonte é demorado, então tome um café:

root@mirtest:~/mir/build# make

[ 26%] Built target miroptions

Scanning dependencies of target mirshell
[ 26%] Building CXX object src/server/shell/CMakeFiles/mirshell.dir/application_session.cpp.o
[ 26%] Building CXX object src/server/shell/CMakeFiles/mirshell.dir/session_container.cpp.o
[ 27%] Building CXX object src/server/shell/CMakeFiles/mirshell.dir/session_manager.cpp.o
[ 27%] Building CXX object src/server/shell/CMakeFiles/mirshell.dir/registration_order_focus_sequence.cpp.o
[ 27%] Building CXX object src/server/shell/CMakeFiles/mirshell.dir/single_visibility_focus_mechanism.cpp.o
[ 28%] Building CXX object src/server/shell/CMakeFiles/mirshell.dir/consuming_placement_strategy.cpp.o
[ 28%] Building CXX object src/server/shell/CMakeFiles/mirshell.dir/organising_surface_factory.cpp.o
[ 29%] Building CXX object src/server/shell/CMakeFiles/mirshell.dir/surface_source.cpp.o
[ 29%] Building CXX object src/server/shell/CMakeFiles/mirshell.dir/surface.cpp.o
Linking CXX static library ../../../lib/libmirshell.a
[ 29%] Built target mirshell
Scanning dependencies of target mirfrontend
[ 30%] Building CXX object src/server/frontend/CMakeFiles/mirfrontend.dir/session_mediator.cpp.o
[ 30%] Building CXX object src/server/frontend/CMakeFiles/mirfrontend.dir/null_session_mediator_report.cpp.o

Note esses “links”

Linking CXX shared library ../../../lib/libandroid-input.so
Linking C static library ../lib/lib3rd_party.a
Linking CXX executable ../../../bin/cooked-event-printer
Linking CXX executable ../../../bin/dispatcher-check
Linking CXX executable ../../../bin/raw-event-printer
Linking CXX shared library ../../../lib/libmirprotobuf.so
Linking CXX static library ../../../lib/libmirtime.a
Linking CXX static library ../../../lib/libmircompositor.a
Linking CXX static library ../../../lib/libmirlogging.a
Linking CXX static library ../../../../lib/libmirplatformgraphics.a
Linking CXX static library ../../../lib/libmirgraphics.a
Linking CXX static library ../../../lib/libmirinput.a
Linking CXX static library ../../../lib/libmirsurfaces.a
Linking CXX static library ../../../lib/libmiroptions.a
Linking CXX static library ../../../lib/libmirshell.a
Linking CXX static library ../../../lib/libmirfrontend.a
Linking CXX shared library ../../lib/libmirserver.so
Linking CXX executable ../../bin/mir

Para instalar o que foi compilado, como root digite:

#make install

Existe um problema ai, pois ele depende do diretório /root/mir/build/doc/html e conforme a linha 44 e 45 do Makefile, ele vai usar o diretório que voce descompactou como base e se ele nao encontrar o diretório ele vai da erros no processo de instalação do source compilado. Então crie o diretório com o seguite comando: #mkdir $HOME/mir/build/doc/html ou dentro do diretório que voce já se encontra $PATH do Mir de instalação e source, digite: mkdir doc/html Após todo o processo de compilação, se ocorreu tudo bem, para que voce possa testar o Mir carregando no lightdm, pois já é suportado, basta voce alterar o seguinte:

Entre com o vim no arquivo de configuração do lightdm e adicione que o type agora é o Mir, adcionando a ultima linha em negrito:

[SeatDefaults]
user-session=ubuntu
greeter-session=unity-greeter
type=mir

E então reinicie o daemon:
$ sudo service lightdm restart

ATENÇÃO: tudo isso pode falhar várias vezes e por isso estou levando em consideração que voce sabe o que esta fazendo e pode depurar ai sozinho algum erro ou lib dependente para ser instalado pelo apt ou até mesmo compilada. O processo de compilação é esse e basta testar nas versões conforme são liberadas, fique atento.

Outro método é a instalação pelo apt, que pode falhar e confesso que dessa maneira ainda não me dediquei, mas é bem simples, basta seguir os passos abaixo:

1. Adicione os repositórios por ppa para /etc/apt/sources.list.d com o comando sudo add-apt-repository ppa:mir-team/staging -y && sudo apt-get update

2. Adicione e define lista prefencial no apt criando o arquivo /etc/apt/preferences.d/50-pin-mir.pref e adicionando o que esta abaixo:

Package: *
Pin: origin “private-ppa.launchpad.net”
Pin-Priority: 1001

Package: *
Pin: release o=LP-PPA-mir-team-staging
Pin-Priority: 1002

3. Instale o Mir

$sudo apt-get install mir && sudo apt-get dist-upgrade

Algumas informações adicionais sobre a compilação do Mir, é que devemos remover sempre o .Xauthority para iniciarmos nova sessão e também instalar algumas aplicações de exemplo para o mir com o pacote libmirclient-demos

 

Powered by Moblie Video for WordPress + Daniel Watrous