[OpenBSD]

[Índice da FAQ] [Seção 10 - Administração do Sistema] [Seção 12 - Questões Específicas de Hardware e Plataforma]

11 - O sistema X Window


Conteúdo


11.1 - Introdução ao X

O sistema X Window (algumas vezes chamado apenas de "X" e, outras, chamado incorretamente de "X Windows") é o ambiente que fornece serviços gráficos para o OpenBSD e outros sistemas baseados no Unix. No entanto, sozinho o X fornece muito pouco: é preciso ter um "Gerenciador de Janela" para apresentar uma interface de usuário. A maior parte da "personalidade" que alguém sentirá do X será devido ao gerenciador de janela, e não do próprio X. O OpenBSD é distribuído com uma versão livre do gerenciador de janela fvwm(1), mas você pode usar qualquer um dos outros gerenciadores de janela que estão nos pacotes. Faça uma pesquisa usando "window manager" para obter uma lista de vários gerenciadores de janela disponíveis.

O X é considerado um protocolo estruturado do tipo "cliente-servidor", no entanto, a terminologia confunde algumas vezes. O computador com os gráficos na tela é o "Servidor X". A aplicação que ordena o que o servidor X deve colocar na tela é chamada de "Cliente X", mesmo se esta é uma máquina potente em um centro de dados. Esse modelo pode ser usado para ter aplicações (clientes X) grandes, que usam muito processamento, em execução em uma máquina muito potente, e usar um Servidor X, em execução em uma máquina pequena e de baixa potência, como sua interface.

É possível executar clientes X em um sistema sem nenhum suporte gráfico. Por exemplo, é possível ter uma aplicação (o cliente X) sendo executada em uma máquina mvme88k, e mostrar sua saída em uma tela gráfica de uma máquina alpha (o servidor X). O X é um protocolo bem definido e multiplataforma, sendo possível ter uma aplicação X em execução (por exemplo) em uma máquina Solaris e usar uma máquina OpenBSD para mostrar a saída.

O cliente e o servidor podem também estar em execução na mesma máquina, e para a maior parte desta seção, isso será assumido.

11.1.1 - Preciso de um computador potente para executar o X?

O X é um programa grande, um computador rápido será o ideal se você está usando-o regularmente. No entanto, uma vez em execução, ele responde rapidamente mesmo em um computador modesto. Para ter um bom desempenho na resposta da tela, mesmo apenas para texto, você irá querer executar o X. Algumas plataformas, como a sparc e a sparc64, são pensadas para serem usadas com uma interface gráfica, e o desempenho em um console de texto é muito pobre.

Dito isso, executar o X é geralmente para executar aplicações X. Algumas aplicações X são leves, outras aparentemente pegam e usam todo o processador e RAM que você tiver. Normalmente, alguns usuários gostam de usar o X apenas para ter um grande número de xterm(1)s, o que pode ser feito em hardware muito modesto.

11.1.2 - Posso ter algum tipo de gráfico sem o X?

Assumindo que você não aceitaria gráficos ASCII, isso requer algum tipo de driver framebuffer para console. Alguns sistemas operacionais fornecem isso, mas não existe, atualmente, nenhum para o OpenBSD, e nem existe muito interesse dos desenvolvedores por um.

11.2 - Configuração do X

A configuração do X varia consideravelmente de plataforma para plataforma. Em todos os casos, existem instruções e outras informações específicas de plataforma no arquivo /usr/X11R6/README (no sistema instalado).

Várias plataformas requerem o driver de abertura do X xf86(4), que fornece o acesso à memória e às portas de E/S da placa VGA e aos registros de configuração requeridos pelos servidores X. Esse driver precisa ser ativado antes de ser usado, o que pode ser feito respondendo "yes" para esta questão durante a instalação:

Do you expect to run the X window System [no]
ou alterando o valor de machdep.allowaperture para um valor não-nulo, apropriado para sua arquitetura, em /etc/sysctl.conf, e reinicializando a máquina (por razões de segurança, esse valor do sysctl não pode ser modificado após a inicialização estar completa). Existem implicações de segurança nisso, então não faça isso se você não precisa.

