Este artigo aborda como a gráficos são organizadas no Linux e quais componentes a compõem. Ele contém muitos screenshots com várias implementações de ambientes de desktop.
Se você não consegue distinguir muito bem KDE e GNOME, ou se consegue, mas gostaria de saber quais outras alternativas existem, este artigo é para você. É uma visão geral e, embora contenha muitos nomes e alguns termos, o material também será útil para iniciantes e para aqueles que estão apenas começando a explorar o Linux.
O tema pode interessar também a usuários avançados ao configurar o acesso remoto e ao implementar um cliente leve. Muitas vezes encontro usuários experientes de Linux que afirmam: 'no servidor existe apenas linha de comando, e não pretendo estudar gráficos mais detalhadamente, pois isso é tudo para usuários simples'. Mas até mesmo especialistas em Linux se surpreendem e se alegram ao descobrir a opção '-X' no comando ssh (e para isso é útil entender o funcionamento e as funções do servidor X).

Eu ensino cursos de Linux há quase 15 anos na “” e estou convencido de que muitos dos mais de cinco mil alunos que ensinei leem e, sem dúvida, escrevem artigos no Habr. Os cursos são sempre muito densos (a duração média do curso é de cinco dias), e é preciso abordar temas para os quais seria necessário no mínimo dez dias de aprendizado. E sempre, dependendo do público (se são iniciantes ou administradores experientes), bem como das 'perguntas do público', eu faço uma escolha sobre o que aprofundar e o que abordar de forma mais superficial, para dedicar mais tempo às utilidades da linha de comando e suas aplicações práticas. Existem suficientes temas que acabam sendo um pouco sacrificados. Estes incluem: 'História do Linux', 'Diferenças entre distribuições Linux', 'Sobre licenças: GPL, BSD, ...', 'Sobre gráficos e ambientes de desktop' (este tema do artigo) e outros. Não que não sejam importantes, mas geralmente há muitas questões mais relevantes 'aqui e agora' e apenas cinco dias... No entanto, para uma compreensão geral dos fundamentos do sistema operacional Linux e para entender a diversidade disponível (para que, mesmo utilizando uma distribuição específica do Linux, você ainda tenha uma visão mais ampla desse enorme e vasto mundo chamado 'Linux'), é útil e necessário estudar esses temas.
Ao longo do artigo sobre cada componente, eu forneço links para aqueles que desejam se aprofundar no assunto, por exemplo, para artigos na Wikipédia (nesse caso, indico a versão mais completa/útil quando existem versões em inglês e em russo).
Para os principais exemplos e capturas de tela, eu usei a distribuição openSUSE. Poderia ter utilizado qualquer outra distribuição desenvolvida pela comunidade, que possua um grande número de pacotes no repositório. É difícil, mas possível, demonstrar a diversidade de ambientes de desktop em uma distribuição comercial, já que frequentemente elas utilizam apenas um ou dois dos ambientes de desktop mais conhecidos. Dessa forma, os desenvolvedores restringem sua tarefa de lançar um sistema operacional estável e ajustado. No sistema atual, eu instalei todos os DM/DE/WM (explicação desses termos abaixo) que encontrei no repositório.
As capturas de tela com 'bordas azuis' foram feitas no openSUSE.
As capturas de tela com 'bordas brancas' foram feitas em outras distribuições, conforme indicado nas capturas.
As capturas de tela com 'bordas cinzas' foram retiradas da internet, como exemplos de designs de desktop de anos anteriores.
Então, vamos começar.
Os principais componentes da interface gráfica
Destaco três componentes principais e os listo na ordem em que são iniciados ao iniciar o sistema:
- DM (Display Manager);
- Servidor de Exibição;
- DE (Desktop Environment).
Adicionalmente, como pontos importantes dentro do Desktop Environment:
- Gerenciador de Apps/Lançador/Troca (Botão 'Iniciar');
- WM (Window Manager);
- diverso software fornecido junto com o ambiente de desktop.
Mais detalhes sobre cada item.
DM (Display Manager)
O primeiro aplicativo a ser iniciado ao carregar o 'gráfico' é o DM (Display Manager), o gerenciador de exibição. Suas principais tarefas são:
- perguntar quais usuários podem acessar o sistema, solicitar dados de autenticação (senha, impressão digital);
- escolher qual ambiente de desktop iniciar.
Atualmente, diversas distribuições utilizam amplamente:
- (substituiu ),
- ,
- ,
- .
- Também vale mencionar o Fly-DM (usado no AstraLinux).
A lista dos DM existentes é mantida atualizada na




