Como funcionam os gráficos no Linux: uma visão geral de diferentes ambientes de área de trabalho

Este artigo é sobre como os gráficos funcionam no Linux e em quais componentes eles consistem. Ele contém muitas capturas de tela de várias implementações de ambientes de desktop. 



Se você realmente não diferencia entre KDE e GNOME, ou o faz, mas gostaria de saber quais são as outras alternativas, então este artigo é para você. É uma visão geral e, embora haja muitos nomes e poucos termos, o material também será útil para iniciantes e voltados apenas para o Linux.



O tópico também pode interessar aos usuários avançados ao configurar o acesso remoto e ao implementar um thin client. Costumo encontrar usuários Linux bastante experientes com as declarações "há apenas a linha de comando no servidor e não pretendo estudar os gráficos em mais detalhes, já que tudo isso é necessário para usuários comuns." Mas mesmo os conhecedores de Linux ficam surpresos e felizes em descobrir a opção "-X" do comando ssh (que é útil para entender como o servidor X funciona e funciona).



Uma fonte



Tenho ensinado cursos de Linux na LANIT Networking Academy por quase 15 anos»E tenho certeza de que muitas das mais de cinco mil pessoas que treinei lêem e provavelmente escrevem artigos sobre o Habr. Os cursos são sempre muito ricos (a duração média do curso é de cinco dias), é preciso falar sobre temas que levam no mínimo dez dias para se familiarizar totalmente. E sempre durante o curso, dependendo do público (novatos reunidos ou administradores experientes), bem como das "perguntas do público", faço uma escolha do que transmitir com mais detalhes, e o que é mais superficial, para dedicar mais tempo aos utilitários de linha de comando e sua aplicação prática ... Muitos desses precisam se sacrificar um pouco. Estes são "História do Linux", "Diferenças nas distribuições Linux", "Sobre licenças: GPL, BSD, ...", "Sobre ambientes gráficos e de desktop" (o tópico deste artigo), etc. Não que eles não sejam importantes,mas geralmente há muitas perguntas mais relevantes "aqui e agora" e apenas cerca de cinco dias ... No entanto, para uma compreensão geral dos fundamentos do Linux, entendendo a diversidade disponível (de modo que mesmo usando uma distribuição específica do Linux, você ainda tem uma visão mais ampla de tudo isso um mundo enorme e imenso que é chamado de "Linux") é útil e necessário estudar esses tópicos. 



No decorrer do artigo, para cada componente, forneço links para aqueles que desejam se aprofundar no tópico, por exemplo, para artigos na Wikipedia (enquanto aponto para uma versão mais completa / útil se houver artigos em inglês e russo).



Para exemplos básicos e capturas de tela, usei a distribuição openSUSE. Qualquer outra distribuição desenvolvida pela comunidade pode ser usada com um grande número de pacotes no repositório. É difícil, mas possível, demonstrar a variedade de designs de desktop em uma distribuição comercial, já que eles geralmente usam apenas um ou dois dos ambientes de desktop mais conhecidos. Assim, os desenvolvedores restringem a tarefa de lançar um sistema operacional estável e depurado. No mesmo sistema, instalei todos os DM / DE / WM (explicação desses termos abaixo) que encontrei no repositório. 



As imagens com "quadros azuis" são feitas no openSUSE. 



Capturas de tela com "quadros brancos" foram feitas em outras distribuições, elas são mostradas na captura de tela. 



Capturas de tela com "quadros cinza" foram tiradas da Internet, como exemplos de designs de desktop do passado.



Então, vamos começar.



Os principais componentes que compõem os gráficos



Vou destacar três componentes principais e listá-los na ordem em que começam na inicialização do sistema: 



  1. DM (Display Manager);
  2. Servidor de exibição;
  3. DE (Ambiente Desktop).


Além disso, como subitens importantes no Ambiente de Trabalho: 



  • Apps Manager / Launcher / Switcher (botão Iniciar); 
  • WM (gerenciador de janelas);
  • vários softwares fornecidos com o ambiente de desktop.


Mais detalhes sobre cada item.



DM (Display Manager)



O primeiro aplicativo que inicia quando o "gráfico" é iniciado é o DM (Display Manager), um gerenciador de display. Suas principais tarefas:



  • perguntar quais usuários permitir no sistema, solicitar dados de autenticação (senha, impressão digital);
  • escolha qual ambiente de área de trabalho iniciar.


No momento, várias distribuições são amplamente utilizadas: 



  • SDDM (substituído KDM ),
  • GDM ,
  • LightDM ,
  • XDM .
  • Fly-DM (usado no AstraLinux) também pode ser mencionado.


A lista de DMs existentes é mantida atualizada no artigo Wiki. 











