如何让 gdm3 start X 安装在不同的路径(或从个性化路径运行 X)?

Bra*_*iam 5 xorg x11 gnome3 gdm3

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

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

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

我使用的是 Debian 7.0 和 GDM 3.4.1。

也可以使用任何其他方法吗?

Bor*_*kov 5

2个字回答: Xserver for GDM的位置在configure.ac编译时硬编码,X_SERVER变量第1199行,无法配置。所以,也许您可​​以使用符号链接,将/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}
Run Code Online (Sandbox Code Playgroud)

所以,Xorg 是通过 gdm-simple-slave 启动的。Definitly,/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

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

唉,这个宏似乎是在 configure.ac,第 1199 行中形成的,并且是硬编码的。因此,似乎最好的选择是将指向您的 Xserver 构建的符号链接放置到这些位置之一。