答案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/local
dpkg-divert
这样,您可以通过删除或重命名自定义的Xorg
二进制文件来轻松回滚到已知良好的版本;我这样做使用GNU 斯托。