Introduksjon til D-Bus
D-Bus er et meldingsbusssystem, en
enkel måte for applikasjoner å snakke med hverandre. D-Bus leverer både en systemnisse (for
hendelser som f.eks «ny
maskinvareenhet lagt til» eller «skriver kø endret») og
en per-bruker-pålogging-sesjon nisse (for generell IPC-behov blant
brukerapplikasjoner). Dessuten er meldingsbussen bygget på toppen
av et generelt rammeverk for en-til-en meldingsoverføring, som kan
brukes av to applikasjoner for å kommunisere direkte (uten å gå
gjennom meldingsbuss-demon).
Notat
Utviklingsversjoner av BLFS kan ikke bygge eller kjøre noen
pakker riktig hvis LFS eller avhengigheter har blitt oppdatert
siden den siste stabile versjonene av bøkene.
Pakkeinformasjon
D-Bus Avhengigheter
Anbefalt
Xorg Biblioteker (for dbus-launch programmet)
Valgfri
For testene: D-Bus Python-1.3.2, PyGObject-3.50.0, og Valgrind-3.24.0; for
dokumentasjon: Doxygen-1.13.2, xmlto-0.0.29,
Ducktype, og
Yelp Tools
Installasjon av D-Bus
Installer D-Bus ved å kjøre
følgende kommandoer (det kan være lurt å gå gjennom filen
meson_options.txt først og legge til eventuelle ekstra ønskede
alternativer til meson oppsettlinjen nedenfor):
mkdir build &&
cd build &&
meson setup --prefix=/usr \
--buildtype=release \
--wrap-mode=nofallback \
-D systemd=disabled \
.. &&
ninja
Se nedenfor for testinstruksjoner.
Nå, som root
bruker:
ninja install
Hvis du bruker en DESTDIR installasjon, dbus-daemon-launch-helper må
fikses etterpå. Utsted, som root
bruker:
chown -v root:messagebus /usr/libexec/dbus-daemon-launch-helper &&
chmod -v 4750 /usr/libexec/dbus-daemon-launch-helper
Hvis du fortsatt bygger systemet ditt i chroot eller du ikke har
startet nissen ennå, men du vil kompilere noen pakker som krever
D-Bus, generer D-Bus UUID for å unngå advarsler ved
kompilering av noen pakker med følgende kommando som root
bruker:
dbus-uuidgen --ensure
Hvis du bruker elogind-255.17, opprette en symbolkobling til
/var/lib/dbus/machine-id
filen:
ln -sfv /var/lib/dbus/machine-id /etc
Til slutt, fortsatt som root
bruker, gi nytt navn til dokumentasjonsmappen (det eksisterer bare
hvis de valgfrie avhengighetene er oppfylt for minst ett
dokumentasjonsformat) for å gjøre det versjonert:
if [ -e /usr/share/doc/dbus ]; then
rm -rf /usr/share/doc/dbus-1.16.0 &&
mv -v /usr/share/doc/dbus{,-1.16.0}
fi
Mange tester er deaktivert med mindre både D-Bus
Python-1.3.2 og PyGObject-3.50.0 har blitt installert. Det
må kjøres som en uprivilegert bruker fra en lokal økt med
bussadresse. For å kjøre standard tester utsted ninja test.
Hvis du vil kjøre enhetsregresjonstestene, krever meson
tilleggsparametere som viser tilleggsfunksjonalitet i binærfiler
som ikke er ment å brukes i en produksjonsbygning av D-Bus. Hvis du ønsker å kjøre testene, utsted
følgende kommandoer (for testene trenger du ikke å bygge
dokumenter):
meson configure -D asserts=true -D intrusive_tests=true &&
ninja test
Parameterforklaringer
--wrap-mode=nofallback
:
Denne bryteren forhindrer meson fra å bruke delprosjektets
tilbakefall for evt avhengighetserklæringer i byggefilene, og
forhindrer det å laste ned eventuell valgfrie avhengigheter som
ikke er installert på systemet.
-D systemd=disabled
: Ikke
installer systemd støttefiler selv om libsystemd
eksisterer (dvs. elogind-255.17
pakken er installert).
-D intrusive_tests=true
:
Bygger ekstra deler av koden for å støtte alle tester. Ikke bruk på
en produksjonsbygning.
-D asserts=true
: Gjør det
mulig å kjøre feilsøkingskode påstander for utsagn som normalt
antas å være sanne. Dette forhindrer advarsel om det '-D asserts=true
' på egen hånd er bare
nyttig for profilering og gir kanskje ikke sanne resultater for
alle tester, men legger til sin egen MERK at dette ikke skal brukes
i et produksjonsbygg.
Konfigurere D-Bus
Konfigurasjonsfiler
/etc/dbus-1/session.conf
,
/etc/dbus-1/system.conf
og
/etc/dbus-1/system.d/*
Konfigurasjonsinformasjon
Konfigurasjonsfilene oppført ovenfor bør sannsynligvis ikke bli
modifisert. Hvis det kreves endringer, bør du opprette
/etc/dbus-1/session-local.conf
og/eller /etc/dbus-1/system-local.conf
og lage
eventuelle ønskede endringer i disse filene.
Hvis noen pakker installerer en D-Bus .service
fil utenfor standard /usr/share/dbus-1/services
mappen, den mappen
skal legges til den lokale sesjonskonfigurasjonen. For eksempel,
/usr/local/share/dbus-1/services
kan legges til ved å utføre følgende kommandoer som root
bruker:
cat > /etc/dbus-1/session-local.conf << "EOF"
<!DOCTYPE busconfig PUBLIC
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<!-- Search for .service files in /usr/local -->
<servicedir>/usr/local/share/dbus-1/services</servicedir>
</busconfig>
EOF
D-Bus Øktnisse
For å starte dbus-daemon automatisk når
systemet startes på nytt, installer /etc/rc.d/init.d/dbus
oppstartsskript fra
blfs-bootscripts-20241209 pakken.
make install-dbus
Hvis dette er første gang D-Bus
installeres på systemet, og du ikke opererer i et chroot miljø,
kan du starte umiddelbart dbus-daemon uten å starte
systemet på nytt:
/etc/init.d/dbus start
Merk at dette oppstartsskriptet bare starter system-brede
D-Bus nissen. Hver bruker som
krever tilgang til D-Bus
tjenester må også kjøre en sesjonsnisse også. Det er mange
metoder du kan bruke for å starte en sesjonsnisse ved hjelp av
dbus-launch
kommandoen. Gjennomgå dbus-launch manualsiden for
detaljer om tilgjengelige parametere og alternativer. Her er noen
forslag og eksempler:
-
Legg til dbus-launch til linjen i
~/.xinitrc
filen som starter
det grafiske skrivebordsmiljøet.
-
Hvis du bruker gdm eller en annen
skjermbehandler som kaller ~/.xsession
filen, kan du legge til
dbus-launch
til linjen i din ~/.xsession
fil som starter det grafiske skrivebordsmiljøet. Syntaksen
vil være lik eksemplet i ~/.xinitrc
filen.
-
Eksemplene vist tidligere bruker dbus-launch for å
spesifisere et program som skal kjøres. Dette har fordelen
(når du også bruker --exit-with-x11
parameteren)
å stoppe sesjonsnissen når det angitte programmet stoppes.
Du kan også starte sesjonsnissen i systemet ditt eller
personlige oppstartsskript ved å legge til følgende linjer:
# Start the D-Bus session daemon
eval `dbus-launch`
export DBUS_SESSION_BUS_ADDRESS
This method will not stop the session daemon when you exit
your shell, therefore you should add the following line to
your ~/.bash_logout
file:
# Kill the D-Bus session daemon
kill $DBUS_SESSION_BUS_PID