11.2.1 - alpha

/usr/X11R6/README para alpha.

Defina machdep.allowaperture=1 no /etc/sysctl.conf.

As placas TGA e algumas VGA são suportadas. Nenhuma configuração, além dessa, deve ser necessária.

11.2.2 - amd64

/usr/X11R6/README para amd64.

Defina machdep.allowaperture=2 no /etc/sysctl.conf.

O X na arquitetura amd64 frequentemente configura-se corretamente de forma automática, então nenhuma configuração é necessária em vários casos. Se uma configuração adicional é necessária, use o processo X -configure abaixo.

11.2.3 - armish

Sem servidores X, somente clientes X.

11.2.4 - hp300

/usr/X11R6/README para hp300.

11.2.5 - hppa

Sem servidor X, somente clientes X.

11.2.6 - i386

/usr/X11R6/README para i386.

Defina machdep.allowaperture=2 no /etc/sysctl.conf.

Devido à incrível variedade de placas de vídeo, mouses, teclados e outros periféricos, configurar um sistema i386 para executar o X pode ser excitante. Excitante o bastante, que uma seção separada é fornecida.

Felizmente, as coisas não são sempre tão ruins quanto aparentam -- em muitos casos, o X "Simplesmente Funciona" ao executar o "startx". Nesses casos, seu hardware é detectado e consultado pelas suas capacidades, e o X funciona muito bem.

11.2.7 - landisk

Sem servidores X, somente clientes X.

11.2.8 - luna88k

Sem servidores X, somente clientes X.

11.2.9 - mac68k

Sem servidores X, somente clientes X.

11.2.10 - macppc

/usr/X11R6/README para macppc.

Defina machdep.allowaperture=2 no /etc/sysctl.conf.

Sistemas Macintosh PPC suportados podem funcionar em um dos dois modos diferentes: "acelerado" e "framebuffer" (não-acelerado).

No modo "framebuffer", o sistema funciona com 8 bits por pixel, e a resolução do vídeo é controlada pelo ambiente Macintosh, então você irá, provavelmente, querer manter uma pequena seção MacOS no seu disco para ajustar essas configurações. Esse modo tem a vantagem de "Simplesmente Funcionar", no entanto pode ser frustrantemente inflexível (por exemplo, alterar a resolução requer a inicialização do MacOS).

Se o seu Macintosh tem um sistema de vídeo da ATI, ele pode ser executado usando um servidor X acelerado, o que gera um melhor desempenho e mais controle no ambiente OpenBSD. As placas de vídeo da NVIDIA, em alguns sistemas macppc, também funcionam em muitos casos. O arquivo README possui detalhes da configuração do driver acelerado, comece usando o arquivo de exemplo de lá.

Embora o arquivo README forneça detalhes sobre o uso do mouse padrão de um botão da Apple no X, a menos que você esteja usando um laptop, é altamente recomendado que você compre de terceiros um mouse USB moderno.

11.2.11 - mvme68k

Sem servidores X, somente clientes X.

11.2.12 - mvme88k

Sem servidores X, somente clientes X.

11.2.13 - sgi

O X funciona no framebuffer do sistema 02 em modo não-acelerado.

11.2.14 - sparc

/usr/X11R6/README para sparc.

Com um único framebuffer suportado, não precisa de configuração. Se você deseja usar uma configuração com múltiplos monitores, veja o arquivo README acima para obter detalhes.

A resolução é controlada pelo firmware antes do OpenBSD ser inicializado.

11.2.15 - sparc64

/usr/X11R6/README para sparc64.

Existe um certo número de variações dessas máquinas; você precisa saber que tipo de barramento seu sistema possui (PCI ou SBus), em que tipo de porta seu mouse está ligado (zstty, com, ou USB/PS2) e que tipo de placa de vídeo você tem. Comece com o arquivo xorg.conf de exemplo no arquivo README, então modifique como indicado para seu hardware real e suas necessidades. Não espere que o arquivo de exemplo funcione sem modificações na sua máquina!

11.2.16 - vax

/usr/X11R6/README para vax.