Vale ressaltar que nas capturas de tela a seguir está sendo utilizado o mesmo gerenciador de exibição LightDM, mas em diferentes distribuições (os nomes das distribuições estão entre parênteses). Avalie o quanto esse DM pode parecer diferente devido ao trabalho dos designers de várias distribuições.





O principal nesse variedade é que fique claro que existe um aplicativo responsável por iniciar a parte gráfica e permitir que o usuário acesse essa parte gráfica, e existem diferentes implementações desse aplicativo que variam na aparência e um pouco na funcionalidade (escolha de ambientes de desktop, escolha de usuários, versão para usuários com deficiências visuais, possibilidade de acesso remoto através do protocolo ).
Servidor de Exibição
Servidor de Exibição é uma base gráfica, cuja principal tarefa é lidar com a placa de vídeo, monitor e vários dispositivos de entrada (teclado, mouse, touchpads). Ou seja, o aplicativo (por exemplo, um navegador ou editor de texto) que é renderizado na 'interface gráfica' não precisa saber como trabalhar diretamente com os dispositivos, não precisa saber sobre drivers. Tudo isso é responsabilidade do X Window.
Quando se fala em Servidor de Exibição, por muitos anos no Linux, e também no Unix, referia-se ao aplicativo ou, na linguagem popular, X (X’s).
Atualmente, muitas distribuições estão substituindo o X por .
Você também pode ler:
- ,
- ,
- (necessários para iniciar aplicativos gráficos remotamente, por exemplo, utilizando PuTTY).
Para começar, vamos iniciar o X e vários aplicativos gráficos nele.
Prática "iniciando X e aplicativos nele"
Eu realizarei tudo a partir de um usuário recém-criado webinaruser (seria mais fácil, mas não mais seguro, fazer tudo a partir do root).
- Como os X precisam de acesso aos dispositivos, vou conceder acesso: A lista de dispositivos foi determinada ao observar os erros ao iniciar os X 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/*
- Após isso, eu inicio os X:
% X -retro :77 vt8 &
Opções: * -retro — inicia com um fundo clássico "cinza" em vez de preto como padrão; * :77 — defino (pode ser qualquer valor dentro de um intervalo razoável, apenas :0 provavelmente já está ocupado por gráficos já em execução) o número da tela, que é um identificador único que pode ser usado para diferenciar várias instâncias do X em execução; * vt8 — indica o terminal, aqui /dev/tty8, onde os X serão exibidos).
- Iniciando um aplicativo gráfico:
Para isso, primeiro definimos a variável pela qual o aplicativo entenderá em quais das instâncias do X em execução ele deve enviar o que precisa desenhar:
% export DISPLAY=":77"
Para ver a lista de X em execução, faça assim:
ps -fwwC X
Depois de definir a variável, podemos iniciar aplicativos nos nossos X — por exemplo, iniciando o relógio:
% xclock -update 1 &
% xcalc &
% xeyes -g 200x150-300+50 &

Principais ideias e conclusões deste fragmento:
- Os X precisam de acesso a dispositivos: terminal, placa de vídeo, dispositivos de entrada,
- Os próprios X não exibem nenhum elemento de interface — é uma tela cinza (quando com a opção "—retro") ou preta de certas dimensões (por exemplo, 1920×1080 ou 1024×768), para executar aplicativos gráficos dentro dele.
- Pela movimentação do "cursor", é possível ver que os X rastreiam as posições do mouse e transmitem essas informações para os aplicativos que estão em execução.
- Os X também capturam toques de teclas do teclado e enviam essas informações para os aplicativos.
- A variável DISPLAY informa aos aplicativos gráficos em qual tela (cada instância do X ao iniciar recebe um número único de tela), e, assim, em quais das instâncias em execução na minha máquina os X devem ser desenhados. (Também é possível especificar uma máquina remota nessa variável e enviar a saída para os X em execução em outra máquina da rede.) Como os X foram iniciados sem a opção -auth, não há necessidade de lidar com a variável XAUTHORITY ou com o comando xhost.
- Aplicativos gráficos (ou como são chamados, clientes X) são desenhados nos X — sem possibilidade de movê-los/fechá-los/modificar "-g (Largura)x(Altura)+(DeslocamentoDaEsquerda)+(DeslocamentoDoTopo)". Com o sinal "menos" respectivamente, a partir da borda direita e inferior.
- Dois termos que vale a pena mencionar: servidor X (como são chamados os X's) e clientes X (como qualquer aplicativo gráfico executado nos X's). Há uma pequena confusão na compreensão dessa terminologia, muitos a entendem exatamente ao contrário. No caso em que me conecto a um 'servidor' (na terminologia de acesso remoto) a partir da 'máquina cliente' para exibir no meu monitor um aplicativo gráfico do servidor, o servidor X é executado na máquina onde está o monitor (ou seja, na 'máquina cliente', e não no 'servidor'), enquanto os clientes X são iniciados e operam no 'servidor', embora sejam exibidos no monitor da 'máquina cliente'.

Componentes DE
A seguir, vamos analisar os componentes que geralmente compõem a área de trabalho.
Componentes DE: botão 'Iniciar' e 'Painel de tarefas'
Começaremos com o chamado botão 'Iniciar'. Muitas vezes, este é um applet separado usado no 'Painel de tarefas'. Além disso, geralmente existe um applet para alternar entre os aplicativos em execução.

Ao observar diferentes ambientes de área de trabalho, eu generalizaria esses aplicativos sob o nome comum 'Gerenciador de Apps (Launcher/Switcher)', ou seja, uma ferramenta para gerenciar aplicativos (iniciar e alternar entre os em execução), além de indicar utilitários que são exemplos de tal tipo de aplicativo.
- Pode aparecer na forma de um botão 'Iniciar' no clássico 'Painel de tarefas' (que ocupa toda a extensão de um dos lados da tela):
○ xfce4-panel,
○ mate-panel/gnome-panel,
○ vala-panel,
○ tint2. - Também podem ser destacados painéis de tarefas com aparência de 'MacOS' (não ocupando toda a extensão da borda da tela), embora muitos painéis de tarefas possam aparecer em ambas as variantes. Aqui, a principal diferença é puramente visual — a presença do 'efeito de aumento de ícones ao passar o mouse'.
○ docky,
○ latte-dock,
○ cairo-dock,
○ plank. - E/ou serviços que iniciam aplicativos ao pressionar 'teclas de atalho' (na maioria dos ambientes de área de trabalho, um componente semelhante está sempre presente e permite configurar suas próprias teclas de atalho):
○ sxhkd.
- Além disso, há vários 'launchers' em formato de menu (do inglês Launch (iniciar)):
○ dmenu-run,
○ rofi -show drun,
○ albert,
○ grun.

Componentes DE: WM (Gerenciador de Janelas)
WM (Gerenciador de Janelas) — um aplicativo que gerencia janelas, adicionando a capacidade:
- mover janelas na área de trabalho (incluindo a movimentação padrão mantendo a tecla Alt pressionada em qualquer parte da janela, e não apenas na barra de título);
- redimensionar janelas, por exemplo, arrastando pela 'moldura da janela';
- adiciona ao interface da janela 'título (title)' e botões de minimizar/maximizar/fechar o aplicativo;
- a noção de qual aplicativo está em 'foco'.

Listarei os mais conhecidos (entre parênteses, indico em qual DE é utilizado por padrão):
- (GNOME3),
- (Mate),
- (GNOME2),
- (Cinnamon),
- (KDE),
- (XFCE),
- .

Também vou mencionar 'WM antigos com elementos de DE'. Ou seja, além do gerenciador de janelas, eles possuem elementos como o botão 'Iniciar' e 'Barras de tarefas', mais característicos de DE completos. No entanto, como podem ser considerados 'antigos', se tanto o IceWM quanto o WindowMaker já lançaram suas versões atualizadas em 2020? Portanto, o mais correto seria não 'antigos', mas 'veteranos':
- ,
- ,
- , , , ,
- …





Além dos 'clássicos' ('gerenciadores de janelas empilhados'), é importante destacar , que permite dispor janelas 'como telhas' por toda a tela, além de oferecer um desktop separado para cada aplicativo em tela cheia. Isso pode ser um pouco estranho para aqueles que não o utilizaram antes, mas como eu mesmo uso tal interface há bastante tempo, posso dizer que é bastante conveniente e você se acostuma rapidamente a essa interface, após o que os 'gerenciadores de janelas clássicos' já não parecem tão práticos.
- ,
- ,
- ,
- ,
- ,
- qtile,
- bspwm,
- herbstluftwm,
- …
- twin,
- .

Vale mencionar também o projeto e o termo 'Gerenciador de Composição de Janelas', que utiliza recursos de 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. Atualmente, muitos dos gerenciadores de janelas integrados no DE utilizam parcialmente as capacidades de composição. Recentemente, surgiu — um produto com funcionalidade semelhante ao Compiz para Wayland.

Uma lista detalhada de vários gerenciadores de janelas também pode ser vista na .
Componentes DE: outros
Também vale a pena ressaltar os seguintes componentes da área de trabalho (aqui utilizo termos em inglês estabelecidos para descrever as variedades de aplicativos — não são os nomes dos próprios aplicativos):
- Applets:
- O software (Widget toolkit) — frequentemente é fornecido com um "conjunto mínimo" de software:
DE (Ambiente de Trabalho)
Dos componentes mencionados acima, forma-se o chamado "Ambiente de Desktop". Muitas vezes, todos os seus componentes são desenvolvidos usando as mesmas bibliotecas gráficas e seguindo princípios semelhantes de design. Dessa forma, pelo menos, mantém-se um estilo comum para a aparência dos aplicativos.
Aqui podemos destacar os seguintes ambientes de desktop atualmente existentes:
Os mais comuns são GNOME e KDE, com XFCE logo atrás.

A comparação em vários parâmetros na forma de tabela pode ser vista na correspondente .
Diversidade DE

Existem até exemplos interessantes da história: de 2003 a 2007, foi desenvolvido para Linux a "interface de desktop 3D" chamada "Project Looking Glass" pela empresa Sun. Eu mesmo usei esse desktop, ou melhor, "brinquei" com ele, pois era difícil de usar. Essa "interface 3D" foi escrita em Java numa época em que ainda não existiam placas de vídeo com suporte a 3D. Portanto, todos os efeitos eram calculados pelo processador, e o computador precisava ser muito potente, caso contrário, tudo funcionava lentamente. Mas tudo ficava bonito. As janelas dos aplicativos eram giradas/abreviadas. Era possível girar em um cilindro de desktop com papéis de parede em 360 graus. Havia vários aplicativos bonitos: por exemplo, ouvir música com a "mudança de CDs", etc. Você pode assistir no youtube sobre este projeto, embora a qualidade desses vídeos provavelmente seja baixa, pois naquela época não havia como carregar vídeos de alta qualidade.

Desktop leve. Existe um projeto já faz bastante tempo, desde 1996. Nos últimos anos, tornou-se bastante popular, em contraste com os ambientes mais pesados KDE e GNOME, que muitos distribuições requerem uma interface de desktop leve e "clássica". Ele possui muitas configurações e uma grande quantidade de seus próprios programas: terminal (xfce4-terminal), gerenciador de arquivos (thunar), visualizador de imagens (ristretto), editor de texto (mousepad).

Usado na distribuição "Elementary OS". Pode-se dizer que existem "ambientes de trabalho" que são desenvolvidos e utilizados dentro de uma única distribuição, e que não são muito empregados (para não dizer "nada empregados") em outras distribuições. Pelo menos, até agora, eles não ganharam popularidade e não convenceram a maior parte do público sobre as vantagens de sua abordagem. O Pantheon tem como objetivo construir uma interface semelhante ao macOS.

Opção com painel dock:

Forte ênfase em efeitos gráficos e widgets (mesmo desde os tempos em que outros ambientes de trabalho não possuíam widgets na área de trabalho, como calendário/relógio). Usa suas próprias bibliotecas. Possui um grande conjunto de seus próprios aplicativos "bonitos": terminal (Terminology), reprodutor de vídeo (Rage), visualizador de imagens (Ephoto).

É um fork do Enlightenment17, que é utilizado na distribuição BodhiLinux.

Originalmente uma interface de desktop "clássica", criada em oposição ao KDE, que foi escrito na biblioteca QT, na época licenciada de uma forma não muito conveniente para distribuições comerciais.

A partir da terceira versão do GNOME, ele passou a ser fornecido com a interface GNOME Shell, que tem um "visual não clássico", o que não agradou a todos os usuários (quaisquer mudanças drásticas nas interfaces são difíceis de serem aceitas pelos usuários). Como consequência, surgiram projetos fork que continuam o desenvolvimento deste ambiente de trabalho em estilo "clássico": MATE e Cinnamon. É utilizado por padrão em muitas distribuições comerciais. Possui muitas configurações e seus próprios aplicativos.

Surgiu com base no GNOME2 e continua a evolução deste ambiente de desktop. Tem muitas configurações e forks de aplicativos que eram utilizados ainda no GNOME2 (com novos nomes para evitar confusão com as novas versões para o GNOME3).

Fork do GNOME Shell, proporcionando aos usuários uma interface em estilo "clássico" (como era no GNOME2).
Possui muitas configurações e os mesmos aplicativos que o GNOME Shell.

Fork do GNOME em estilo "clássico", desenvolvido dentro da distribuição Solus, mas agora também está disponível como um ambiente de desktop autônomo em várias outras distribuições.

(ou, como costuma ser chamado, apenas KDE)
Ambiente de desktop desenvolvido dentro do projeto KDE.
Possui uma enorme quantidade de configurações disponíveis para o usuário comum a partir da interface gráfica e muitos aplicativos gráficos desenvolvidos no âmbito dessa área de trabalho.

Em 2008, o KDE lançou sua nova implementação do KDE Plasma (o motor da área de trabalho foi bastante reescrito). Assim como no caso do GNOME/MATE, nem todos os fãs do KDE apreciaram isso. Como resultado, surgiu um fork do projeto, continuando o desenvolvimento da versão anterior, chamado TDE (Trinity Desktop Environment).

Uma das novas áreas de trabalho, escrita utilizando Qt (no qual o KDE é baseado). Possui muitas configurações e uma interface bastante bonita (embora isso seja uma questão subjetiva) e elaborada. Está sendo desenvolvida no âmbito da distribuição Deepin Linux. Também existem pacotes para outras distribuições.

Fly
Exemplo de uma área de trabalho, escrita utilizando Qt. Está sendo desenvolvida no âmbito da distribuição Astra Linux.

Ambiente de área de trabalho leve. Assim como vários exemplos anteriores, é escrita utilizando Qt. Na verdade, é uma continuação do projeto LXDE e o resultado da fusão com o projeto Razor-qt.
Como você pode ver, a área de trabalho no Linux pode ter uma aparência muito variada e há um interface adequada ao gosto de cada um: desde as muito bonitas e com efeitos 3D até as minimalistas, das 'clássicas' às incomuns, algumas que utilizam muitos recursos do sistema até as leves, desde monitores grandes até tablets/smartphones.
Espero que eu tenha conseguido dar uma ideia dos principais componentes que constituem a interface gráfica e a área de trabalho no sistema operacional Linux.
O material para este artigo foi testado em julho de 2020 durante um webinar. Ele pode ser assistido. .
Isso é tudo. Espero que tenha sido útil. Se você tiver alguma dúvida ou comentário, escreva. Ficarei feliz em responder. E venha estudar na !
Fonte: habr.com
