Fink

Executando o X11 - 7. Resolução de problemas com o XFree86

7.1 Quando inicio o XDarwin, ele termina ou falha quase que de imediato

Em primeiro lugar: não entre em pânico! Há várias coisas que podem dar errado com o XFree86 e um bom número delas podem causar falhas de inicialização. Além disso, não é incomum que o XDarwin falhe quando apresenta problemas de inicialização. Esta seção tenta fornecer uma lista abrangente de problemas pelos quais você talvez passe. Mas antes você precisa obter duas informações importantes:

A versão do XDarwin. Você pode encontrar a versão do XDarwin no Finder clicando uma única vez no ícone XDarwin e então escolhendo a opção "Obter Informações" ("Show Info") no menu. A versão só é incrementada quando uma versão binária de teste é feita pelo projeto XonX, então "1.0a1" pode na verdade ser qualquer versão entre 1.0a1 e 1.0a2.

Mensagens de erro. São fundamentais para identificar precisamente o problema pelo qual você está passando. A forma como você recebe as mensagens de erro depende de como você iniciou o XDarwin. Se você executou startx em uma janela do Terminal, você terá as mensagens ali nessa janela. Lembre-se de que você pode navegar para cima. Se você iniciou o XDarwin através de um duplo clique no ícone, as mensagens acabam indo para o log do sistema, o qual você pode acessar através do aplicativo Console no diretório Utilitários. Assegure-se de escolher o conjunto correto de mensagens, isto é, o último.

Começamos por uma lista de mensagens que você possa encontrar:

_XSERVTransmkdir: Owner of /tmp/.X11-unix should be set to root
_IceTransmkdir: Owner of /tmp/.ICE-unix should be set to root

Classe: não causa danos. O X11 cria diretórios escondidos em /tmp e armazena "arquivos" de sockets para conexões locais. Por razões de segurança, o X11 prefere que esses diretórios tenham root como proprietário mas, como esses arquivos têm permissão de escrita para todos os usuários, o X11 rodará sem problemas. (Observação: é razoavelmente difícil que esses diretórios tenham root como proprietário já que o Mac OS X zera o diretório /tmp quando é reiniciado e o XDarwin não executa (nem precisa executar) com privilégio de root.)

QuartzAudioInit: AddIOProc returned 1852797029
-[NSCFArray objectAtIndex:]: index (2) beyond bounds (2)
kCGErrorIllegalArgument : CGSGetDisplayBounds (display 35434400)
No core keyboard

Classe: falso. Esses são erros que surgem quando o servidor tenta reiniciar-se após um erro prévio. Durante este processo, uma outra cópia da mensagem de inicialização é exibida, seguida por uma ou mais das mensagens acima porque a reinicialização do servidor não funciona de fato nas versões do XDarwin afetadas. Então quando você vir mensagens como estas, pagine para na janela do Console/Terminal e procure por um outro conjunto de mensagem de inicialização e mensagens. Isto afeta todas as versões até XDarwin 1.0a3 inclusive; foi corrigido após a versão 1.0a3 ser lançada.

cat: /Users/chrisp/.Xauthority: No such file or directory

Classe: em geral, não causa danos. Não se sabe de onde vêm essas mensagens e elas aparentam não ter impacto nas operações. Você pode livrar-se delas executando touch .Xauthority no seu diretório home.

Gdk-WARNING **: locale not supported by C library

Classe: não causa danos. Isto apenas significa o que diz -- local não suportado pela biblioteca C -- e não fará com que a aplicação deixe de funcionar. Para mais informações, veja abaixo.

Gdk-WARNING **: locale not supported by Xlib, locale set to C
Gdk-WARNING **: can not set locale modifiers

Classe: ruim, mas não fatal. Estas mensagens podem aparecer em complemento às acima. Isto indica que os arquivos de dados de localização do XFree86 não estão presentes. Aparentemente isto acontece quando se compila o XFree86 a partir do código fonte, mas não é reproduzível. A maior parte das aplicações ainda funciona mas o GNU Emacs é uma exceção notável.

Unable to open keymapping file USA.keymapping.
Reverting to kernel keymapping.

Classe: geralmente fatal. Isto pode acontecer com o XDarwin 1.0a1 e a opção de mapeamento de teclado "Load from file" habilitada. Essa versão precisa de um caminho completo quando o arquivo a ser carregado é definido pela caixa de diálogo Preferências (Preferences), mas procura automaticamente quando é passado pela linha de comando. A mensagem será geralmente seguida pela mensagem "assert" mostrada abaixo. Para corrigir este problema, siga as instruções abaixo.