Atualmente, o servidor X só funciona em modelos VAXstation 4000, com um framebuffer lcg(4) ou lcspx(4).

11.2.17 - zaurus

/usr/X11R6/README para zaurus.

Nenhuma configuração é necessária, o X "Simplesmente Funciona".

11.3 - Configuração do X nas plataformas amd64 e i386

A grande variedade de opções de hardware nessas plataformas torna a configuração do X um processo "trabalhoso".

11.3.1 - Configuração do X.Org

O X.Org tem feito um grande progresso para permitir que seus servidores "Simplesmente Funcionem". Em muitos casos, ele simplesmente funciona sem nenhum arquivo /etc/X11/xorg.conf. Mas nem sempre isso ocorre, e você precisa modificar alguma coisa que não funciona.

Existem dois programas que podem ser usados para criar um arquivo de configuração para os servidores X do X.Org para i386. Infelizmente, nenhum deles garante a criação de um arquivo xorg.conf utilizável.

Em adição aos aplicativos acima, uma outra forma demorada de configurar o X é usar sua ferramenta de busca preferida para procurar alguém que já resolveu seu problema. Enquanto isso não é uma má ideia, tal método não é tratado aqui.

11.3.2 - Nossa máquina de exemplo

Como uma demonstração da configuração do X, nós usaremos um velho sistema Celeron 400MHz, com um slot de vídeo AGP. A placa de vídeo é uma velha placa AGP, mostrada no dmesg como:
vga1 at pci1 dev 0 function 0 "3DFX Interactive Banshee" rev 0x03
Essa é uma antiga placa de vídeo de alta capacidade, com 16M de RAM, mas hoje não é suportada pelas versões modernas dos sistemas operacionais "principais". A tela ligada no sistema é um monitor CRT Sony Multiscan G400 19", e seria legal usar uma resolução de 1280x1024, com uma frequência de atualização decente e cores de 24 bits.

Em primeiro lugar, depois de instalar o OpenBSD com o X (e tendo certeza que o driver de abertura está ativado no kernel), vamos ver o que a detecção automática e a configuração do X.Org nos propõe; depois de tudo nós podemos estar com sorte. Então, simplesmente nos identificamos no sistema e usamos o comando startx(1). A tela fica vazia por alguns momentos, então nós obtemos o fundo de tela em "tabuleiro de xadrez" do X, o cursor "X", e então uma janela xterm.

Funcionou!

Mais ou menos. Embora o sistema esteja completamente funcional, ele aparentemente não selecionou nenhuma das capacidades do monitor, e está funcionando claramente em uma baixa resolução (640x480). Esperamos conseguir algo melhor que isso. Muito melhor, na verdade. Isso significa que nós precisamos fazer nosso próprio arquivo xorg.conf.

Vamos usar o processo "X -configure" para gerar um arquivo xorg.conf como ponto de partida. Você precisa fazer isto como root:

# X -configure
 [...]
Your xorg.conf file is /root/xorg.conf.new

To test the server, run 'X -config /root/xorg.conf.new'
Pelo jeito, a mensagem é séria -- use o caminho completo para seu arquivo xorg.conf.new, mesmo se ele está no seu diretório padrão atual. Ao falhar nessa parte, o resultado é que o X(7) não encontra o arquivo, e ele silenciosamente usa a configuração padrão, que não tem nada a ver com o arquivo que você está trabalhando atualmente. Isso previne você de ter que procurar o porquê de não funcionar. Confie em nós sobre isso.

Vamos fazer o que ele diz, e vejamos o que acontece:

# X -config /root/xorg.conf.new
Agora, tudo que nós recebemos é uma tela preta. As coisas começaram tão bem...

Esta pode ser uma boa hora para falar sobre as formas de sair do X quando ele carrega desse modo. Em ordem de preferência:

Felizmente, para nós, o CTRL-ALT-Backspace cumpriu sua tarefa aqui, e retornamos ao prompt de comando. Então agora nós precisamos ver se podemos descobrir o que está errado. Em primeiro lugar, nós devemos olhar o que o Xorg está fazendo, e isso é registrado no arquivo /var/log/Xorg.0.log. Nesse caso, parece que o X acha que tudo está funcionando bem, não existem erros significantes mostrados no registro (linhas que começam com "(EE)" são erros).

