gdm3 start X를 다른 경로에 설치하려면 어떻게 해야 합니까(또는 개인화된 경로에서 X를 실행합니까?)

gdm3 start X를 다른 경로에 설치하려면 어떻게 해야 합니까(또는 개인화된 경로에서 X를 실행합니까?)

테스트를 위해 git에서 전체 Xserver를 구축했습니다. 사용하는 것이 좋습니다.build.shgit 트리에 대해 모든 모듈을 컴파일하고 해당 /opt/xorg경로에 설치하는 더 쉬운 방법으로 freedesktop.org에서 제공됩니다. 문제는 gdmXserver 및 관련 바이너리를 로드할 위치를 결정하는 방법을 찾을 수 없다는 것입니다.

내가 읽고X.org 웹사이트해당 부분은 "실제로 적합성 테스트를 실행 중"이지만 제가 사용할 수 있는 스크립트/도우미는 404를 반환합니다.

Xorg 실행 파일과 해당 링크의 위치를 ​​알고 있지만, 사용자 정의 경로에 구축 및 설치된 Xserver를 테스트하고 싶기 때문에 이것이 모든 것이 예상대로 작동하도록 하는 데 충분한지 확신할 수 없습니다.

저는 데비안 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/DefaultXserver를 시작하는 것과는 전혀 관련이 없습니다 .여기그리고여기.

일부가 있습니다표시, gdm에서 X가 시작되는 방법을 구성하는 것은 불가능합니다.

나는 소스 코드를 사용하기로 결정했는데, 그 소스 코드는 매우 잘 구성되어 있습니다. 그래서:

이동소스 코드, 하나 있어요악마포함된 폴더내부 구조코드의 구조를 설명하는 문서입니다.

여기에서 다음 내용을 읽을 수 있습니다.

** GDM 서버

로컬 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 매크로의 값이 필요합니다(sysVinit 대신 RedHat의 systemd를 사용하지 않는 한 :)).

아쉽게도 이 매크로는configure.ac에서 생성되는 것 같습니다.1199라인그리고 하드코딩되어 있습니다. 따라서 가장 좋은 옵션은 이러한 위치 중 하나에 Xserver 버전에 대한 심볼릭 링크를 배치하는 것입니다.

답변2

@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/localdpkg-divert

Xorg이렇게 하면 사용자 정의 바이너리를 삭제하거나 이름을 변경하여 알려진 양호한 버전으로 쉽게 롤백할 수 있습니다.GNU 스토우.

관련 정보