>”>Overvisão geral
Neste tutorial, aprenda a instalar e configurar o X11 para o seu sistema Linux. Aprenda a:
>
- Compreenda a arquitetura X11.
- Compreenda o básico do arquivo de configuração do X Window.
- Overwrite aspectos específicos da configuração do Xorg, como o layout do teclado.
- Compreenda os componentes dos ambientes desktop, como gerenciadores de tela e gerenciadores de janela.
- Gerenciar o acesso ao servidor X e exibir aplicações em servidores X remotos.
- Understand Wayland.
>
>
>
- O que é X11?
- Prerequisites
- X, o grande quadro
- O arquivo de configuração do X Window
- XkbVariant define quais variantes dos dois layouts devem ser usadas. No caso do layout us, sua variante padrão é usada. No caso do layout sk a sua variante qwerty é utilizada. A opção XkbOptions indica que os usuários podem alternar entre layouts usando a tecla CapsLock.
- Gerenciar o acesso ao servidor X e exibir aplicações remotamente
- Quando as coisas dão errado
- Wayland, um novo gerenciador de janelas de composição
O que é X11?
O Sistema X Window (também conhecido como X11, ou simplesmente X) é um sistema de janelas cliente/servidor para exibição de bitmap. Ele é implementado na maioria dos sistemas operacionais do tipo UNIX e tem sido portado para muitos outros sistemas. O servidor X é o programa ou terminal dedicado que exibe as janelas e manipula dispositivos de entrada como teclados, mouses e telas sensíveis ao toque. Os clientes são aplicações.
Este tutorial ajuda você a se preparar para o objetivo 106.1 no tópico 106 do exame 101 do Linux System Administrator (LPIC-1). O objetivo tem um peso de 2.
Prerequisites
Para obter o máximo dos tutoriais desta série, você precisa de um conhecimento básico de Linux e de um sistema Linux funcional no qual você pode praticar os comandos que são abordados neste tutorial. Às vezes, diferentes versões de um programa saem de forma diferente, portanto seus resultados podem nem sempre se parecer exatamente com as listas e figuras que são mostradas aqui. Os exemplos neste tutorial vêm do Fedora 28, openSUSE Tumbleweed (20181204), e Ubuntu 18.04 LTS.
X, o grande quadro
X foi originalmente desenvolvido no Massachusetts Institute of Technology (MIT), em 1984. O protocolo cliente/servidor X é a Versão 11 (X11) e assim tem sido desde 1987. A Fundação X.Org lidera agora o projeto X, com a implementação de referência atual, o X.Org Server, disponível como software livre e de código aberto. Ele está sob a licença MIT e licenças permissivas similares.
A arquitetura X fornece um framework cliente/servidor bastante primitivo para uma exibição gráfica, incluindo desenho e movimentação de janelas na exibição e interação com dispositivos de entrada como teclados, mouses, tablets ou telas sensíveis ao toque. X foi projetado para ser transparente em rede, para que um servidor X possa exibir janelas a partir de fontes de aplicações locais ou em rede. Nos dias de computadores muito caros que eram compartilhados entre muitos usuários, os terminais X proporcionavam uma forma de baixo custo para muitos usuários compartilharem os recursos de um único computador. O terminal implementava o protocolo X e o computador cuidava do resto do trabalho necessário.
Janelas de aplicação individuais ocupam parte ou a totalidade de uma tela de exibição e um usuário normalmente tem múltiplas janelas desse tipo abertas de cada vez. O X não especifica como essa tarefa de gerenciamento deve ser realizada, então um programa de gerenciamento geralmente fornece isso. Exemplos de tais gerenciadores incluem os gerenciadores de exibição do GNOME ou KDM ou o gerenciador de janelas do Enlightenment. Essas interfaces normalmente fornecem recursos como quadros, barras de título e menus padrão, e normalmente fornecem um meio para um usuário iniciar programas. Assim, sistemas diferentes podem parecer e sentir-se muito diferentes mesmo quando todos eles usam o X. Mais adiante neste tutorial, discutirei mais sobre gerenciadores de janelas e gerenciadores de exibição.
Fusão e exibição das partes necessárias de várias janelas de aplicações é chamada de composição. Isto é parte do gerenciador de janelas. Então o X trata das requisições da aplicação, e as passa para o compositor do gerenciador para a montagem da janela a ser mostrada ao usuário. A imagem final é então passada de volta para o servidor X para display.
Figure 1 mostra um exemplo de um desktop Linux moderno típico (do openSUSE Tumbleweed). Três janelas estão abertas e o usuário está usando os menus do sistema para iniciar outra aplicação.
Figure 1. Exemplo de um desktop openSUSE
O arquivo de configuração do X Window
Nos primeiros dias do X, configurar um display significava ter um amplo conhecimento das capacidades do display e a capacidade de expressar informações sobre não só a resolução, mas também valores de sincronização horizontal e vertical, profundidade de cor, e assim por diante. Desde o advento dos protocolos da Video Electronics Standards Association (VESA) e do Display Data Channel (DDC) que permitem a um monitor comunicar estas capacidades a uma placa gráfica e, portanto, a um computador, a configuração tornou-se muito mais automática. Isso é uma sorte, pois agora esperamos poder levar nosso notebook para qualquer lugar e simplesmente conectar um monitor ou projetor externo disponível.
Configurar seu mouse, trackball, ou teclado também se tornou mais automático. Geralmente, basta ligar o dispositivo, muitas vezes através de uma ligação USB e funciona.
No entanto, como na maioria das coisas no Linux, existe um mecanismo de configuração subjacente que pode utilizar. Na verdade, a implementação Xorg do X obtém informações de configuração de várias fontes. O arquivo de configuração principal é o xorg.conf, juntamente com os arquivos incluídos do diretório xorg.conf.d. Estes estão normalmente localizados em /etc/X11. Configuração adicional pode vir de opções de linha de comando, variáveis de ambiente, auto-detecção e padrões de fallback.
O ficheiro de configuração xorg.conf e os ficheiros no directório xorg.conf.d estão organizados em secções que podem ser especificadas em qualquer ordem. O formato geral da secção é mostrado em Listing 1.
Listing 1. Layout da seção no xorg.conf
Section "SectionName" SectionEntry ... EndSection
Show moreShow more icon
Xorg com a opção -configure
. O comando Xorg
é na verdade um link simbólico do comando X
normalmente localizado em /usr/bin. Você precisa executar o comando Xorg
como root e garantir que nenhum servidor X esteja rodando. Uma maneira de fazer isso é editar sua estrofe GRUB2 para inicializar em modo multi-usuário sem o X. Tradicionalmente, este é o nível de execução 3. Simplesmente edite a entrada do menu boot que você deseja inicializar e adicione um 3
ao final da linha `linux boot/vmlinuz…’ como ilustrado na Figura 2.
Figure 2. Inicializando em modo multi-usuário sem X
Se você estiver usando systemd, você pode usar systemd.unit=multi-user.target
em vez de 3
.
Xorg -configure
carrega os drivers e sondas de dispositivos disponíveis para hardware. Funciona em muitos sistemas, mas tem problemas em alguns sistemas de acordo com a página de manual. A documentação do Fedora recomenda o uso do display :1 ao invés do display padrão :0, então você pode tentar Xorg :1 -configure
se simples Xorg -configure
não funcionar.
Um arquivo de exemplo gerado usando este método no meu sistema openSUSE Tumbleweed é mostrado na lista 2.
Listing 2. Exemplo xorg.conf
Assumindo que seu monitor suporta DDC, como a maioria dos monitores modernos, você pode usar o comando xrandr
para consultar suas capacidades. Listing 4 mostra as informações drm para um notebook com um display conectado e a saída correspondente de xrandr
.
Listing 4. Usando o xrandr para determinar os recursos de exibição
XkbVariant define quais variantes dos dois layouts devem ser usadas. No caso do layout us, sua variante padrão é usada. No caso do layout sk a sua variante qwerty é utilizada. A opção XkbOptions
indica que os usuários podem alternar entre layouts usando a tecla CapsLock.
Listing 5. Atualizando a configuração do teclado
localectl. Entretanto, localectl status
mostra que estas mudanças foram pegas quando o sistema foi reiniciado como mostrado em Listing 6.
Listing 6. Mostrando o status do teclado usando localectl
Os gerenciadores de exibição se encaixam em três categorias gerais.
- Gerenciadores de janela de exibição dividem a tela em tiles e escrevem cada tile separadamente de outros. O desempenho é geralmente bom.
- Aparar janelas mangers empilhar janelas individuais na tela em uma lista conhecida como uma ordem Z. Quando uma nova janela é dada foco ela é colocada em cima da ordem Z e todas as janelas inferiores são redesenhadas. Isto pode ser lento, particularmente para pequenas alterações, mas várias otimizações foram desenvolvidas.
- Os gerenciadores de janelas compostas normalmente empilham gerenciadores de janelas que mantêm um buffer para cada janela e depois os combinam em um único buffer para exibição sem a necessidade de redesenhar cada janela individual e depois sobrescrevê-la com a próxima mais alta na ordem Z. Isto também permite efeitos como transparência.
Figure 3 mostra um exemplo do gerenciador de janelas de mosaico I3. Você começa com uma área de trabalho vazia e depois cria uma janela, como uma janela de terminal. Isto ocupa a tela cheia. Você pode então abrir outra janela que divide o tile original em dois. Se você abrir outra, a tela é dividida em três tiles. Você pode optar por criar novos tiles horizontalmente ou verticalmente. Neste exemplo, eu escolhi dividir o azulejo médio original contendo o jogo sudoku verticalmente, para criar outra pequena janela terminal. Então eu dividi esta horizontalmente para adicionar uma janela xlcock.
Figure 3. O gerenciador de janelas de mosaico I3
Você normalmente pode mover janelas entre desktops virtuais, o que ajuda muito se você tiver várias janelas grandes abertas.
Você pode abrir a lista de aplicações disponíveis como um menu no topo da tela e selecionar as aplicações, rolando lentamente na horizontal ou mais rapidamente digitando parte ou todo um nome como ‘xclock’.
Em contraste com os gerenciadores de janelas de mosaico, o empilhamento de gerenciadores de janelas permite que você tenha janelas de qualquer tamanho suportadas pelo seu monitor, incluindo janelas que podem se sobrepor à borda do monitor. A Figura 4 é um exemplo do gerenciador de janelas de empilhamento Openbox mostrando quatro janelas sobrepostas e o menu que permite que você abra novos aplicativos.
Figure 4. O gerenciador de janelas de empilhamento do Openbox
Basic stacking window managers trabalha com o princípio de redesenhar todas as janelas do seu monitor quando a janela com foco muda ou é movida, fechada ou redimensionada. Isto pode resultar em múltiplas reescritas de várias áreas da tela enquanto a ordem Z inteira é processada. Algoritmos podem ser usados para minimizar a quantidade de reescrita desnecessária.
Uma melhoria na idéia básica de empilhamento é um gerenciador de janelas compositor. Tal gerenciador de janelas mantém um buffer do conteúdo de cada janela e os funde ou compõe em uma única janela. Apenas as partes atualizadas precisam então ser escritas no buffer do cartão de exibição. Compiz é um exemplo de um gerenciador de janelas de composição, enquanto ambientes desktop como KDE e GNOME também usam gerenciadores de janelas de composição.
Um ambiente desktop geralmente fornece uma experiência de usuário completa, incluindo coisas como um saudador gráfico de login, menus gráficos do sistema, uma bandeja para exibir widgets como hora do dia, ícones de aplicações abertas, e assim por diante. Um conjunto de aplicativos integrados geralmente fornece uma experiência consistente para um usuário. A maioria dos gerenciadores de janela são muito mais leves do que um ambiente desktop completo.
Figure 5 ilustra o conceito de transparência em um gerenciador de janela de composição ou ambiente desktop. Mantenha pressionado o botão esquerdo do mouse (botão 1) na barra de título da janela do terminal ao prepará-lo para movê-lo. O visor muda para mostrar quais janelas estão abaixo daquela área em particular. Isto pode ajudá-lo a mover uma janela de estar em cima de outra quando você gostaria que ambas estivessem visíveis.
Figure 5. Transparência com o KDE Plasma desktop
Figure 6 ilustra o GNOME 3.28 no Fedora. Clicando no botão Activities no lado superior esquerdo desta tela, abre uma lista iconizada de favoritos no lado esquerdo da tela e mostra um conjunto de aplicações em execução como pequenas janelas. Você pode clicar num favorito, clicar numa pequena janela, ou usar a caixa de busca no topo da tela para procurar um programa. Neste exemplo em particular, eu cliquei no dia e hora na barra superior para abrir um widget que mostra algumas mensagens, tais como atualizações disponíveis ou último comando concluído, bem como informações adicionais de data e hora. Os ícones no lado superior direito permitem o acesso a funções como volume do alto-falante, configurações de rede, opções de acessibilidade e opções de desligamento, logout ou reinicialização.
Figure 6. Atividades e widgets do Fedora GNOME
I mencionei que ambientes de trabalho freqüentemente contêm aplicativos integrados para ajudá-lo a gerenciar vários aspectos do ambiente de trabalho ou do sistema. A Figura 7 mostra o diálogo de configurações do Fedora GNOME 3.28 aberto nas configurações de exibição. Este exemplo é de um notebook com um monitor Viewsonic externo. As escolhas comuns neste caso são juntar as duas telas como um único monitor ou espelhar o conteúdo de uma tela para a outra. Neste caso, escolhemos juntar os dois ecrãs com o ecrã incorporado logicamente à direita do monitor externo.
Figure 7. Diálogo de configurações de tela do Fedora GNOME
Como você pode alterar a resolução da tela no arquivo xorg.conf, você também pode dizer ao compositor para escalar a janela para 100% ou 200%. O escalonamento disponível pode depender do tamanho do monitor, bem como da área de trabalho específica que você está usando. Eu também tenho um monitor UHD (4K) e olhos que não conseguem ler a resolução de texto nativo muito pequena. Então nesse monitor, eu frequentemente uso um fator de escala de 200%.
Nota que alterações feitas usando as configurações do GNOME não atualizam o xorg.conf. Ao invés disso, essas configurações são salvas no arquivo .config/monitors.xml no seu diretório home. O GNOME também mantém outras configurações de exibição e teclado no banco de dados dconf que você também pode encontrar abaixo do seu diretório home. Ao ter essas configurações em seu diretório home, elas se aplicam somente a você. Outros usuários podem ter configurações diferentes.
Se você tiver vários ambientes de trabalho ou gerenciadores de janelas instalados, você pode estar se perguntando como escolher entre eles. Você pode inicializar no modo multiusuário como descrito anteriormente neste tutorial e então executar um comando como startx
para iniciar o X com o gerenciador apropriado. Se você tiver um ambiente desktop como o GNOME fornecendo um saudador, você provavelmente terá uma escolha de configurações na tela do saudador. A Figura 8 mostra as escolhas instaladas no meu sistema Fedora 28.
Figure 8. Saudação do Fedora GNOME 3 com seleção WM
Gerenciar o acesso ao servidor X e exibir aplicações remotamente
Até agora, você já viu exemplos do X rodando em um computador desktop com um, ou talvez dois monitores. Um servidor X trata um único monitor como uma coleção de monitores que compartilham um conjunto comum de dispositivos de entrada.
Então o notebook mostrado na Figura 7 tem um monitor, mesmo que ele tenha o monitor embutido e um monitor externo. Neste exemplo, os dois monitores funcionam como se estivessem unidos. Isto faz uma única tela lógica que permite que janelas sejam movidas entre monitores, ou mesmo divididas entre eles. Sistemas multiusuário geralmente têm múltiplos monitores, então você precisa de uma maneira de descrevê-los.
X usa um nome de três partes para monitores do formulário hostname:displaynumber.screennumber onde hostname é o nome do host do computador, displaynumber é um número começando em 0 que descreve o display em particular, e screennumber se aplica se dois ou mais monitores forem tratados como telas separadas ao invés de uma única tela lógica. Tanto o nome da máquina quanto o número de tela podem ser omitidos, portanto a notação de exibição mais comum que você verá é :0. Você pode ver sua configuração atual em DISPLAY
variável de ambiente como mostrado em Listing 7.
Listing 7. A variável de ambiente DISPLAY
ian@attic5-u18:~$ echo $DISPLAY:0
Show moreShow more icon
DISPLAY permitiria a qualquer usuário escrever a saída na sua tela, mas X tem algumas limitações de controle de acesso. Vou mostrar-lhe três formas de se ligar a um servidor X.
>
- >
- Utilizar ssh com encaminhamento X
- Utilizar Xauthority e xauth
- Utilizar host ou controlo de utilizador com xhost
A forma mais segura de utilizar o X noutra tela é utilizar o encaminhamento X (por vezes chamado de tunneling). Isto deve ser habilitado no servidor SSH ao qual você se conecta com a linha X11Forwarding yes
no arquivo de configuração, /etc/ssh/sshd_config. Você também precisa habilitá-lo no cliente especificando a opção -X
(que é X maiúsculo) no seu comando ssh
. Listando 8 compara o que acontece se eu usar su - jane
para mudar para o usuário jane no meu sistema e depois usar ssh -X jane@localhost
. Em ambos os casos, eu tento executar o comando xclock
para exibir um pequeno relógio na minha tela.
Listing 8. X forwarding
DISPLAY é definida para localhost:10.0. O servidor sshd está efetivamente criando um servidor X para você no sistema de destino. Você não quer que isto interfira com nenhum servidor X real no sistema. Então o ficheiro de configuração, /etc/ssh/sshd_config, contém uma linha X11DisplayOffset 10
para especificar o offset inicial (a partir de 0) para servidores X sobre ssh. O padrão é 10, que normalmente é suficiente para uma única estação de trabalho de usuário, mas pode precisar ser aumentado em um sistema multi-usuário. Uma segunda conexão ssh ao servidor seria atribuída ao display 11 e assim por diante.
O segundo método para permitir que outros se conectem a um servidor X é o método Xauthority. O arquivo Xauthority contém informações de autorização usadas quando você se conecta a um servidor X. A variável de ambiente XAUTHORITY
especifica o nome do arquivo atualmente em uso, seja um arquivo gerado pelo sistema como /run/user/1000/gdm/Xauthority no meu sistema Ubuntu 18, ou o seu próprio arquivo .Xauthority.
Listing 9. Extraindo informações de autoridade usando xauth
XAUTHORITY. O usuário jane pode então exibir aplicações no meu display.
Listing 10. Fundindo informações de autoridade usando xauth
xhost. Em uma estação de trabalho, você pode muito bem usar isto para permitir que você abra programas gráficos enquanto estiver rodando como outro usuário. O comando xhost
sem opções exibe a lista de controle de acesso atual. Use a opção +
com um nome para permitir sistemas ou usuários adicionais. Listing 11 mostra como adicionar o usuário john do meu sistema local à lista de controle de acesso e depois mostra o usuário john abrindo o gráfico xclock
program.
Listing 11. Usando xhost para habilitar um único usuário local
xhost +local: como mostrado na Listagem 12. Note os dois pontos (:) no final de local
.
Lista 12. Usando xhost para ativar todos os usuários locais não-rede
– em vez de +
para remover entradas que você ativou. Veja as páginas xhost man ou info para opções adicionais.
Para segurança você deve usar o túnel SSH ou possivelmente outra solução como Virtual Network Computing (VNC) em vez de xauth
ou xhost
. VNC está fora do escopo deste tutorial mas fornece melhor desempenho que o túnel SSH.
Quando as coisas dão errado
Com tantas fontes possíveis de informação de configuração do X você precisa saber onde procurar por informações de log. Os erros relacionados à sua sessão individual do X podem estar localizados em .xsession-errors ou possivelmente .xsession-errors-:0 no seu diretório home. O sufixo :0 é para erros no display :0.
O log principal do X está localizado em /var/log. O nome é normalmente /var/log/Xorg.0.log, onde 0 é o seu número de exibição. O número será diferente se você não estiver usando display :0.
Wayland, um novo gerenciador de janelas de composição
Recentemente, um novo servidor de display e protocolo de composição chamado Wayland foi desenvolvido. Neste modelo de aplicações, crie eles próprios o conteúdo das suas janelas num buffer fora da tela. O compositor e o servidor são integrados. A intenção do Wayland é fornecer uma solução mais simples e eficiente do que o X. O Wayland reutiliza principalmente os drivers e infra-estrutura existentes, o que torna o projecto possível.
Em contraste com o X, o Wayland não tem um design transparente de rede. Outras soluções como o VNC podem ser usadas se for necessária a exibição de janelas remotas.
Weston é um compositor de referência implementando o Wayland. GNOME, KDE, Enlightenment, e vários outros gerenciadores de janelas agora suportam o Wayland. Toolkits como o Qt 5 e GTK+ também suportam o Wayland. No momento da escrita (Dezembro de 2018) tanto o Fedora como o Ubuntu são enviados com o Wayland como o servidor de exibição padrão.
O servidor Xorg agora inclui o XWayland que permite que aplicações X existentes sejam executadas com um compositor Wayland.
A maioria das implementações atuais ainda tem a opção de executar o X ou o Wayland para cada sessão. Veja a Figura 7 para um exemplo de como o saudador do GMS permite que você escolha um tipo de sessão. No Fedora o padrão é rodar o GNOME no Wayland.
Você também pode verificar em tempo de execução sem ter que entrar no sistema. Se você estiver rodando Wayland, a variável de ambiente WAYLAND_DISPLAY
será definida. Em sistemas que usam systemd, você pode usar o comando loginctl
para determinar o número da sua sessão de login e depois usá-lo novamente para determinar o seu tipo de sessão. Listar 13 mostra estas ferramentas, primeiro em um sistema Fedora 28 usando Wayland e depois em um sistema Ubuntu 18 rodando Xorg.
Listing 13. Determinando se você está usando X ou Wayland