Aqui é a parte onde saber sobre o seu hardware é útil. Ao ligar este sistema em um monitor diferente, enquanto ele está mostrando a tela em branco, faz com que a mensagem "Sync. Out of Range" apareça na tela. Então, aparentemente, a configuração do X que nos foi passada não funciona neste monitor, e pode não funcionar em NENHUM monitor se o modo de vídeo selecionado não for possível para esta placa em particular (lembre-se que o X procura nos chips da placa o que eles são potencialmente capazes de fazer, e não como o fabricante integrou todos os elementos). Monitores diferentes fazem coisas diferentes quando a atualização está ruim; alguns tentam mostrar o que eles podem, outros entram em modo de economia de energia, alguns produzem ruídos horríveis, alguns mostram mensagens úteis na tela. Este monitor parece não fazer coisa alguma. Uma anotação é feita para NÃO usar este monitor em alguma configuração inicial do X no futuro.

Olhando o arquivo xorg.conf.new gerado, nós vemos isto:

Section "Monitor"
        #DisplaySize      370   270     # mm
        Identifier   "Monitor0"
        VendorName   "SNY"
        ModelName    "SONY CPD-G400"
 ### Comment all HorizSync and VertSync values to use DDC:
        HorizSync    30.0 - 107.0
        VertRefresh  48.0 - 120.0
        Option      "DPMS"
EndSection
Como um teste, vamos tentar usar o DDC ("Data Display Channel", um modo de fazer com que o monitor diga ao computador e à placa de vídeo quais são suas capacidades), e ver o que acontece. Desta vez, nós recebemos o padrão de rede X e um cursor se movendo, que é tudo que esperamos quando executamos o X dessa forma (nós encerramos o X usando a dica do CTRL-ALT-Backspace). Ele está (novamente) em uma resolução baixa, mas está funcionando, o que significa que certamente o problema é a resolução e a frequência de atualização. Nós restauramos as linhas "HorizSync" e "VertRefresh" aos valores anteriores, como também verificamos as especificações do monitor através de uma pesquisa na Internet.

Vamos tentar forçar o Xorg para uma resolução em particular, e ver se temos alguma sorte. Na parte Section "Screen" do arquivo xorg.conf, nós adicionamos algumas linhas. As linhas adicionadas são mostradas em negrito:

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        DefaultDepth   24
        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
                Modes	"1280x1024"
        EndSubSection
EndSection
Essas duas mudanças dizem ao X que queremos usar uma profundidade de tela de 24 bits e, para essa profundidade, queremos a resolução 1280x1024. Como nenhuma outra resolução está listada para o modo "Depth 24", o sistema será forçado a utilizar aquela resolução.

Nós testamos as mudanças e... SUCESSO! Nós obtemos o que aparenta ser uma tela em alta resolução. Note que TUDO que você deve ver é um padrão de rede (chamado "root weave", ele é muito bom para ver o quão bom seu monitor REALMENTE é, e também é bom para calibrar telas LCD) e um cursor móvel. Neste ponto, não precisa ser algo funcional.

Agora, instalamos o arquivo xorg.conf para vermos como ele se comporta em um X funcionando de modo usável.

# cp xorg.conf.new /etc/X11/xorg.conf
Nós podemos agora tentar carregar o X usando o comando startx(1). Funcionou!

Será, provavelmente, uma boa ideia verificar que estamos na resolução e profundidade de cor desejada, e também que nós estamos em uma frequência de atualização correta. Nós podemos fazer isso com os comandos xrandr(1) e xdpyinfo(1). Entre outras coisas, o xdpyinfo(1) nos informa:

    [...]
screen #0:
  print screen:    no
  dimensions:    1280x1024 pixels (433x347 millimeters)
  resolution:    75x75 dots per inch
  depths (7):    24, 1, 4, 8, 15, 16, 32
  root window id:    0x44
  depth of root window:    24 planes
    [...]
