106.1 Interface de Usuário e Desktop
O servidor X é a interface gráfica que o Linux disponibiliza para o usuário. Já o X11 ou Xorg é uma implementação dessa interface X, antes do Xorg, tínhamos o *XFree 86*. É o servidor X (Xorg) que é responsável por desenhar as janelas do Linux, como o Ambiente gráfico em sí, o movimento do mouse ou qualquer coisa que rode sobre a interface gráfica. O ambiente gráfico como um todo só é possível rodar por causa do Xorg, ou seja, é o Xorg que desenha o ambiente gráfico para o usuário.
Em cima do Xorg, temos os gerenciadores de janela, que falam para o Xorg o que ele deve desenhar, aqui temos: mutter, KDE, Muffin, Xfwm, metacity dentre outros.
Além disso, ainda temos os Display Manager, ele é responsável por solicitar o usuário/senha assim que o sistema inicia, para que você possa acessar o Linux e começar a utilizá-lo, os Display Managers mais conhecido são GDM e LightDM.
Resumindo, temos o Xorg rodando nas camadas mais baixas, depois temos os gerenciadores de janela, que informam ao Xorg como desenhar o ambiente gráfico e por fim os Display Managers que fazem com que o usuário consiga se autenticar. O Xorg funciona num sistema de cliente/servidor, o X é a interface gráfica e todos os programas que rodam em cima do X são clientes do servidor X.
O arquivo de configuração fica em /etc/X11/xrog.conf
, a maioria das distribuições de hoje não possuem mais esse arquivo, tudo é detectado durante o boot, então por padrão, o arquivo não é mais gerado, se quisermos esse arquivo, vamos ter que gerar ele manualmente. Para gerar esse arquivo, você deve parar a execução do X, e então rode Xorg -configure
.
O comando startx
sobe a interface gráfica da máquina.
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
# Fontes que serão usadas e disponibilizadas para o usuário.
Section "Files"
ModulePath "/usr/lib/xorg/modules"
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/share/fonts/X11/cyrillic"
FontPath "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
FontPath "built-ins"
# Fontes remotas (xfs):
# FontPath "unix:/7100"
# FontPath "tcp/fonts.server.com:7100"
EndSection
Section "Module"
Load "glx"
EndSection
# Configurar um input:
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
# Option "Emulate3Buttons" "no"
# Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5 6 7"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
# HorizSync 30.0 - 83.0
# VertRefresh 55.0 - 75.0
#My custom 1920x1080 mode
# Modeline "1920x1080" 138.50 1920 1968 2000 2080 1080 1083 1088 1111
EndSection
Section "Device"
### Available Driver options are:-
### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
### <percent>: "<f>%"
### [arg]: arg optional
#Option "EnableImageCache" # [<bool>]
#Option "EnableFallbackCache" # [<bool>]
#Option "EnableSurfaces" # [<bool>]
#Option "DebugRenderFallbacks" # [<bool>]
#Option "NumHeads" # <i>
#Option "SpiceDeferredFPS" # <i>
Identifier "Card0"
Driver "qxl"
BusID "PCI:0:1:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Viewport 0 0
Depth 1
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 4
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 8
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 15
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 16
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
EndSection
Note que atualmente o /etc/X11/xorg.conf
praticamente não é mais utilizado. As distribuições atuais tem utilizado arquivos no diretório /usr/share/X11/xorg.conf.d/
ou equivalente para incluir tais configurações.
Para exemplos de xorg.conf, podemos consultar os links abaixo:
https://svn.exactcode.de/t2/trunk/package/xorg/xorg-server/xorg.conf.example
O xorg.conf pode ser utilizado principalmente no caso de configurações específicas necessárias para que algum dispositivo seja utilizado. O xorg.conf
é dividido em seções, como descrito abaixo.
Module
Carregamento dinâmico de módulos.
Section "Module"
Load "glx"
Load "dbe"
Load "extmod"
EndSection
Files
Caminhos para alguns arquivos e diretórios utilizados pelo servidor X, como módulos mas principalmente as fontes.
Section "Files"
ModulePath "/usr/lib/xorg/modules"
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
FontPath "built-ins"
FontPath "unix:/7100"
FontPath "tcp/fonts.server.com:7100"
EndSection
InputDevice
Contêm configurações referentes aos dispositivos de entrada, principalmente mouse e teclado. Identifier e Driver são parâmetros obrigatórios utilizados para especificar o dispositivo. Além disso parâmetros Option podem ser adicionados para implementar configurações específicas
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbModel" "pc105"
Option "XkbLayout" "us"
Option "AutoRepeat" "500 200"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Device
Seção utilizada principalmente para configuração da placa de vídeo. Semelhante ao InputDevice, tem os parâmetros Identifier e Driver como obrigatórios.
Section "Device"
Identifier "VideoCard0"
Driver "nv"
VendorName "nVidia"
BoardName "GeForce 6100"
VideoRam 131072
EndSection
Monitor
Configurações específicas do monitor utilizado, como HorizSync e VertRefresh.
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
HorizSync 30.0 - 83.0
VertRefresh 55.0 - 75.0
EndSection
Screen
A seção screen é uma combinação entre o monitor e a placa de vídeo, dizendo ao X quais os modos que ele pode trabalhar. Na sub-seção Display, são informados por exemplo as resoluções suportadas, color depth (bits por pixel), e etc.
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Viewport 0 0
Depth 1
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 4
EndSubSection
SubSection "Display"
Depth 24
Modes "1920x1080" "1280x1024" "1024x768"
EndSubSection
SubSection "Display"
Depth 8
Modes "1024x768" "800x600" "640x480"
EndSubSection
EndSection
ServerLayout
Esta seção agrega as outras definições da configuração do X, associando principalmente as informações do Screen e InputDevices.
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Qualquer erro que tenhamos em relação ao servidor X, ele ficará em ~/.xsession-errors
.
Variável DISPLAY
Indica onde as janelas vão ser exibidas (informa qual servidor X deve exibir a informação, pode ser o servidor X local :0
ou :0.0
, ou um servidor X remoto).
# Na máquina Servidor (vai servir sua imagem para outro host), temos que ditar a variável DISPLAY:
$ export DISPLAY=192.168.155.253:0.0
# Agora na máquina que vai receber a imagem da outra máquina, temos que fazer a liberação no Display Manager e no xorg, para que eles autorizem receber a imagem.
# Vamos fazer a liberação no display manager. Em ambientes que usa o GDM, altere o arquivo ''/etc/gdm3/custom.conf' no caso do ubuntu 20.04:
$ sudo vim /etc/gdm3/custom.conf
[security]
DisallowTCP=false
$ sudo service gdm restart
# Ainda na máquina que vai receber a imagem, temos que fazer a liberação no xorg:
sudo xhost +192.168.155.156
# Para remover a autorização, usamos a opção '-'.
# Para ver o que está liberado, use o comando abaixo:
$ xhost
# Somente o comando abaixo, irá desabilitar o controle de acesso.
$ sudo xhost +
XAUTH
Ao invés de usar o comando xhost
, podemos usar o comando xauth
. Para ver o que está liberado, podemos usar a opção list
, ambos os métodos de autenticação são independentes!
# Listando o que está liberado:
$ xauth list
chiredean/unix:0 MIT-MAGIC-COOKIE-1 49c21a632079f1fc848d7f79c3c79bb3
# Vamos pegar esse hash para adicionar a permissão de outra máquina:
$ xauth add 192.168.122.253:0 MIT-MAGIC-COOKIE-1 49c21a632079f1fc848d7f79c3c79bb3
# Pronto, agora deve estar funcionando.
Desktop Environment - DE
Conjunto de aplicações que fornece uma interface gráfica ao usuário, esse conjunto de aplicações temos os gerenciadores de janela, os Display Managers e as aplicações. Por exemplo, um Ambiente de Desktop (Desktop Environment em inglês) para Ubuntu 20.04 por padrão, fornece ao usuário o Display Manager conhecido como GDM, o Gerenciador de Janela é o Gnome e por padrão usa o Xorg.
Além disso tudo, ele ainda fornece aplicações para uso, como: calculadora, Gerenciador de arquivo, navegador, LibreOffice, dentre outras ferramentas. Então Desktop Environment é um ambiente completo para que um usuário possa utilizar o computador.
Os componentes de um Desktop Environment são:
- 1° Janela X (Normalmente Xorg, mas temos o Wayland também)
- 2° Gerenciador de Janelas (Windows Manager)
Exemplo: mutter, KDE, Muffin, Xfwm, metacity dentre outros.
Para ver qual o WM use o comando:
ls -l /etc/alternatives/ | grep window
.
- 3° Interface Gráfica (GUI) Exemplo: Gnome, KDE, XFCE entre outros.
- 4° Display Manager Exemplo: GDM, LightDM, LXDM, XDM entre outros.
Wayland
Veio para substituir o Xorg, sendo uma nova ferramenta que veio para substituir o Xorg. Tras uma nova arquitetura visando um melhor desempenho.