Manual

do

Maker

.

com

Wayland Server - O fantástico substituto do X

Wayland Server - O fantástico substituto do X

Após um longo período sem novos posts devido a um grande projeto que estou envolvido, decidi compartilhar com vocês minha experiência com o Wayland server e Weston - que fazem parte do projeto atual, o qual em breve apresentarei a vocês.

Esse artigo tem fins históricos, já que desde que foi escrito (em 2015) muita evolução aconteceu e inclusive algumas distribuições Linux já trazem o Wayland como servidor gráfico padrão. Mas acredite: Você verá aqui recursos que você nem sabe que existe nele!

Para iniciar nosso assunto com o devido entrosamento, discorramos sobre o X. Nas últimas quase 3 décadas temos sido agraciados em sistemas UNIX like com esse servidor gráfico, inicialmente o X, posteriormente Xorg e certamente agora PreKilled-X. Não cuspindo no prato em que comi, mas convenhamos que este servidor gráfico tem lá suas limitações e falhas que podem ser sentidas por usuários comuns. Por exemplo, clicar no ícone de redes na barra de tarefa do KDE e ter um momento irresponsivel das janelas. Esse congelamento geral é causado pelo X, que toma todo o controle de interação com as janelas e com muitos outros detalhes que não me atreverei a tentar explicar. Tamanho, necessidade de execução com nível privilegiado, consumo de recursos do sistema, instabilidade do sistema ao longo do tempo são algumas das causas e efeitos do X. Mas vamos falar de coisa boa? A TekPix... digo, o Wayland!

Wayland

Esse servidor gráfico é sensacional e me encantei desde o primeiro momento que o vi. Achei ideal para um sistema embarcado que devesse consumir poucos recursos, mas para sua utilização, um longo caminho haveria de ser percorrido. E foi.
Precisava do Wayland e do Qt, para ter um gerenciador de janelas rápido e para ter uma aplicação nativa para a plataforma, respectivamente. Para a utilização de ambos, passei aproximadamente 7 dias entre compilação e implementação, entendimento dos recursos, correção de bugs e recomposição emocional. Não foi uma tarefa fácil prepará-lo para ser utilizado, mas se for para mera demonstração, você provavelmente tem ele no repositório de sua distro. Experimente um "apt-cache search weston" e veja por ai o que vem.

O processo de instalação

Se alguém quiser se aventurar, que comece por aqui. Não quero desanimá-lo, mas a versão que baixei tinha uma porção de código que acredito ter sido colocado propositalmente de forma que somente sabendo programar para corrigir a tal falha de compilação. Mas esse é o primeiro passo. Passando por esse sofrimen... digo, essa etapa, será mais suave a compilação do Qt, seguindo esse link.

O sistema operacional criado para esse projeto é um misto de binários copiados do Mint 17.1 e binários compilados do código fonte - sem modificações no que é GPL, lembrando que o Wayland usa a licença MIT, que me agrada bastante por sinal.

O kernel também foi compilado baseando-me em minhas experiências com o saudoso (mas nem tanto) Phantom. A maior diferença nessa compilação está no modo de controle de video; removi o suporte a frame buffer e configurei o DRM (KMS). Esse novo recurso do kernel faz algumas coisas muito legais, como controlar desde após a carga do kernel a configuração de video, que pode ser passada via linha de comando no boot loader ou pode ser modificada ao iniciar o Weston. As vantagens são maior compatibilidade e fim dos flicks de mudança de janela, ou seja, estar em uma tty e alternar para o gerenciador de janelas não causa mais delay, está tudo na mesma camada. Isso é um ponto a favor de sua utilização, mas os maiores benefícios vem atrelado ao Wayland.

O Magnífico teclado virtual

O Weston (que é o gerenciador de janelas que você já compila junto com o Wayland) pode ser inicializado utilizando diversos "backends" diferentes, dentre os quais, XWayland, DRM, FBdev, etc.
O FBDev funciona inclusive sem o suporte a frame buffer do kernel, mas nesse você perde um recurso importantíssimo que se auto-habilita ao utilizar DRM: O teclado virtual!
Aí você pensa:

  • Pra que eu quero isso?

Mas eu respondo - se você for utilizar tela de toque, como estou fazendo no projeto em que estou envolvido, faz toda a diferença! Eu estava angustiado pensando na estrutura do teclado virtual que eu iria escrever, mas veja como são os planos de Deus.

Já havia mais de um mês que eu estava utilizando Weston com FBDev e tão logo iniciei teste com os monitores, percebi que precisaria alterar a resolução - MAS, o fbdev ajusta automaticamente e era uma incógnita se o fbset resolveria, se teria que passar parâmetro no GrUB ou outra coisa qualquer. Então, eu sabia que havia como fazê-lo através do weston.ini, porém as configurações que fiz não surtiam efeito. Tratei de entrar no IRC dos desenvolvedores e a solução foi melhor do que eu esperava! Eles me orientaram no modo de corrigir o problema que eu estava tendo com o DRM e ainda me passaram os 2 modos de efetuar a configuração da resolução, sendo uma pela linha de comando do GrUB e a outra, através do weston.ini.

Antes de falar das configurações, vou complementar esse post com alguns benefícios do Weston:

  • Rotacionar janela

Você pode inclinar a janelas dos aplicativos e isso será compreendido no video, se você assistir.

  • Multiplos desktops

Você pode ter vários desktops. É um recurso comum que já existe hoje, mas não poderia faltar.

  • Screenshot nativo