Sim, estamos com a resolução 1280x1024, com uma profundidade de 24 "planes" (bits).

xrandr(4) nos informa:

 SZ:    Pixels          Physical       Refresh
*0   1280 x 1024   ( 433mm x 347mm )  *85   75   60  
 1   1280 x 960    ( 433mm x 347mm )   85   60  
    [...]
que significa que estamos em uma frequência de atualização de 85Hz, que deve ser uma configuração confortável para a maioria dos usuários.

11.3.3 - E se não for tão "fácil"?

Algumas vezes as coisas não funcionam sozinhas. Estas são algumas dicas.

11.4 - Inicialização do X

Existem dois modos comuns de executar o X:

11.4.1 - Por comando:

Inicie a sessão normalmente no console, então execute o startx(1).

11.4.2 - Inicializar diretamente no X:

Isso é feito usando o gerenciador de conexão gráfica ("X Display Manager") xdm(1). Normalmente, o xdm(1) é iniciado pelo usuário root através do rc, e apresenta um prompt de início de sessão. Após uma autenticação correta, ele carrega uma sessão X para aquele usuário. Se, ou quando aquela sessão X deva ser, terminada (incluindo a utilização do CTRL-ALT-Backspace), o xdm(1) retorna para a tela de início de sessão. Por essa razão, NÃO tente iniciar o xdm(1) a partir de /etc/rc.conf.local, a menos que você verificou que o X funciona como você deseja, ou sua máquina pode tornar-se muito difícil de gerenciar! (no pior dos casos: inicialize em modo usuário único, como se você tivesse perdido sua senha, e altere a linha xdm_flags em seu arquivo /etc/rc.conf.local.)

Em algumas plataformas, você precisa desativar o console getty(8) para usar o xdm(1).

11.5 - Personalização do X

11.5.1 - Introdução

O ambiente X padrão do OpenBSD é plenamente funcional, mas você pode querer personalizá-lo. Você pode querer mudar o padrão ou a cor de fundo, ou você pode querer alterar o "Gerenciador de Janela" (o programa que mais define o seu ambiente X), ou modificar os aplicativos que são carregados quando o X inicia.

O gerenciador de janela padrão no OpenBSD é o fvwm(1). O Fvwm é um bom gerenciador de janela de propósitos gerais, mas ele não é sua única escolha; ele não é o único gerenciador de janela incluído no OpenBSD (veja cwm(1) e twm(1)). Uma grande quantidade de gerenciadores de janela também está disponível através de pacotes.

Similarmente ao script de inicialização do sistema, o X possui um procedimento para configurar o ambiente do usuário. Mais precisamente, ele possui mais de um procedimento, e isso depende de como você inicia o X. Entender como o X inicia ajuda você a entender como personalizar o seu ambiente de trabalho do jeito que você quer.

Note que você pode personalizar o ambiente tanto em nível de sistema quanto de usuário. É, provavelmente, melhor fazer mudanças a nível de usuário em vez de alterar os padrões do sistema, já que os scripts do usuário são guardados no diretório pessoal do usuário, e você terá menos arquivos para instalar quando for atualizar a sua versão do OpenBSD. As configurações do sistema estão em /etc/X11 e são inicialmente instaladas a partir do xetcXX.tgz, que não é reinstalado pelo processo de atualização de versão; então, se você fez mudanças a nível de sistema, elas vão persistir, mas você pode precisar mesclar essas mudanças em futuras versões daqueles arquivos.

11.5.2 - Inicialização do startx(1)

O startx(1) procura o arquivo .xinitrc no diretório pessoal do usuário. O .xinitrc é um script shell que pode carregar quantos programas "clientes" X (aplicativos que usam o X) for necessário. Quando o script termina a sua execução, o servidor X é encerrado. Geralmente, a maioria dos programas executados por esse script devem ser executados em segundo plano, e o último deve ser executado em primeiro plano (tipicamente, o gerenciador de janela), e, quando este termina, o script termina e o X é encerrado.

Em um caso simplificado, esse arquivo pode conter apenas o nome do gerenciador de janela que você deseja executar:

