Welches Programm startet dbus-daemon?

7

Welches Programm startet den dbus-daemon-Prozess pro Benutzersitzung in GNOME 2 und GNOME 3 (vermutlich über dbus-launch)? Ich würde es gerne wissen, weil ich der Liste der Verzeichnisse, die dbus-daemon auf .service-Dateien überprüft, ein Verzeichnis hinzufügen möchte.

(Wenn es sich um ein sh-Programm handelt, ist "sh" natürlich nicht die Antwort, nach der ich suche ;-)

Wie hätte ich diese Frage effizient für mich beantworten können? Welche Dokumentation gibt es beim Desktop- und Sitzungsstart?

Croad Langshan
quelle
Also noch kein Glück?
mlvljr
In Zukunft verwenden pstreeund pstree -pum die tatsächlichen PIDs zu sehen
Pithikos
Pithikos: Laut meinem Kommentar zu Ihrer Antwort helfen diese Befehle nicht, wenn der Prozess bereits auf Init
Croad Langshan

Antworten:

4

Der Anmeldemanager startet dbus über das Xsession-Skriptverzeichnis. Wenn die use-session-dbusOption für die Xsession festgelegt ist, wird das dbus Xsession-Skript geladen und ausgeführt dbus-launch --exit-with-session $session_command.

Dobey
quelle
1
Wenn also dbus-launch den Sitzungsmanager startet, ist der Sitzungsmanager nicht das Programm, das dbus-launch startet, sodass die Frage anscheinend nicht beantwortet wird?
Croad Langshan
2
Der Grund, warum ich ein Verzeichnis hinzufügen möchte, das auf .service-Dateien überprüft wird, ist, dass ich eine Nicht-Root-Installation durchführe. Ich kann also keine session-local.conf erstellen. Ich kann immer einen zweiten dbus-Daemon starten, aber ich möchte dies nach Möglichkeit vermeiden (teils aus Sparsamkeit, teils, weil es so aussieht, als würden dbus-Startprozesse nach dem Beenden des Programms zurückbleiben, so dass es nicht einfach zu schreiben ist ein gut verhaltener Shell-Alias, der ein Programm mit dbus-launch ausführt).
Croad Langshan
1
Warum müssen Sie überhaupt eine .service-Datei installieren? Müssen Sie tatsächlich die Aktivierungsfunktion von dbus verwenden? Ihre Frage sagt nicht wirklich aus, was Sie genau tun möchten. Dies wäre wahrscheinlich einfacher zu beantworten, da dbus-daemon / dbus-launch auf verschiedene Arten gestartet werden kann, je nachdem, welche Sitzung der Benutzer ausführt.
Dobey
1
Sie haben 3 Fragen gestellt. Wähle eins. :)
Dobey
1
Das erste: Welches Programm startet dbus-daemon?
Croad Langshan
2

Das Starten der meisten Aufgaben und Dienste während des Startvorgangs, einschließlich des Dbus-Dämons, wird von Upstart ausgeführt .

Der Dbus-Daemon wird nicht pro Benutzersitzung gestartet, sondern beim Mounten des letzten lokalen Dateisystems . Informationen zum Starten / Stoppen / Überwachen des Dbus-Daemons finden Sie unter /etc/init/dbus.conf.

Sie können den Benutzerjob verwenden , um Hamster bei der grafischen Anmeldung zu starten .

Goran Miskovic
quelle
1
Ich habe dies als akzeptierte Antwort überprüft und dann festgestellt, dass dieses Skript den dbus-Daemon "system" (mit dem Argument --system) startet. Ich höre, was Sie darüber sagen, dass nicht pro Benutzersitzung gestartet wird, aber warum habe ich dann zwei dbus-daemon-Prozesse (tatsächlich drei, aber der dritte sieht weniger interessant aus)? Einer sieht aus wie der, der von dieser Init-Datei gestartet wurde, der andere hat Argument - Sitzung (unter anderen Argumenten) anstelle von Argument
Croad Langshan
1
Das ist spezifisch für Ihr Setup. Ihre Frage laut Kommentar 5: Welches Programm startet dbus-daemon? Weitere Informationen zum Starten des Nachrichtenbusses pro Sitzung finden Sie hier .
Goran Miskovic
1
Hallo schkovich. Dieser Kommentar sollte Dobey helfen, der sich nicht sicher zu sein schien, ob mein "Wie hätte ich das für mich selbst beantworten können" zwei weitere Fragen waren und nicht wie es eine Einladung / Erinnerung war, "einem Mann das Fischen beizubringen". Wenn Sie sich die ursprüngliche Frage ansehen, werden Sie genauer sehen, worum es geht: explizite Sitzung, nicht System. Übrigens, danke für Ihre Antwort: Ich habe sie gerne als nützliche Information bewertet, auch wenn ich meine Frage nicht direkt beantwortet habe.
Croad Langshan
1
Das Wichtigste ist, dass Sie die Antwort auf Ihre Frage erhalten haben und dass jeder von uns ein bisschen mehr über Ubuntu gelernt hat. :)
Goran Miskovic
-1

Ich werde mit Dobey nicht einverstanden sein. Am besten lernen Sie, wie Sie es selbst finden.

Listen Sie alle Prozesse und ihre PID-Baumstruktur auf:

pstree
init─┬─ModemManager───2*[{ModemManager}]
     ├─NetworkManager─┬─2*[dhclient]
     │                ├─dnsmasq
     │                └─3*[{NetworkManager}]
     ├─accounts-daemon───2*[{accounts-daemon}]
     ├─acpid
     ├─avahi-daemon───avahi-daemon
     ├─bluetoothd
     ├─colord───2*[{colord}]
     ├─cron
     ├─cups-browsed
     ├─cupsd
     ├─dbus-daemon
....

Also wird dbus-daemon von gestartet init. Beachten Sie jedoch, dass mehr als ein dbus-Daemon ausgeführt wird.

manos@box:~$ ps aux | grep dbus-daemon
message+   845  0.0  0.0  40668  2620 ?        Ss   10:48   0:03 dbus-daemon --system --fork
manos     2480  0.0  0.0  40248  2428 ?        Ss   10:48   0:01 dbus-daemon --fork --session --address=unix:abstract=/tmp/dbus-o3GMKn9JC1
manos     2569  0.0  0.0  39248  2004 ?        S    10:48   0:00 /bin/dbus-daemon --config-file=/etc/at-spi2/accessibility.conf --nofork --print-address 3

Es werden nämlich (mindestens) zwei Instanzen von dbus-daemon ausgeführt. Einer wird von init gestartet und ist systemweit und der andere wird für den Benutzer gestartet, wenn er sich angemeldet hat. Wenn Sie die vollständige PID-Baumstruktur (mit pstree) betrachten, können Sie visuell genau feststellen, welcher Prozess die zweite Instanz gestartet hat.

Pithikos
quelle
1
Prozesse, deren übergeordnetes Element beendet wurde, werden vom Kernel auf init zurückgesetzt. Kinder von init werden also normalerweise nicht direkt durch diesen Prozess gestartet. In diesem Fall ist dbus-daemon nicht - siehe Dobeys Antwort
Croad Langshan
@CroadLangshan hmm hat nicht darüber nachgedacht. Vielen Dank für die Eingabe
Pithikos