Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I need to run some program within crontab , but how can the program know about dbus session id ? it's only available for programs launched by session managers.

share|improve this question

3 Answers 3

up vote 10 down vote accepted

The problem is somewhat similar to accessing the X display and finding the location of the X cookie file. (Also, refer to these questions if you want to launch a GUI program on the user's display.)

Dbus stores the session address in a file in ~/.dbus/session-bus. The name of the file is $machine_id-$display_number, where $machine_id is a randomly generated number stored in /var/lib/dbus/machine-id and $display_number is the X display number ($DISPLAY is :$display_number or :$display_number.$screen_number). The file in ~/.dbus/session-bus is parseable by a shell and contains definitions for DBUS_SESSION_BUS_ADDRESS and 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

Beware that there's no guarantee that the dbus daemon is still available. The user may have logged out.

An alternative method is to find the PID of a process in the desktop session, and obtain the dbus address from its environment.

export $(</proc/$pid/environ tr \\0 \\n | grep -E '^DBUS_SESSION_BUS_ADDRESS=')

If the crontab is running as root and you want to communicate with the session of whatever user is logged in on the console, see Can I launch a graphical program on another user's desktop as root?

share|improve this answer

I think if you know the pid of the gnome session manager, then you read the environment from /proc filesystem.

GNOME_SESSION_PID=<PID_OF_GNOME_SESSION> 
READ_SESSION_COOKIE="$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$GNOME_SESSION_PID/environ|cut -d= -f2-)"

Use the SESSION id then, with other programs like notify-send or dbus* tools.

Cheers.

share|improve this answer
    
very impressive , actually i'm running KDE4 , so i looked for plasma-desktop instead, thanks ! –  warl0ck Jan 7 '12 at 0:13
ps -u yourlogin e | grep -Eo 'dbus-daemon.*address=unix:abstract=/tmp/dbus-[A-Za-z0-9]{10}' | tail -c35
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.