Fatal server error:
assert failed on line 454 of darwinKeyboard.c!
Fatal server error:
Could not get kernel keymapping! Load keymapping from file instead.

Classe: fatal. Mudanças que a Apple fez no Mac OS X 10.1 quebraram o código do XFree86 que lê o leiaute de teclado no núcleo do sistema operacional; a mensagem acima é o resultado disso. Você precisa usar a opção de mapeamento de teclado "Load from file" no Mac OS X 10.1. A configuração é feita na caixa de diálogo Preferências (Preferences) do XDarwin. Assegure-se de que um arquivo haja sido selecionado (isto é, use o botão "Escolher arquivo", "Pick file") - simplesmente ativar a caixa de verificação pode não ser suficiente em algumas versões do XDarwin. Caso você não consiga abrir a caixa de diálogo Preferências porque o XDarwin a fecha antes que você consiga usá-la, rode-o a partir do Terminal através do comando startx -- -quartz -keymap USA.keymapping. Isto geralmente permite que o XDarwin inicie e então você pode fazer a escolha permanente na caixa de diálogo Preferências.

Fatal server error:
Could not find keymapping file .

Class: Fatal (as it says). This error is due to the absence of the keymapping files under Panther. You need to install xfree86-4.3.99-16 or later, since these versions don't need the keymapping files.

Warning: no access to tty (Inappropriate ioctl for device).
Thus no job control in this shell.

Classe: em geral, não causa danos. O XDarwin 1.0a2 e posteriores abrem um shell interativo por debaixo dos panos para rodar seu arquivo de inicialização do cliente (.xinitrc). Isto foi feito para que você não tenha que adicionar comandos para configuração de PATH nesse arquivo. Alguns shells reclamam que não estão conectados a um terminal real mas isto pode ser ignorado pois essa instância do shell não é usada para qualquer coisa que requeira controle de jobs ou similares.

Fatal server error:
failed to connect as window server!

Classe: fatal. Isto significa que o servidor em modo console (para o Darwin puro) foi iniciado enquanto você estava logado no Aqua. Normalmente isto acontece quando você instala uma distribuição binária oficial do XFree86 e esquece o tarball Xquartz.tgz. Isto também pode acontecer quando os links simbólicos em /usr/X11R6/bin estão bagunçados ou quando você executa o comando XDarwin em uma janela de Terminal para iniciar o servidor (você deveria usar startx; veja Iniciando o XFree86.).

De qualquer forma, você pode executar ls -l /usr/X11R6/bin/X* e verificar a saída. Você deveria ver quatro entradas relevantes: X, um link simbólico apontando para XDarwinStartup; XDarwin, um arquivo executável (esse é o servidor em modo console); XDarwinQuartz, um link simbólico apontando para /Applications/XDarwin.app/Contents/MacOS/XDarwin; e XDarwinStartup, um arquivo executável pequeno. Se algum desses estiver faltando ou apontando para arquivos diferentes, você precisa corrigir. Como fazê-lo depende do método usado para instalar o XFree86. Se você instalou o XFree86 com o Fink então você precisa reinstalar o pacote xfree86 (ou xfree86-rootless para o OS 10.2 e anteriores). Se foi instalado por você mesmo, então obtenha os arquivos a partir de uma cópia de Xquartz.tgz.

The XKEYBOARD keymap compiler (xkbcomp) reports:
> Error:            Can't find file "unknown" for geometry include
>                   Exiting
>                   Abandoning geometry file "(null)"
Errors from xkbcomp are not fatal to the X server

Classe: em geral, não causa danos. Como a própria mensagem diz, não é um erro fatal. Até onde eu saiba, o XDarwin não chega a usar extensões XKB. Provavelmente algum programa cliente tentou usá-las...

startx: Command not found.

Classe: fatal. Isto pode acontecer com o XDarwin 1.0a2 e 1.0a3 quando seus arquivos de inicialização do shell não foram configurados para adicionar /usr/X11R6/bin à variável PATH. Caso você use o Fink e não haja mudado seu shell padrão, adicionar a linha source /sw/bin/init.csh ao arquivo .cshrc em seu diretório home (conforme recomendado pelas instruções do Fink) deve ser suficiente.