cwm
Ou você pode conseguir algo mais enfeitado com:
xconsole -geometry -0+0 -fn 5x7 &
oclock -geometry 75x75-0-0 &
xsetroot -solid grey &
cwm
Isso carrega o xconsole(1), que fornece uma cópia de todo texto que o kernel envia para o console (que agora está coberto pela tela gráfica), um relógio analógico, oclock(1), e define o fundo para um fundo cinza sólido com o xsetroot(1), tudo isso antes de executar o gerenciador de janela cwm(1). Note que somente o gerenciador de janela não é colocado em segundo plano com o caractere "&". Isso significa que o X continua em execução até que o cwm(1) termine sua execução.

Se o diretório pessoal do usuário não possui um arquivo .xinitrc, o arquivo /etc/X11/xinit/xinitrc do sistema é usado. Esse arquivo pode fornecer algumas ideias adicionais para o seu script .xinitrc.

11.5.3 - Inicialização do xdm(1)

O xdm(1) normalmente é carregado pelos scripts de inicialização do sistema, mas por propósitos de teste (recomendado, a menos que você saiba que a sua configuração do X está correta!), ele pode ser executado como root.

O xdm(1) possui muitas outras funcionalidades que não serão mostradas aqui, mas para nossos propósitos, o xdm mostra ao usuário uma tela de início de sessão, recebe o nome de usuário e senha, e então mostra ao usuário o seu ambiente X. Quando o X é encerrado, propositalmente ou acidentalmente, o xdm é mostrado novamente. Esse é o motivo para se ter certeza de que o X está configurado corretamente antes de usar o xdm(1) e, certamente, antes de colocar o xdm(1) para carregar no momento da inicialização, caso contrário, você pode ter alguma dificuldade para conseguir o controle da sua máquina.

Quando o xdm(1) inicializa, ele executa o /etc/X11/xdm/Xsession, que faz uma verificação para ver se o usuário tem um arquivo .xsession em seu diretório pessoal. Então, se você deseja mudar seu gerenciador de janela padrão, simplesmente execute-o (junto com outras coisas) no .xsession. Novamente, qualquer programa que você deseja que seja carregado com o X (por exemplo, três xterm(1)s) pode ser colocado aqui, mas todos devem executar em segundo plano, exceto o seu gerenciador de janela, que, novamente, quando termina sua execução, sua sessão X é encerrada. Nesse caso, o xdm(1) reinicia o X e mostra novamente a tela de início de sessão.

11.5.4 - Como usar um gerenciador de janela diferente

Você pode executar um gerenciador de janela quando você carrega o X, sem alterar nenhuma configuração padrão:
$ startx /usr/local/bin/fluxbox
Diversos gerenciadores de janela (incluindo o cwm(1) e o fvwm(1)) oferecem a capacidade de mudar o gerenciador de janela durante a execução, sem ter que reinicializar o X ou qualquer um dos seus aplicativos. Seu novo gerenciador de janela substitui o antigo; terminar a execução do gerenciador de janela recém-carregado encerra o X, e ele não mostra o seu gerenciador de janela anterior. O fvwm(1) permite que você carregue um gerenciador de janela diferente clicando com o botão esquerdo no fundo da tela ("root window"), escolhendo "(Re)Start", e então selecionando o seu gerenciador de janela preferido (no entanto, note que você precisa adicionar seus gerenciadores de janela alternativos no seu arquivo .fvwmrc (a configuração a nível de sistema é /usr/X11R6/lib/X11/fvwm/.fvwmrc)). O cwm(1) permite que você execute outro gerenciador de janela usando as teclas Ctrl-Alt-w, e então digitando o nome do gerenciador que você deseja usar.

Após encontrar um gerenciador de janela que te agrade, você pode defini-lo como o programa final a ser executado pelos scripts de inicialização, como demonstrado acima.

[Índice da FAQ] [Seção 10 - Administração do Sistema] [Seção 12 - Questões Específicas de Hardware e Plataforma]


[voltar] www@openbsd.org
$OpenBSD: faq11.html,v 1.6 2009/10/26 20:27:01 ajacoutot Exp $