Yanıtlar:
Sorun biraz benzer X'in ekranı erişen ve X'in çerez dosyasının konumunu bulmak . (Ayrıca, kullanıcının ekranında bir GUI programı başlatmak istiyorsanız bu sorulara bakın.)
Dbus, oturum adresini içindeki bir dosyada saklar ~/.dbus/session-bus
. Dosyasının adını $machine_id-$display_number
burada, $machine_id
rasgele oluşturulmuş bir numara olarak saklanır /var/lib/dbus/machine-id
ve $display_number
X ekran numarası (olup $DISPLAY
olan :$display_number
ya da :$display_number.$screen_number
). Dosya ~/.dbus/session-bus
bir kabuk tarafından ayrıştırılabilir ve tanımlarını içeren DBUS_SESSION_BUS_ADDRESS
ve DBUS_SESSION_BUS_PID
.
dbus_session_file=~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-0
if [ -e "$dbus_session_file" ]; then
. "$dbus_session_file"
export DBUS_SESSION_BUS_ADDRESS DBUS_SESSION_BUS_PID
dbus-send …
fi
Dbus arka plan programının hala kullanılabilir olduğuna dair bir garanti olmadığına dikkat edin. Kullanıcı oturumu kapatmış olabilir.
Alternatif bir yöntem, masaüstü oturumunda bir işlemin PID'sini bulmak ve ortamından dbus adresini elde etmektir.
export $(</proc/$pid/environ tr \\0 \\n | grep -E '^DBUS_SESSION_BUS_ADDRESS=')
Crontab kök olarak çalışıyorsa ve konsolda oturum açan kullanıcının oturumu ile iletişim kurmak istiyorsanız, bkz. Grafiksel bir programı başka bir kullanıcının masaüstünde root olarak başlatabilir miyim?
GNOME oturum yöneticisinin pid'ini biliyorsanız, ortamı /proc
dosya sisteminden okursunuz.
GNOME_SESSION_PID=<PID_OF_GNOME_SESSION>
READ_SESSION_COOKIE="$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$GNOME_SESSION_PID/environ|cut -d= -f2-)"
OTURUM kimliğini daha sonra bildir-gönder veya dbus * araçları gibi diğer programlarla kullanın.
Şerefe.
Vincenzo'nun cevabı hakkında yorum yapamam , ancak cevabının KDE4'te benim için en uygun olduğunu düşünüyorum.
Yine de komutu biraz değiştirmek zorunda kaldım. Benim için:
ps -u yourlogin e | grep -Eo 'dbus-daemon.*ADDRESS=unix:abstract=/tmp/dbus-[A-Za-z0-9]{10}' | tail -c35
Büyük ADDRESS
harflerle uyarı.
Evet DBus'un balta oturumu olmalıdır. Daha önceki yanıtlar gibi, 'DBUS_SESSION_BUS_ADDRESS' başlamadan önce bir değere sahip olmalıdır. Ancak, bu değeri oluşturmak için 'dbus-launch' kullanabilirsiniz. Aşağıdaki snippet, crontab adlı bir komut dosyasına konabilir.
if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
eval `dbus-launch --sh-syntax`
fi
echo "D-Bus daemon address is:"
echo "$DBUS_SESSION_BUS_ADDRESS"
# -E to export DBUS_SESSION_BUS_ADDRESS. Crucial to make DBUS work.
sudo -u <user> -E <program>
Bu çözümün bir dezavantajı, yazılımınızı durdurduktan sonra oturumun takılmaya başlamasıdır.
plasma-desktop
bunun yerine aradım , teşekkürler!