Как сделать gdm3 start X установленным в другом пути (или запуском X из персонализированного пути)?

Я построил весь Xserver из git для тестирования, предлагая использовать build.sh, предоставленный freedesktop.org, как более простой способ скомпилировать все модули против дерева git и установить по пути /opt/xorg . Проблема в том, что я не могу найти, как gdm решает, откуда загрузить Xserver и связанные с ним двоичные файлы.

Я прочитал на сайте X.org раздел «Фактически выполняю тесты соответствия», но скрипты / помощники, которые я мог использовать, возвращают 404.

Хотя я знаю, где исполняемый файл Xorg и его ссылки, я не уверен, что этого будет достаточно, чтобы все работало должным образом, так как я хочу протестировать Xserver, встроенный и установленный в настраиваемом пути.

Я использую Debian 7.0 и GDM 3.4.1.

Можно использовать и любой другой метод?

Ответ на 2 слова: Местоположение Xserver для GDM жестко закодировано во время компиляции в configure.ac, строка 1199 в переменной X_SERVER и не может быть настроена. Таким образом, возможно, вы можете играть с символическими ссылками, связывая /usr/bin/Xorg (или, что менее вероятно, /usr/bin/X , см. Это ) с вашей сборкой Xserver.

Детали:

У меня также есть Debian 7, и вот мое дерево процессов:

  |-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} 

Итак, Xorg запускается через gdm-simple-slave. Определенно, /etc/gdm/Init/Default имеет ничего общего с запуском Xserver, как было сказано здесь и здесь .

Были некоторые признаки того , что невозможно настроить, как X запускается из gdm.

Я решил пойти на исходные коды, которые довольно хорошо структурированы. Так:

Перейдите к исходным кодам , есть папка daemon , которая содержит файл INTERNALS , объясняющий структуру кода.

Там вы можете прочитать:

** GdmServer

Класс, используемый ведомым устройством, который управляет запуском локального X-сервера.

Итак, нам нужен файл https://git.gnome.org/browse/gdm/tree/daemon/gdm-server.c

Существует несколько вложенных функций, отвечающих за вызов X-сервера и создание его аргументов командной строки.

Функция, непосредственно ответственная за запуск процесса X-сервера, – gdm_server_spawn , который порождает X в строке 694 с g_spawn_async_with_pipes glib.

Итак, мы должны выяснить, как формируется его argv . Ну, в 2-х словах это строка 293, и нам нужно значение макроса X_SERVER (если вы не используете systemd вместо Red Hat, а не sysVinit, но вы не :)).

Увы, этот макрос, по-видимому, сформирован в configure.ac, строка 1199 и жестко закодирован. Таким образом, кажется, что лучший вариант – разместить символическую ссылку на вашу сборку Xserver в одно из этих мест.

Поскольку @Bob говорит, что для этого нет опции настройки времени выполнения, и я не хотел перестраивать gdm3 из исправленного источника, я принял следующий подход.

Сначала переместите реальный сервер X в сторону:

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

Затем добавьте новый сценарий оболочки вместо /usr/bin/Xorg :

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

Этот скрипт будет запускать Xorg из /usr/local если там есть версия, или вернуться к пакетной версии Debian, которую мы dpkg-divert ed на первом этапе в противном случае.

Таким образом, вы можете легко откат к известной версии, удалив или переименовав свой собственный двоичный код Xorg ; Я делаю это с помощью GNU Stow .