web-dev-qa-db-ja.com

gdm3 start Xを別のパスにインストールする(またはパーソナライズされたパスからXを実行する)にはどうすればよいですか?

テスト用にgitからXserver全体をビルドしました。gitツリーに対してすべてのモジュールをコンパイルする簡単な方法としてfreedesktop.orgが提供する build.sh を使用し、/opt/xorgパスの下にインストールします。問題は、gdmがXserverと関連するバイナリをどこからロードするかをどのように決定するかがわからないことです。

X.orgサイト セクションを読みました:「実際に適合性テストを実行しています」が、使用できるスクリプト/ヘルパーは404を返します。

Xorg実行可能ファイルの場所とそのリンクはわかっていますが、カスタムパスにビルドおよびインストールされたXserverをテストしたいので、すべてが期待どおりに機能するのに十分かどうかはわかりません。

Debian7.0とGDM3.4.1を使用しています。

他の方法も使用できますか?

5
Braiam

2つの言葉で答えてください:GDM用のXserverの場所は、configure.acのコンパイル時にハードコードされています 行1199 X_SERVER変数にあり、構成できません。だから、あなたはシンボリックリンクで遊ぶことができるかもしれません、リンク/usr/bin/Xorg(または、おそらく/usr/bin/X、Xserverのビルドについて this )を参照してください。

詳細:

私もDebian7を持っており、これが私のプロセスツリーです。

 |-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からどのように開始されるか、構成することが不可能であるいくつかの 表示 がありました。

私はかなりよく構造化されたソースコードを選ぶことにしました。そう:

ソースコード に移動します。 デーモン フォルダがあります。このフォルダには [〜#〜] internals [〜#〜] ファイルが含まれています。コードの構造。

そこにあなたは読むことができます:

** GdmServer

ローカルXサーバーの実行を管理する、スレーブによって使用されるクラス。

したがって、必要なファイルは https://git.gnome.org/browse/gdm/tree/daemon/gdm-server.c

Xサーバーの呼び出しとそのコマンドライン引数の作成を担当する、いくつかのネストされた関数があります。

Xサーバープロセスの実行を直接担当する関数は gdm_server_spawn であり、これは 694行目 にglibの g_spawn_async_with_pipes でXを生成します。

それで、そのargvがどのように形成されるかを調べます。 2つの言葉で言えば 293行目 であり、X_SERVERマクロの値が必要です(sysVinitの代わりにRedHatのsystemdを使用しているが、そうではない場合を除く:))。

残念ながら、このマクロはconfigure.acで形成されているようです 行1199 そしてハードコーディングされています。したがって、Xserverのビルドへのシンボリックリンクをそれらの場所の1つに配置するのが最善のオプションのようです。

5
Boris Burkov

@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

このスクリプトは、バージョンがある場合は/usr/localからXorgを実行し、そうでない場合は最初のステップでdpkg-divertしたDebianパッケージバージョンにフォールバックします。

このようにして、カスタムビルドのXorgバイナリを削除または名前変更することで、正常なバージョンに簡単にロールバックできます。 GNU Stow を使用してそれを行います。

2
Jamey Sharp