106.1 Lição 1
Certificação: |
LPIC-1 |
---|---|
Versão: |
5.0 |
Tópico: |
106 Interfaces de usuário e áreas de trabalho |
Objetivo: |
106.1 Instalar e configurar o X11 |
Lição: |
1 de 1 |
Introdução
O X Window System é uma pilha de software usada para exibir texto e gráficos em uma tela. A aparência geral e o design de um cliente X não são ditados pelo X Window System, mas sim gerenciados por cada cliente X individual, um gerenciador de janela (por exemplo, Window Maker, Tab Window Manager) ou um ambiente de desktop completo como KDE, GNOME ou Xfce. Os ambientes de desktop serão abordados em uma lição posterior. Esta lição se concentrará na arquitetura subjacente e nas ferramentas do Sistema X Window que um administrador precisa conhecer para configurar o X.
O X Window System é multiplataforma e roda em diversos sistemas operacionais, como Linux, BSDs, Solaris e outros sistemas semelhantes ao Unix. Existem também implementações disponíveis para o macOS da Apple e o Microsoft Windows..
A versão principal do protocolo X usado nas distribuições Linux modernas é X.org) versão 11, comumente escrita como X11. O protocolo X é o mecanismo de comunicação entre o cliente X e o servidor X. As diferenças entre o cliente X e o servidor X serão discutidas abaixo.
Note
|
O predecessor do X Window System foi um sistema de janelas chamado W, um esforço de desenvolvimento conjunto entre a IBM, a DEC e o MIT. Esse software foi derivado do Project Athena em 1984. Quando os desenvolvedores começaram a trabalhar em um novo servidor de exibição, eles escolheram a letra seguinte do alfabeto inglês: “X”. A evolução do X Window System é atualmente controlada pelo MIT X Consortium. |
A arquitetura do X Window System
O X Window System fornece os mecanismos para desenhar formas bidimensionais básicas (e formas tridimensionais por meio de extensões) em uma tela. Ele se divide em um cliente e um servidor e, na maioria das instalações em que uma área de trabalho gráfica é necessária, ambos os componentes estão no mesmo computador. O componente cliente assume a forma de um aplicativo, como um emulador de terminal, um game ou um navegador web. Cada aplicativo cliente informa ao servidor X sobre a localização e o tamanho de sua janela na tela do computador. O cliente também decide o que vai para aquela janela, e o servidor X exibe o desenho solicitado na tela. O X Window System também lida com os dados enviados por dispositivos como mouses, teclados, trackpads e muito mais.
O X Window System é compatível com rede. Múltiplos clientes X de diferentes computadores de uma rede podem fazer solicitações de desenho a um único servidor X remoto. A ideia por trás disso é que um administrador ou usuário pode ter acesso a um aplicativo gráfico em um sistema remoto que talvez não esteja disponível em seu sistema local.
Um recurso importante do X Window System é que ele é modular. Ao longo da existência do X
Window System, recursos mais novos foram sendo desenvolvidos e adicionados à sua estrutura.
Esses novos componentes foram adicionados apenas como extensões ao servidor X, deixando o
protocolo central do X11intacto. Essas extensões estão contidas nos arquivos de biblioteca Xorg. Eis
alguns exemplos de bibliotecas Xorg: libXrandr
, libXcursor
, libX11
, libxkbfile
e muitas outras que
fornecem funcionalidades extras ao servidor X.
O gerenciador de exibição fornece um login gráfico para um sistema. Esse sistema pode ser um computador local ou uma máquina em uma rede. O gerenciador de exibição é iniciado após a inicialização do computador e inicia uma sessão do servidor X para o usuário autenticado. O gerenciador de exibição também é responsável por manter o servidor X em funcionamento. Como exemplo de gerenciadores de exibição, podemos citar o GDM, o SDDM e o LightDM.
Cada instância de um servidor X em execução possui um nome de exibição que a identifica. O nome de exibição contém o seguinte:
hostname:displaynumber.screennumber
O nome de exibição também informa a um aplicativo gráfico onde ele deve ser renderizado e em qual hospedeiro (no caso de uma conexão X remota).
O hostname
refere-se ao nome do sistema que exibirá o aplicativo. Se o nome de exibição não
contiver o nome do hospedeiro, o host local será pressuposto.
O displaynumber
faz referência à coleção de “telas” que estão em uso, seja uma única tela de laptop
ou diversas telas em uma estação de trabalho. Cada sessão do servidor X em execução recebe um
número de exibição começando em 0
.
O screennumber
padrão é 0
. Esse pode ser o caso se apenas uma tela física ou diversas telas físicas
estiverem configuradas para funcionar como uma só tela. Quando todas as telas de uma
configuração de múltiplos monitores são combinadas em uma única tela lógica, as janelas do
aplicativo podem ser movidas livremente entre as telas. Em situações em que cada tela é
configurada para funcionar independentemente uma da outra, cada tela abrigará as janelas dos
aplicativos que forem abertos dentro delas e as janelas não podem ser movidas de uma tela para
outra. A cada tela independente será atribuído seu próprio número. Se houver apenas uma tela
lógica em uso, o ponto e o número da tela serão omitidos.
O nome de exibição de uma sessão X em execução é armazenado na variável de ambiente DISPLAY
:
$ echo $DISPLAY :0
A saída detalha o seguinte:
-
O servidor X em uso está no sistema local, portanto não há nada impresso à esquerda dos dois pontos.
-
A sessão atual do servidor X é a primeira indicada por
0
imediatamente após os dois pontos. -
Há apenas uma tela lógica em uso, portanto um número de tela não é visível.
Para ilustrar melhor esse conceito, consulte o seguinte diagrama:
- (A)
-
Um único monitor, com uma única configuração de monitor e apenas uma tela.
- (B)
-
Configurado como um único monitor, com dois monitores físicos configurados como uma tela. As janelas do aplicativo podem ser movidas livremente entre os dois monitores.
- (C)
-
Uma configuração de tela única (conforme indicado por
:0
), porém cada monitor é uma tela independente. Ambas as telas ainda compartilharão os mesmos dispositivos de entrada, como teclado e mouse; porém, um aplicativo aberto na tela:0.0
não pode ser movido para a tela:0.1
e vice-versa.
Para iniciar um aplicativo em uma tela específica, atribua o número da tela à variável de ambiente
DISPLAY
antes de iniciar o aplicativo:
$
$ DISPLAY=:0.1 firefox &
Esse comando iniciaria o navegador Firefox na tela à direita do diagrama acima. Alguns kits de
ferramentas também oferecem opções de linha de comando para instruir um aplicativo a ser
executado em uma tela especificada. Procure por --screen
end --display
na página do manual de gtk-options(7)
para ver um exemplo..
Configuração do servidor X
Tradicionalmente, o principal arquivo de configuração usado para configurar um servidor X é o
arquivo /etc/X11/xorg.conf
. Nas distribuições Linux modernas, o servidor X configura a si mesmo
em tempo de execução quando é iniciado e, portanto, nenhum arquivo xorg.conf
pode existir.
O arquivo xorg.conf
é dividido em estrofes separadas chamadas seções. Cada seção começa com o
termo Section
e, após este termo está o nome da seção, que se refere à configuração de um
componente. Cada Section
é encerrada por uma EndSection
correspondente. Um arquivo xorg.conf
típico contém as seguintes seções:
InputDevice
-
Usada para configurar um modelo específico de teclado ou mouse.
InputClass
-
InputClass Nas distribuições Linux modernas, esta seção é tipicamente encontrada em um arquivo de configuração à parte, localizado em
/etc/X11/xorg.conf.d/
.InputClass
é usada para configurar uma classe de dispositivos de hardware como teclados e mouses, e não um componente específico de hardware. Veja abaixo um exemplo de arquivo/etc/X11/xorg.conf.d/00- keyboard.conf
:Section "InputClass" Identifier "system-keyboard" MatchIsKeyboard "on" Option "XkbLayout" "us" Option "XkbModel" "pc105" EndSection
A opção de
XkbLayout
determina a disposição das teclas de um teclado, como Dvorak, canhoto ou destro, QWERTY e idioma. A opção deXkbModel
é usada para definir o tipo de teclado utilizado. Há uma tabela de modelos, layouts e suas descrições emxkeyboard-config(7)
. Os arquivos associados aos layouts de teclado podem ser encontrados em/usr/share/X11/xkb
. Um layout de teclado grego politônico em um computador Chromebook apareceria desta maneira:Section "InputClass" Identifier "system-keyboard" MatchIsKeyboard "on" Option "XkbLayout" "gr(polytonic)" Option "XkbModel" "chromebook" EndSection
Alternativamente, o layout de um teclado pode ser modificado durante uma sessão X em execução com o comando
setxkbmap
. Eis um exemplo desse comando para configurar o layout grego politônico em um computador Chromebook:$ setxkbmap -model chromebook -layout "gr(polytonic)"
Essa configuração só permanecerá ativa enquanto a sessão X estiver em uso. Para que essas alterações se tornem permanentes, modifique o arquivo
/etc/X11/xorg.conf.d/00-keyboard.conf
de forma a incluir as configurações necessárias.NoteO comando
setxkbmap
utiliza a X Keyboard Extension (XKB). Este é um exemplo da funcionalidade aditiva do X Window System por meio do uso de extensões.As distribuições Linux modernas fornecem o comando
localectl
através dosystemd
, que também pode ser usado para modificar um layout de teclado e cria automaticamente o arquivo de configuração/etc/X11/xorg.conf.d/00-keyboard.conf
. Novamente, eis um exemplo de configuração de um teclado grego politônico em um Chromebook, desta vez com o comandolocalectl
:$ localectl --no-convert set-x11-keymap "gr(polytonic)" chromebook
A opção
--no-convert
é usada aqui para impedir que olocalectl
modifique o mapa do teclado no console do hospedeiro. Monitor
-
A seção
Monitor
descreve o monitor físico utilizado e onde está conectado. Eis um exemplo de configuração que mostra um monitor de hardware conectado à segunda porta de vídeo e usado como monitor principal.Section "Monitor" Identifier "DP2" Option "Primary" "true" EndSection
Device
-
A seção
Device
descreve a placa de vídeo física utilizada. A seção também contém o módulo do kernel usado como driver para a placa de vídeo, junto com sua localização física na placa-mãe.Section "Device" Identifier "Device0" Driver "i915" BusID "PCI:0:2:0" EndSection
Screen
-
A seção
Screen
reúne as seçõesMonitor
eDevice
. Um exemplo de seçãoScreen
seria semelhante ao seguinte:Section "Screen" Identifier "Screen0" Device "Device0" Monitor "DP2" EndSection
ServerLayout
-
A seção
ServerLayout
agrupa todas as seções como mouse, teclado e telas em uma única interface do X Window System.Section "ServerLayout" Identifier "Layout-1" Screen "Screen0" 0 0 InputDevice "mouse1" "CorePointer" InputDevice "system-keyboard" "CoreKeyboard" EndSection
Note
|
Nem todas as seções estão presentes em um arquivo de configuração. Nos casos em que uma seção está ausente, os valores padrão são fornecidos pela instância do servidor X em execução. |
Os arquivos de configuração específicos ao usuário também residem em /etc/X11/xorg.conf.d/
. Os
arquivos de configuração fornecidos pela distribuição localizam-se em
/usr/share/X11/xorg.conf.d/
. Os arquivos de configuração localizados em /etc/X11/xorg.conf.d/
são
analisados antes do arquivo /etc/X11/xorg.conf
se ele existir no sistema.
O comando xdpyinfo
é usado em um computador para exibir informações sobre uma instância do
servidor X em execução. Veja abaixo um exemplo de saída do comando:
$ xdpyinfo name of display: :0 version number: 11.0 vendor string: The X.Org Foundation vendor release number: 12004000 X.Org version: 1.20.4 maximum request size: 16777212 bytes motion buffer size: 256 bitmap unit, bit order, padding: 32, LSBFirst, 32 image byte order: LSBFirst number of supported pixmap formats: 7 supported pixmap formats: depth 1, bits_per_pixel 1, scanline_pad 32 depth 4, bits_per_pixel 8, scanline_pad 32 depth 8, bits_per_pixel 8, scanline_pad 32 depth 15, bits_per_pixel 16, scanline_pad 32 depth 16, bits_per_pixel 16, scanline_pad 32 depth 24, bits_per_pixel 32, scanline_pad 32 depth 32, bits_per_pixel 32, scanline_pad 32 keycode range: minimum 8, maximum 255 focus: None number of extensions: 25 BIG-REQUESTS Composite DAMAGE DOUBLE-BUFFER DRI3 GLX Generic Event Extension MIT-SCREEN-SAVER MIT-SHM Present RANDR RECORD RENDER SECURITY SHAPE SYNC X-Resource XC-MISC XFIXES XFree86-VidModeExtension XINERAMA XInputExtension XKEYBOARD XTEST XVideo default screen number: 0 number of screens: 1 screen #0: dimensions: 3840x1080 pixels (1016x286 millimeters) resolution: 96x96 dots per inch depths (7): 24, 1, 4, 8, 15, 16, 32 root window id: 0x39e depth of root window: 24 planes number of colormaps: minimum 1, maximum 1 default colormap: 0x25 default number of colormap cells: 256 preallocated pixels: black 0, white 16777215 options: backing-store WHEN MAPPED, save-unders NO largest cursor: 3840x1080 current input event mask: 0xda0033 KeyPressMask KeyReleaseMask EnterWindowMask LeaveWindowMask StructureNotifyMask SubstructureNotifyMask SubstructureRedirectMask PropertyChangeMask ColormapChangeMask number of visuals: 270 ...
As partes mais relevantes da saída estão em negrito, como o nome da tela (que é idêntico ao
conteúdo da variável de ambiente DISPLAY
), as informações de versão do servidor X em uso, o
número e a listagem das extensões do Xorg em uso e mais informações sobre a tela em si.
Criando um arquivo de configuração básico do Xorg
Mesmo que nas instalações modernas do Linux o X crie sua configuração após a inicialização do
sistema, um arquivo xorg.conf
ainda pode ser usado. Para gerar um arquivo /etc/X11/xorg.conf
permanente, execute o seguinte comando:
$ sudo Xorg -configure
Note
|
Se já houver uma sessão X em execução, será necessário especificar um $ sudo Xorg :1 -configure |
Em algumas distribuições Linux, o comando X
pode ser usado no lugar de Xorg
, pois X
é um link
simbólico para Xorg
.
Um arquivo xorg.conf.new
será criado em seu diretório de trabalho atual. O conteúdo desse arquivo
deriva-se do que o servidor X descobriu estar disponível em hardware e drivers no sistema local.
Para usar esse arquivo, ele deve ser movido para o diretório /etc/X11/
e renomeado como`xorg.conf`:
$ sudo mv xorg.conf.new /etc/X11/xorg.conf
Note
|
As seguintes páginas de manual fornecem mais informações sobre os componentes do X Window System: |
Wayland
Wayland é o protocolo de exibição mais recente, criado para substituir o X Window System. Ele é o servidor de exibição padrão de muitas distribuições Linux modernas. Foi projetado para usar menos recursos do sistema e ocupar um espaço de instalação menor do que o X. O projeto foi iniciado em 2010 e ainda está em desenvolvimento ativo, com a colaboração de desenvolvedores e ex-desenvolvedores do X.org.
Ao contrário do X Window System, não existe uma instância de servidor executada entre o cliente e o kernel. Em vez disso, uma janela do cliente trabalha com seu próprio código ou o código de um kit de ferramentas (como Gtk + ou Qt) para realizar a renderização. Para que a renderização seja feita, uma solicitação é enviada ao kernel do Linux por meio do protocolo Wayland. O kernel encaminha a solicitação através do protocolo Wayland para o compositor Wayland, que gerencia os dados inseridos pelo dispositivo, o gerenciamento de janelas e a composição. O compositor é a parte do sistema que combina os elementos renderizados em uma saída visual na tela.
A maioria dos kits de ferramentas modernos, como o Gtk + 3 e o Qt 5, foram atualizados para permitir a renderização para um sistema X Window ou um computador executando o Wayland. Por enquanto, nem todos os aplicativos autônomos foram escritos para suportar a renderização no Wayland. Para aplicativos e estruturas que ainda precisam do X Window System para rodar, o aplicativo pode ser executado dentro do XWayland. O sistema XWayland é um servidor X separado que roda em um cliente Wayland e, portanto, renderiza o conteúdo da janela do cliente em uma instância independente do servidor X.
Assim como o X Window System usa uma variável de ambiente DISPLAY
para controlar as telas em
uso, o protocolo Wayland usa uma variável de ambiente WAYLAND_DISPLAY
. Veja abaixo um exemplo
de saída de um sistema executando um monitor Wayland:
$ echo $WAYLAND_DISPLAY wayland-0
Esta variável de ambiente não está disponível em sistemas que utilizam X.
Exercícios Guiados
-
Qual comando você usaria para determinar quais extensões Xorg estão disponíveis em um sistema?
-
Você acaba de receber um mouse de 10 botões novinho em folha para o seu computador, porém ele necessita de uma configuração extra para que todos os botões funcionem corretamente. Sem modificar o resto da configuração do servidor X, que diretório você usaria para criar um novo arquivo de configuração para este mouse e qual seção específica da configuração seria usada neste arquivo?
-
Qual componente de uma instalação do Linux é responsável por manter um servidor X funcionando?
-
Qual opção de linha de comando é usada com o comando X para criar um novo arquivo de configuração
xorg.conf
?
Exercícios Exploratórios
-
Qual seria o conteúdo da variável de ambiente
DISPLAY
em um sistema chamadolab01
usando uma configuração de tela única? Suponha que a variável de ambienteDISPLAY
esteja sendo visualizada em um emulador de terminal na terceira tela independente. -
Que comando pode ser usado para criar um arquivo de configuração de teclado para uso pelo X Window System?
-
Em uma instalação típica do Linux, um usuário pode alternar para um terminal virtual pressionando as teclas kbd:[Ctrl+Alt+F1]-kbd:[F6] em um teclado. Você recebeu a missão de configurar um sistema de quiosque com uma interface gráfica e precisa desabilitar esse recurso para evitar uma adulteração não autorizada do sistema. Você decide criar um arquivo de configuração
/etc/X11/xorg.conf.d/10-kiosk.conf
. Usando uma seçãoServerFlags
(usada para definir as opções globais do Xorg no servidor), qual opção precisaria ser especificada? Consulte a página do manual doxorg (1)
para localizar a opção.
Resumo
Esta lição tratou do X Window System e seu uso no Linux. O X Window System é usado para desenhar imagens e texto nas telas, conforme definido em diversos arquivos de configuração. O X Window System é freqüentemente usado para configurar dispositivos de entrada como mouses e teclados. Esta lição discutiu os seguintes pontos:
-
A arquitetura do X Window System em alto nível.
-
Quais arquivos de configuração são usados para configurar um sistema X Window e sua localização no sistema de arquivos.
-
Como usar a variável de ambiente
DISPLAY
em um sistema rodando X. -
Uma breve introdução ao protocolo de exibição Wayland.
Os comandos e arquivos de configuração abordados foram:
-
Modificação do layout do teclado dentro de uma instalação do Xorg com
setxkbmap
elocalectl
. -
O comando
Xorg
para criar um novo arquivo de configuração/etc/X11/xorg.conf
. -
O conteúdo dos arquivos de configuração do Xorg localizados em:
/etc/X11/xorg.conf
,/etc/X11/xorg.conf.d/
and/usr/share/X11/xorg.conf.d/
. -
O comando
xdpyinfo
para exibir informações gerais sobre uma sessão do servidor X em execução.
Respostas aos Exercícios Guiados
-
Qual comando você usaria para determinar quais extensões Xorg estão disponíveis em um sistema?
$ xdpyinfo
-
Você acaba de receber um mouse de 10 botões novinho em folha para o seu computador, porém ele necessita de uma configuração extra para que todos os botões funcionem corretamente. Sem modificar o resto da configuração do servidor X, que diretório você usaria para criar um novo arquivo de configuração para este mouse e qual seção específica da configuração seria usada neste arquivo?
As configurações definidas pelo usuário devem estar localizadas em
/etc/X11/xorg.conf.d/
e a seção específica necessária para esta configuração do mouse seriaInputDevice
. -
Qual componente de uma instalação do Linux é responsável por manter um servidor X funcionando?
O gerenciador de exibição.
-
Qual opção de linha de comando é usada com o comando X para criar um novo arquivo de configuração
xorg.conf
?-configure
Lembre-se de que o comando
X
é um link simbólico para o comandoXorg
.
Respostas aos Exercícios Exploratórios
-
Qual seria o conteúdo da variável de ambiente
DISPLAY
em um sistema chamadolab01
usando uma configuração de tela única? Suponha que a variável de ambienteDISPLAY
esteja sendo visualizada em um emulador de terminal na terceira tela independente.$ echo $DISPLAY lab01:0.2
-
Que comando pode ser usado para criar um arquivo de configuração de teclado para uso pelo X Window System?
$ localectl
-
Em uma instalação típica do Linux, um usuário pode alternar para um terminal virtual pressionando as teclas kbd:[Ctrl+Alt+F1]-kbd:[F6] em um teclado. Você recebeu a missão de configurar um sistema de quiosque com uma interface gráfica e precisa desabilitar esse recurso para evitar uma adulteração não autorizada do sistema. Você decide criar um arquivo de configuração
/etc/X11/xorg.conf.d/10-kiosk.conf
. Usando uma seçãoServerFlags
(usada para definir as opções globais do Xorg no servidor), qual opção precisaria ser especificada? Consulte a página do manual doxorg (1)
para localizar a opção.Section "ServerFlags" Option "DontVTSwitch" "True" EndSection