Servidor de exibição x Gerenciador de janelas x Driver de gráficos?

8

Estou tentando classificar meu entendimento da parte diferente dos gráficos no Linux e estou confuso quanto aos papéis desempenhados por cada um dos seguintes conceitos.

  • Servidor de exibição
  • Gerenciador de Janelas
  • Driver de gráficos

Minhas perguntas:

  • Os drivers gráficos são implementados dentro do Kernel Linux ou fora? Se fora do kernel, por que eles são excluídos quando rede, disco e sistema de arquivos estão todos dentro do kernel?
  • X Windows, Gnome, Ubuntu Unity, KDE, Mir, Wayland, quem faz o que em termos de servidor de exibição, gerenciador de janelas e driver de gráficos?

Meu objetivo para esta pergunta é entender quais projetos estão contribuindo com quais partes da experiência gráfica do Linux?

ATUALIZAÇÃO http://blog.mecheye.net/2012/06/the-linux-graphics-stack/ tem muitos detalhes que eu estava procurando.

ams
fonte

Respostas:

3

O termo "driver gráfico" é usado para se referir a várias coisas diferentes. Um deles é um driver de kernel. O driver do kernel apenas define o modo de vídeo e facilita a transmissão de dados de / para o cartão. Ele também geralmente baixa o firmware na GPU do cartão. O firmware é um programa que a GPU executa, mas, infelizmente, os fornecedores gráficos apenas o fornecem como um blob binário, para que você não possa ver o código fonte.

Acima disso, você normalmente tem o Xorg em execução, que possui seu próprio driver que traduz chamadas genéricas de desenho X11 ou OpenGL em comandos que o cartão entende e as envia para o cartão para executar. Também pode fazer parte do trabalho, dependendo de quais comandos a gpu faz e não suporta. No caso das chamadas OpenGL, a Infraestrutura de Renderização Direta permite que essa parte do driver seja executada diretamente diretamente no aplicativo cliente, e não no servidor X, para obter um desempenho aceitável. Ele também permite que o driver no aplicativo cliente envie seus comandos diretamente para a gpu, graças à coordenação e ajuda do Xorg e do driver do kernel na inicialização.

Wayland e Mir devem substituir o Xorg como um tipo simplificado de servidor de exibição.

O Unity é um shell (fornece desktop / iniciador) e um gerenciador de janelas de composição em um.

GNOME e KDE são ambientes de desktop. Eles são grandes projetos que consistem em muitos componentes. O núcleo deles são os respectivos kits de ferramentas de aplicativos, que são GTK para GNOME e Qt para KDE. Essa é uma estrutura de biblioteca na qual um aplicativo é escrito e fornece a base sobre a qual tudo o mais é construído. Alguns dos serviços básicos que eles fornecem são manipulação de eventos e objetos, Windows, funções básicas de desenho, E / S e muito mais.

psusi
fonte
4
  • Os drivers gráficos são implementados como módulos do kernel que precisam ser carregados nele. Então, basicamente, eles estão fora do kernel. Se um kernel pode ou não ser construído para contê-los é uma questão que resta de alguém com mais conhecimento do que eu para responder. Eu acho que eles foram excluídos do kernel porque se um kernel for construído com, digamos, o nouveaudriver, haveria conflitos ao carregar um driver proprietário da NVIDIA posteriormente.
  • X Windows, Wayland e Mir são servidores de exibição.
  • Gnome, Ubuntu Unity e KDE são todos ambientes de desktop, não gerenciadores de janelas. Um gerenciador de janelas faz parte de um ambiente de área de trabalho (por exemplo, o Gnome usa metacity). Dito isto, você pode executar gerenciadores de janelas independentes (sem ambiente de desktop) como awesome , xmonad ou openbox

Quanto a qual componente desempenha qual parte:

  • O driver gráfico é como o kernel "fala" com a placa gráfica.
  • O servidor de exibição é o que cria e gerencia janelas e outros elementos gráficos da sua exibição.
  • Um ambiente de área de trabalho ou gerenciador de janelas atua como um cliente para o servidor de exibição e o instrui sobre como ele deve desenhar / decorar janelas, painéis, ...
Joseph R.
fonte
Os módulos do kernel são definitivamente considerados "dentro" do kernel.
Psusi
@psusi Eu escolhi ler o OP "dentro" e "fora" como significado embutido no kernel vs. carregado de "fora". Você provavelmente quer dizer "dentro" do kernel no sentido de que eles não fazem parte do espaço do usuário, certo?
Joseph R.
Sim, é assim que eu interpreto "dentro" vs "fora".
Psusi