Como fazer o gdm3 iniciar o X instalado em um caminho diferente (ou executar o X a partir de um caminho personalizado)?

5

Eu construí o Xserver inteiro do git para testar propostas usando o build.sh fornecido pelo freedesktop.org como o método mais fácil para compilar todos os módulos na árvore git e instalado sob o caminho /opt/xorg . O problema é que não consigo encontrar como gdm decide de onde carregar o Xserver e os binários relacionados.

Eu li no site X.org a seção: 'Realizando os testes de conformidade', mas o scripts / helpers que eu poderia usar retorna um 404.

Embora eu saiba onde o executável do Xorg está e seus links, não tenho certeza de que isso será suficiente para que tudo funcione como esperado, já que quero testar o Xserver construído e instalado no caminho personalizado.

Estou usando o Debian 7.0 e o GDM 3.4.1.

Qualquer outro método poderia ser usado também?

    
por Braiam 29.06.2013 / 03:06

2 respostas

5

Responda em 2 palavras: A localização do Xserver para GDM é codificada permanentemente em tempo de compilação em configure.ac, linha 1199 na variável X_SERVER e não pode ser configurado. Então, você pode jogar com links simbólicos, ligando /usr/bin/Xorg (ou, menos provavelmente /usr/bin/X , veja this ) para sua compilação do Xserver.

Detalhes:

Eu também tenho um Debian 7 e aqui está minha árvore de processos:

 |-gdm3-+-gdm-simple-slav-+-Xorg
 |      |                 |-gdm-session-wor-+-gnome-session-+-bluetooth-apple---{bluetooth-apple}
 |      |                 |                 |               |-evolution-alarm---2*[{evolution-alarm}]
 |      |                 |                 |               |-gdu-notificatio
 |      |                 |                 |               |-gnome-fallback----2*[{gnome-fallback-}]
 |      |                 |                 |               |-gnome-panel-+-gnome-terminal-+-bash
 |      |                 |                 |               |             |                |-bash---vi
 |      |                 |                 |               |             |                |-bash-+-less
 |      |                 |                 |               |             |                |      '-pstree
 |      |                 |                 |               |             |                |-gnome-pty-helpe
 |      |                 |                 |               |             |                '-3*[{gnome-terminal}]
 |      |                 |                 |               |             |-iceweasel-+-plugin-containe-+-4*[gtk-gnash]
 |      |                 |                 |               |             |           |                 '-{plugin-containe}
 |      |                 |                 |               |             |           '-31*[{iceweasel}]
 |      |                 |                 |               |             |-pidgin
 |      |                 |                 |               |             '-3*[{gnome-panel}]
 |      |                 |                 |               |-gnome-screensav---2*[{gnome-screensav}]
 |      |                 |                 |               |-gnome-settings----2*[{gnome-settings-}]
 |      |                 |                 |               |-gnome-sound-app---{gnome-sound-app}
 |      |                 |                 |               |-metacity---3*[{metacity}]
 |      |                 |                 |               |-nm-applet---{nm-applet}
 |      |                 |                 |               |-notification-da---{notification-da}
 |      |                 |                 |               |-polkit-gnome-au---{polkit-gnome-au}
 |      |                 |                 |               |-ssh-agent
 |      |                 |                 |               |-tracker-miner-f---2*[{tracker-miner-f}]
 |      |                 |                 |               |-tracker-store---6*[{tracker-store}]
 |      |                 |                 |               '-3*[{gnome-session}]
 |      |                 |                 '-2*[{gdm-session-wor}]
 |      |                 '-{gdm-simple-slav}
 |      '-{gdm3}

Então, o Xorg é iniciado via gdm-simple-slave. Definitivamente, /etc/gdm/Init/Default não tem nada a ver com o início do Xserver, como foi dito aqui e aqui .

Houve algumas indicações , que é impossível configurar, como o X é iniciado a partir do gdm.

Eu decidi procurar códigos fonte, que são bem estruturados. Então:

Vá para os códigos-fonte , há um daemon , que contém um INTERNOS arquivo, explicando a estrutura do código.

Lá você pode ler:

** GdmServer

A class, used by the slave, that manages running a local X Server.

Assim, o arquivo que precisamos é link

Existem várias funções aninhadas, responsáveis por chamar o servidor X e criar seus argumentos de linha de comando.

A função diretamente responsável pela execução do processo do servidor X é gdm_server_spawn , que gera o X na linha 694 com glib g_spawn_async_with_pipes .

Então, vamos descobrir como o argv é formado. Bem, em duas palavras é linha 293 e precisamos do valor de X_SERVER macro (a menos que você esteja usando o systemd da RedHat em vez de sysVinit, mas você não está:)).

Infelizmente, esta macro é aparentemente formada em configure.ac, linha 1199 e é codificado. Então, parece que a melhor opção é colocar um link simbólico na sua compilação do Xserver para um desses locais.

    
por 22.07.2013 / 12:35
2

Como o @Bob diz que não há nenhuma opção de configuração de tempo de execução para isso e eu não queria reconstruir o gdm3 de origem com patch, eu usei a seguinte abordagem.

Primeiro, mova o servidor X real para o lado:

sudo dpkg-divert --local --rename --add /usr/bin/Xorg

Em seguida, solte um novo script de shell no lugar de /usr/bin/Xorg :

#!/bin/sh
test -x /usr/local/bin/Xorg && exec /usr/local/bin/Xorg
exec /usr/bin/Xorg.distrib

Este script executará Xorg de /usr/local se houver uma versão lá, ou voltará para a versão empacotada do Debian que dpkg-divert ed na primeira etapa de outra forma.

Dessa forma, você pode reverter facilmente para uma versão válida removendo ou renomeando o seu Xorg binário personalizado; Eu faço isso usando o GNU Stow .

    
por 18.04.2014 / 00:37