_XSERVTransSocketUNIXCreateListener: ...SocketCreateListener() failed
_XSERVTransMakeAllCOTSServerListeners: server already running
Fatal server error:
Cannot establish any listening sockets - Make sure an X server isn't already
running

Classe: fatal. Isto pode acontecer quando você executa acidentalmente várias instâncias do XDarwin de uma vez, ou talvez após uma finalização problemática (isto é, uma folha) do XDarwin. Pode ser também um problema com permissão de arquivo com os sockets para conexões locais. Você pode tentar limpá-los com rm -rf /tmp/.X11-unix.. Reiniciar o computador também ajuda na maior parte dos casos (o Mac OS X limpa automaticamente o diretório /tmp quando é iniciado, e a pilha de rede é reiniciada).

Xlib: connection to ":0.0" refused by server
Xlib: Client is not authorized to connect to Server

Classe: fatal. Os programas clientes não conseguem se conectar ao servidor de exibição (XDarwin) porque usam dados de autenticação falsos. Isto é causado por algumas instalações do VNC, por rodar o XDarwin através do sudo, e provavelmente outros acidentes estranhos. A correção usual é apagar o arquivo .Xauthority (o qual armazena dados de autenticação) no seu diretório home e recriá-lo em branco:

cd
rm .Xauthority
touch .Xauthority

Outra causa comum de erro na inicialização do XFree86 é um arquivo .xinitrc incorreto. O que acontece é que .xinitrc é executado e por alguma razão termina quase que de imediato. O xinit interpreta isto como "a sessão do usuário terminou" e encerra o XDarwin. Veja a seção sobre o .xinitrc para mais detalhes. Lembre-se de configurar sua variável PATH e ter um programa que execute indefinidamente e que não seja iniciado em segundo plano. É uma boa idéia adicionar exec xterm como uma garantia caso seu gerenciador de janelas ou similar não possa ser encontrado.

7.2 Ícones pretos no painel do GNOME ou no menu de um aplicativo GNOME

Um problema comum é ícones ou outras imagens sendo exibidos como retângulos pretos ou contornos pretos. Em última instância, isto é causado por limitações do núcleo do sistema operacional. O problema foi relatado para a Apple mas até agora eles aparentam não querer corrigi-lo: veja o relatório de erro para detalhes.

A situação atual é que a extensão MIT-SHM do protocolo X11 é praticamente impossível de user usada no Darwin e no Mac OS X. Há duas formas de desligar esta extensão de protocolo: no servidor ou nos clientes. Os servidores XFree86 instalados pelo Fink (isto é, os pacotes xfree86-server e xfree86-rootless) já a desligaram. O GIMP e o painel do GNOME também já foram inoculados. Se você encontrar ícones pretos em outra aplicação, inicie a aplicação com a opção de linha de comando --no-xshm.

7.3 O teclado não funciona no XFree86

Este é um problema conhecido que até agora aparenta afetar apenas os laptops (PowerBook, iBook). Para contorná-lo, a opção de mapeamento de teclado "Load from file" foi implementada. Hoje em dia tornou-se o padrão porque o método antigo (ler o mapeamento do núcleo do SO) parou de funcionar com o Mac OS X 10.1. Se você ainda não habilitou esta opção, você pode fazê-lo na caixa de diálogo de Preferências do XDarwin. Marque a caixa de verificação "Load from file" e escolha o arquivo de mapeamento de teclado a ser carregado. Após reiniciar o XDarwin, seu teclado deveria funcionar de forma geral (veja abaixo).

Caso esteja iniciando o XFree86 a partir da linha de comando, você pode passar o nome do arquivo de mapeamento de teclado a ser carregado como uma opção:

startx -- -quartz -keymap USA.keymapping

7.4 A tecla Backspace não funciona

Isto pode acontecer quando se usa a opção "Load from file" acima. Os arquivos de mapeamento descrevem a tecla backspace como "Delete" e não como "Backspace". Você pode corrigir isto coloando a seguinte linha no seu arquivo .xinitrc:

xmodmap -e "keycode 59 = BackSpace"

Se estou lembrando corretamente, o XDarwin 1.0a2 e posteriores já têm código que mapeia correta e automaticamente a tecla Backspace.

7.5 "Warning: locale not supported by C library"

Estas mensagens são relativamente comuns mas não causam dano. Elas significam exatamente o que dizem - internacionalização não é suportada através da biblioteca C padrão, o programa usará as mensagens padrão, formatos de data etc em inglês. Há várias formas de lidar com isto:

Próximo: 8. Dicas de uso