Você pode capturar tela nativamente com o Weston.

  • Screencast

Você pode gravar seu desktop!!!! E sem a necessidade dos atuais programas, que olhe lá quando funcionam, são terríveis, mas com o Weston o resultado é fluido!

  • Configuração individual da resolução de cada conexão de video com apenas 3 linhas no arquivo ini.
  • Outros recursos que não utilizo, mas que existem.

Procure saber mais no site do projeto.

Só pelo fato de não ter flick e ter um tempo incrivelmente rápido de inicialização, já me ganhou, mas confesso que sabia da complexidade de implementação e iniciei por outros caminhos.

Eu queria inicialmente utilizar o Qt, gráfico, mas sem gerenciador de janelas. E assim era no Phantom, que utilizava um servidor gráfico interno exclusivo para o Qt, chamdo qws. MAS, ele não existe mais e os novos recursos oferecidos pelo Qt não tem a capacidade de exibição de multiplas janelas, de forma que a janela principal estava sendo sobrescrita pela janela de diálogo, e daí por diante - estou fazendo um resumão, porque pra chegar nisso também foi um parto!

Então, quando vi meu ultimo status como sendo algo parecido com um XDialog, entrei num vazio existencial - "Como vou corrigir essa condição?" - pensei entristecido e preocupado.
Não tive dúvidas, fui pro tudo ou nada. E segui com o processo supracitado para obter o tão sonhado Wayland.

No final, obtive um sistema operacional de 104MB (sendo que mais que 50% do tamanho total do sistema pertence ao Qt), rodando lindamente o Weston. No video a seguir apresento os recursos desde a inicialização do Weston. Logo abaixo do video, falo das configurações utilizadas.

Então, se pretende uma determinada configuração de video desde o boot, você deve passar o parâmetro video na linha do kernel, no seguinte formato:

video=CONNECTOR:HxV@Hz

Onde CONNECTOR pode ser um de vários valores diferentes, conforme a porta que está sendo configurada - ou seja, connector trata exatamente da porta física de saída de video.

Em um de meus notebooks a porta padrão é a LVDS, tratando-se da primeira, então a linha do gerenciador de boot fica assim:

video=LVDS-1:1366x768@60

Se fosse display port, seria necessário adicionar um 'e' previamente:
eDP-1

Já no weston.ini, a configuração é mais legível:


#um grupo pra cada saída de video

[output]
#nome do conector
name=LVDS1
#resolução
mode=1366x768
#outra resolução para a saída VGA

[output]
name=VGA1
# resolução 4x3, sem problemas
mode=1024x768

Configurando como acima, o desktop fica extendido, ainda que com formatos de tela diferentes.
Em seguida, alguns conectores, sendo à esquerda utilizado na linha do kernel e à direita, no weston.ini:


  LVDS-1 LVDS1 
  VGA-1  VGA1 
  HDMI-1 HDMI1 
  HDMI-2 HDMI2 
  eDP-1   eDP1 
  eDP-2   eDP2 

Se você tem dúvida quanto aos conectores disponíveis em seu sistema, verifique em /sys/class/drm/*/status. Por exemplo:


cat /sys/class/drm/card0-eDP-1/status

Que no meu caso, retorna connected. Então, você pode ter portas disponíveis porém não conectadas, como um VGA ou HDMI extra no seu equipamento, mas se desejar, pode deixá-la devidamente configurada.

Para iniciar o weston em uma distribuição Linux convencional, certamente bastará exportar o diretório xdg, uma vez que os eventos são coletados em /dev/events. Considerando isso, o sistema deve ter udev devidamente implementado. Para exportar o diretório xdg:

export XDG_RUNTIME_DIR=/root/.xdg

A linha acima indicará que o diretório xdg está configurado em /root, porque meu sistema tem função especialista e tem apenas o usuário root configurado.

Após configurado, o weston pode ser iniciado de diversos modos. O comum é invocar weston-launch, mas digitando simplesmente weston deverá funcionar também.
Se estiver utilizando em uma condição semelhante à minha, detalhes poderão ser necessários, como indicar o backend. Se estiver utilizando frame buffer:

weston --backend=fbdev-backend.so

Mas é fortemente recomendado a utilização do DRM, que de bônus oferece o teclado virtual para telas de toque:

weston --backend=drm-backend.so --use-pixman

O Qt também tem lá suas configurações, sendo que inicialmente utilizei:

QT_QPA_PLATFORM=evdevkeyboard,evdevmouse,evdevtouch

Pra que ele capturasse eventos diretamente de /dev/events. Se estiver utilizando Qt sem um gerenciador de janelas, esse comando poderá sofrer diversas alterações, além da necessidade de outros parâmetros, porém deixemos o Qt para um post específico, a única coisa necessária de saber em relação a ele é que você deverá compilá-lo com suporte a wayland, de forma que ele possa compilar suas aplicações com o mesmo suporte. E para executar sua aplicação dentro do Wayland, você deve invocar o binário com o parâmetro:

suaAppQt -platform wayland

Não pude confirmar, mas provavelmente a versão 5.5 do Qt terá suporte nativo a Wayland e uma das etapas dessa árdua jornada será abreviada.
Espero que tenham se empolgado tanto quanto eu!

Se gostou, não deixe de compartilhar; dê seu like no video e inscreva-se no nosso canal Manual do Maker Brasil no YouTube.

Próximo post a caminho!

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.