É importante notar que as seguintes capturas de tela usam o mesmo gerenciador de exibição LightDM, mas em distribuições diferentes (as distribuições são nomeadas entre parênteses). Veja como este DM pode ser diferente graças ao trabalho dos designers de várias distribuições.













O principal nesta variedade é deixar claro que existe um aplicativo que é responsável por lançar gráficos e permitir que o usuário acesse esses gráficos, e existem diferentes implementações deste aplicativo que diferem em aparência e um pouco de funcionalidade (escolha de ambientes de design, escolha do usuário, versão para mau ver os usuários, a disponibilidade de acesso remoto via protocolo XDMCP ).



Servidor de exibição



Display Server é uma espécie de base gráfica, cuja principal tarefa é trabalhar com uma placa de vídeo, monitor e diversos dispositivos de entrada (teclado, mouse, touchpads). Ou seja, um aplicativo (por exemplo, um navegador ou editor de texto) que é renderizado em "gráficos" não precisa saber trabalhar diretamente com dispositivos, não precisa saber sobre drivers. O X Window cuida de tudo isso.



Quando falamos em Display Server, por muitos anos no Linux e no Unix, estava se referindo ao aplicativo X Window System ou, nas pessoas comuns, X (X). 



Muitas distribuições estão substituindo o X pelo Wayland . Você também pode ler: 









Para começar, vamos lançar o X e vários aplicativos gráficos neles.



Workshop "execute o X e aplicativos nele"



Farei tudo a partir do usuário webinaruser recém-criado (seria mais fácil, mas não mais seguro fazer tudo como root).



  • Como o X'am precisa de acesso aos dispositivos, eu forneço acesso: A lista de dispositivos foi determinada observando os erros ao iniciar o X'ov no log (/home/webinaruser/.local/share/xorg/Xorg.77.log) 


