如何使gdm3启动安装在不同路径中的X(或从个性化路径运行X)?

如何使gdm3启动安装在不同路径中的X(或从个性化路径运行X)?

我已经从 git 构建了整个 Xserver 用于测试建议使用构建.sh由 freedesktop.org 提供,作为针对 git 树编译所有模块的更简单方法,并安装在该/opt/xorg路径下。问题是我找不到如何gdm决定从哪里加载 Xserver 和相关的二进制文件。

我读过X.org 网站该部分:“实际运行一致性测试”,但我可以使用的脚本/帮助程序返回 404。

虽然我知道 Xorg 可执行文件的位置及其链接,但我不确定这是否足以使一切按预期工作,因为我想测试在自定义路径中构建和安装的 Xserver。

我正在使用 Debian 7.0 和 GDM 3.4.1。

还可以使用其他方法吗?

答案1

用2个字回答: GDM 的 Xserver 位置在编译时硬编码在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启动的。

我决定使用源代码,它们的结构非常好。所以:

前往源代码,有一个守护进程文件夹,其中包含一个内部结构文件,解释代码的结构。

在那里您可以阅读:

** Gdm服务器

由从属设备使用的类,用于管理本地 X Server 的运行。

所以,我们需要的文件是https://git.gnome.org/browse/gdm/tree/daemon/gdm-server.c

有几个嵌套函数,负责调用 X 服务器并创建其命令行参数。

直接负责运行X服务器进程的函数是gdm_服务器_spawn,这会产生 X694线与油嘴滑舌的g_spawn_async_with_pipes

所以,我们要找出它argv是如何形成的。嗯,用2个字来说就是第293行我们需要 X_SERVER 宏的值(除非您使用 RedHat 的 systemd 而不是 sysVinit,但您没有:))。

唉,这个宏貌似是在configure.ac中形成的,1199线并且是硬编码的。因此,似乎最好的选择是将 Xserver 版本的符号链接放置到这些位置之一。

答案2

由于 @Bob 说没有运行时配置选项,并且我不想从修补的源重建 gdm3,所以我采用了以下方法。

首先,将真正的 X 服务器移到一边:

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

然后删除一个新的 shell 脚本来代替/usr/bin/Xorg

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

如果那里有版本,则该脚本Xorg将从中运行,否则将回退到我们在第一步中编写的 Debian 打包版本。/usr/localdpkg-divert

这样,您可以通过删除或重命名自定义的Xorg二进制文件来轻松回滚到已知良好的版本;我这样做使用GNU 斯托

相关内容