테스트를 위해 git에서 전체 Xserver를 구축했습니다. 사용하는 것이 좋습니다.build.shgit 트리에 대해 모든 모듈을 컴파일하고 해당 /opt/xorg
경로에 설치하는 더 쉬운 방법으로 freedesktop.org에서 제공됩니다. 문제는 gdm
Xserver 및 관련 바이너리를 로드할 위치를 결정하는 방법을 찾을 수 없다는 것입니다.
내가 읽고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/Default
Xserver를 시작하는 것과는 전혀 관련이 없습니다 .여기그리고여기.
일부가 있습니다표시, 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/local
dpkg-divert
Xorg
이렇게 하면 사용자 정의 바이너리를 삭제하거나 이름을 변경하여 알려진 양호한 버전으로 쉽게 롤백할 수 있습니다.GNU 스토우.