% sudo setfacl -m u:webinaruser:rw /dev/tty8 /dev/dri/card0 /dev/fb0 /dev/input/*



  • Depois disso, eu lanço o X:


% X -retro :77 vt8 & 



Opções: * -retro - executa com um fundo clássico "cinza", não preto como o padrão; *: 77 - Eu defini (qualquer um em um intervalo razoável é possível, apenas: 0 provavelmente já está ocupado por um gráfico já em execução) número da tela, um identificador único real pelo qual será possível distinguir entre vários Xs em execução; * vt8 - indica o terminal, aqui / dev / tty8, no qual os Xs serão exibidos). 



  • Lançamos o aplicativo gráfico:


Para fazer isso, primeiro definimos uma variável pela qual o aplicativo entenderá qual dos Xs em execução em mim enviará o que precisa ser desenhado: 



% export DISPLAY=":77" 



Você pode visualizar a lista de Xs em execução da seguinte forma:



ps -fwwC X



Após definir a  variável, você pode iniciar aplicativos em nosso X de - por exemplo, eu inicio o relógio:



% xclock -update 1 & 



% xcalc & 



% xeyes -g 200x150-300+50 &






Ideias principais e conclusões deste snippet:



  • X' : , , ,
  • X' — ( «--retro») (, 1920x1080 1024x768), .
  • «» , X' .
  • X' .
  • DISPLAY , ( X' ), ,  X'. ( X', .) X' -auth, XAUTHORITY xhost.
  • ( X-) X' — // «-g ()x()+()+()». «»  .
  • Dois termos que valem a pena expressar: servidor X (como os X são chamados) e clientes X (como qualquer aplicativo gráfico executado no X é chamado). Existe um pouco de confusão no entendimento desta terminologia, muitos entendem exatamente o contrário. No caso em que eu da "máquina cliente" (na terminologia de acesso remoto) me conecto ao "servidor" (na terminologia de acesso remoto) para exibir um aplicativo gráfico do servidor em meu monitor, então o servidor X é iniciado na máquina onde o monitor ( ou seja, na "máquina cliente", não no "servidor"), e os clientes X são iniciados e executados no "servidor", embora sejam exibidos no monitor da "máquina cliente". 




Componentes DE



A seguir, vamos dar uma olhada nos componentes que normalmente constituem uma área de trabalho.



Componentes DE: botão Iniciar e barra de tarefas



Vamos começar com o chamado botão "Iniciar". Geralmente, é um miniaplicativo separado usado na barra de tarefas. Geralmente também possui um miniaplicativo para alternar entre os aplicativos em execução.





Olhando para diferentes ambientes de trabalho, eu resumiria tais aplicativos sob o nome geral de "Apps Manager (Launcher / Switcher)", ou seja, uma ferramenta para gerenciar aplicativos (iniciar e alternar entre os iniciados), e também indicar utilitários que são um exemplo de um aplicativo desse tipo ...



  • Acontece na forma de um botão "Iniciar" no clássico (comprimento total de uma das bordas da tela) "Barra de tarefas":



    ○ painel xfce4,

    ○ painel mate / painel gnomo,

    ○ painel vala,

    ○ tint2.
  • «MacOS- » ( ), . — « ».



    ○ docky,

    ○ latte-dock,

    ○ cairo-dock,

    ○ plank.
  • / , « » ( ):



    ○ sxhkd.
  • - «» ( . Launch ()):



    ○ dmenu-run,

    ○ rofi -show drun,

    ○ albert,

    ○ grun.




DE: WM (Window Manager)



Mais em Russo



Mais em Inglês



WM (Window Manager) - um tipo de aplicativo responsável por gerenciar janelas, adiciona a capacidade de:



  • mover janelas pela área de trabalho (incluindo a janela padrão mantendo pressionada a tecla Alt para qualquer parte da janela, não apenas o título);
  • redimensionar janelas, por exemplo, arrastando para fora da "moldura da janela";
  • adiciona "título" e botões para minimizar / maximizar / fechar o aplicativo na interface da janela;
  • o conceito de qual aplicativo está em foco.




Vou listar os mais famosos (entre parênteses indico em qual DE é usado por padrão):







Também listarei "WM antigo com elementos DE". Essa. além do gerenciador de janelas, eles têm elementos como o botão Iniciar e a Barra de Tarefas, que são mais inerentes a um DE completo. Quantos anos eles têm, no entanto, se o IceWM e o WindowMaker já lançaram suas versões atualizadas em 2020. Acontece que é mais correto não "velho", mas "veterano":















Além do "clássico" ("gerenciadores de janela de pilha"), vale mencionar os WMs lado a lado, que permitem colocar janelas "lado a lado" em toda a tela, bem como para alguns aplicativos uma área de trabalho separada para cada aplicativo iniciado em tela inteira. Isso é um pouco incomum para pessoas que nunca os usaram antes, mas como eu uso essa interface há muito tempo, posso dizer que é bastante conveniente e você se acostuma rapidamente com essa interface, após o que os gerenciadores de janela "clássicos" não parecem convenientes.







Também vale a pena mencionar separadamente o projeto Compiz e um conceito como "Composite Window Manager", que usa aceleração de hardware para exibir transparência, sombras e vários efeitos tridimensionais. Cerca de 10 anos atrás, houve um boom de efeitos 3D em desktops Linux. Muitos dos gerenciadores de janela integrados de DE agora aproveitam parcialmente os recursos compostos. O Wayfire apareceu recentemente - um produto com funcionalidade Compiz semelhante ao Wayland.





Uma lista detalhada de diferentes gerenciadores de janela também pode ser encontrada no  artigo de comparação .



Componentes DE: descanso



Também vale a pena observar os seguintes componentes da área de trabalho (aqui, uso termos em inglês bem estabelecidos para descrever o tipo de aplicativo - não são os nomes dos aplicativos em si):



  • Applets:
  • Software (kit de ferramentas de widget) - muitas vezes, um certo "conjunto mínimo" de software é fornecido com o ambiente:


DE (Ambiente de Trabalho)



Mais em inglês



Dos componentes listados acima, o chamado "ambiente de design de desktop" é obtido. Freqüentemente, todos os seus componentes são desenvolvidos usando as mesmas bibliotecas gráficas e os mesmos princípios de design. Isso, no mínimo, mantém um estilo geral para a aparência dos aplicativos.



Aqui podemos destacar os seguintes ambientes de desktop existentes:





GNOME e KDE são considerados os mais comuns, e o XFCE está em seus calcanhares.





A comparação por vários parâmetros na forma de uma tabela pode ser encontrada no artigo da Wikipedia correspondente .  



Variedade DE





Project_Looking_Glass



Existem até exemplos interessantes da história: em 2003-2007 um "design de desktop 3D" foi feito para Linux chamado "Project Looking Glass" da Sun. Eu mesmo usei esse desktop, ou melhor, “joguei”, pois era difícil de usar. Este "design 3D" foi escrito em Java em uma época em que não havia placas gráficas 3D. Portanto, todos os efeitos eram contados pelo processador, e o computador tinha que ser muito potente, senão tudo funcionava devagar. Mas acabou lindamente. Matrizes de aplicação tridimensionais podem ser giradas / expandidas. Era possível girar em um cilindro de desktop com papel de parede de um panorama de 360 ​​graus. Havia vários aplicativos bonitos próprios: por exemplo, ouvir música na forma de "trocar CDs", etc. Você pode assistir no youtubevídeo sobre este projeto, apenas a qualidade desses vídeos provavelmente será ruim, já que naquela época não era possível enviar vídeos de alta qualidade.









Desktop Xfce leve. O projeto existe há muito tempo, desde 1996. Nos últimos anos, ele se tornou bastante popular, ao contrário do KDE e do GNOME, que em muitas distribuições exigem uma interface de desktop leve e "clássica". Possui muitas configurações e um grande número de seus programas: terminal (xfce4-terminal), gerenciador de arquivos (thunar), visualizador de imagens (ristretto), editor de texto (mousepad).



 



Pantheon 



Usado na distribuição "Elementary OS". Aqui, podemos dizer que existem "desktops" que são desenvolvidos e usados ​​em uma distribuição separada e não são muito usados ​​(se não "nem um pouco usados") em outras distribuições. Pelo menos eles ainda não ganharam popularidade e convenceram uma grande parte do público dos benefícios de sua abordagem. O Pantheon tem como objetivo construir uma interface semelhante ao macOS. 





Opção de encaixe:





Enlightenment



Forte ênfase em efeitos gráficos e widgets (desde os dias em que outros ambientes de área de trabalho não tinham widgets na área de trabalho, como calendário / relógio). Usa suas próprias bibliotecas. Há um grande conjunto de suas "belas" aplicações: terminal (Terminologia), reprodutor de vídeo (Rage), visualização de imagens (Ephoto).





Moksha



Este é um fork do Enlightenment17 e é usado pela distribuição BodhiLinux. 





GNOME



Originalmente uma interface de desktop "clássica", criada em oposição ao KDE, que foi escrita na biblioteca Qt, na época distribuída sob uma licença que não era muito conveniente para distribuições comerciais. 





GNOME_Shell



Desde a terceira versão, o GNOME começou a ser fornecido com o GNOME Shell, que tem uma "aparência não clássica", que nem todos os usuários gostaram (qualquer mudança drástica nas interfaces é difícil para os usuários aceitarem). Como consequência - o surgimento de projetos de fork que continuam o desenvolvimento deste desktop no estilo "clássico": MATE e Cinnamon. Usado por padrão em muitas distribuições comerciais. Possui um grande número de configurações e aplicativos. 





MATE é 



baseado no GNOME2 e continua a evoluir este ambiente de design. Possui um grande número de configurações e garfos de aplicativos que foram usados ​​no GNOME2 (novos nomes são usados) para não confundir os garfos com sua nova versão do GNOME3).





Cinnamon Um



fork do GNOME Shell que fornece aos usuários uma interface de estilo "clássico" (como era o caso no GNOME2). 



Possui um grande número de configurações e os mesmos aplicativos do GNOME Shell.





Budgie Um fork do



estilo "clássico" do GNOME que evoluiu como parte da distribuição Solus, mas agora também é fornecido como um desktop independente em várias outras distribuições.





KDE_Plasma (ou, como é freqüentemente chamado, simplesmente KDE) 



Um ambiente de área de trabalho desenvolvido pelo projeto KDE. 



Possui um grande número de configurações disponíveis para o usuário comum a partir da interface gráfica e muitos aplicativos gráficos desenvolvidos dentro deste desktop.





Trinity



Em 2008, o KDE lançou sua nova implementação do KDE Plasma (o mecanismo de desktop foi amplamente reescrito). Além disso, como com o GNOME / MATE, nem todos os fãs do KDE gostam. Como resultado, surgiu um fork do projeto, dando continuidade ao desenvolvimento da versão anterior, chamada TDE (Trinity Desktop Environment).





Deepin_DE



Um dos mais novos ambientes de desktop escrito usando Qt (no qual KDE foi escrito). Possui muitas configurações e é bastante bonito (embora este seja um conceito subjetivo) e interface bem desenvolvida. Desenvolvido como parte da distribuição Deepin Linux. Também existem pacotes para outras distribuições





Fly 



Um exemplo de ambiente de trabalho escrito usando Qt. Desenvolvido como parte da distribuição Astra Linux. 





LXQt



Ambiente de desktop leve. Como vários exemplos anteriores, escritos usando Qt. Na verdade, é uma continuação do projeto LXDE e o resultado de uma fusão com o projeto Razor-qt.



Como você pode ver, a área de trabalho no Linux pode ser muito diferente e haverá uma interface adequada para todos os gostos: de muito bonita e com efeitos 3D a minimalistas, de "clássico" a incomum, de usar ativamente recursos do sistema a leves, de grandes telas para tablets / smartphones.



Bem, espero ter conseguido dar uma ideia de quais são os principais componentes dos gráficos e do desktop no Linux.



O material para este artigo foi lançado em julho de 2020 em um webinar. Você pode assistir aqui .



Isso é tudo. Espero que tenha sido útil. Se você tiver dúvidas ou comentários, por favor, escreva. Terei todo o prazer em responder. Bem, venha estudar na LANIT Networking Academy !



All Articles