Checking whether Gnome screensaver currently active
Rick Sewill
rsewill at gmail.com
Tue Jan 18 18:28:05 UTC 2011
On Tuesday, January 18, 2011 09:00:22 am Robert Nichols wrote:
> On 01/18/2011 01:34 AM, Rick Sewill wrote:
> > On Monday, January 17, 2011 10:57:00 pm Robert Nichols wrote:
> >> On 01/17/2011 09:57 PM, Rick Sewill wrote:
> >>> Question please:
> >>>
> >>> Can you use
> >>> gnome-screensaver-command -q
> >>>
> >>> man gnome-screensaver-command
> >>>
> >>> I'm currently trying out KDE so I don't know
> >>> what is returned by the above command for the
> >>> various gnome-screensaver states.
> >>
> >> As I said in my original message, when run from a cron job that fails:
> >> ** Message: Failed to connect to the D-BUS daemon:
> >> /bin/dbus-launch terminated abnormally with the following error:
> >> Autolaunch error: X11 initialization failed.
> >>
> >> And yes, I did try it with "DISPLAY=:0.0" in the environment.
> >
> > You have a good puzzle!
> >
> > I read all the responses for the problem,
> > http://www.mail-archive.com/debian-kde@lists.debian.org/msg30421.html
> >
> > I tried to condense their answer to the following...please give it a try:
> >
> > I created a file, ${HOME}/bin/testscreensaver
> > ===== Please begin contents of file testscreensaver with following line
> > #!/bin/bash
> >
> > # We must set the DISPLAY variable so dbus is happy.
> >
> > export DISPLAY=:0.0
> >
> > # We must find the DBUS_SESSION_BUS_ADDRESS so dbus is happy.
> >
> > for pid in $(pgrep -u $USER)
> > do
> >
> > declare DBUS_SESSION_BUS_ADDRESS=$(cat /proc/${pid}/environ | \
> >
> > tr '\0' '\n' | grep "DBUS_SESSION_BUS_ADDRESS=")
> >
> > # I looked for the first DBUS_SESSION_BUS_ADDRESS found.
> >
> > [ -z "${DBUS_SESSION_BUS_ADDRESS}" ] || break
> >
> > done
> >
> >
> > # Strip off the DBUS_SESSION_BUS_ADDRESS= string at the beginning.
> > DBUS_SESSION_BUS_ADDRESS="${DBUS_SESSION_BUS_ADDRESS:25}"
> >
> > # I echo it for debugging purposes...you probably don't want to echo it.
> > echo "Set bus address to<${DBUS_SESSION_BUS_ADDRESS}>"
> >
> > # If I have a string, I call the gnome-screensaver-command
> > [ -z "${DBUS_SESSION_BUS_ADDRESS}" ] || gnome-screensaver-command -q
> >
> > ===== Please end file testscreensaver with previous line
>
> Hmmm, in that script you're not doing anything with
> DBUS_SESSION_BUS_ADDRESS beyond testing for non-null (it's not exported),
> so "Set bus address to" is a misnomer. "Found bus address" might be more
> to the point. It does test whether this user currently has a session,
> which is useful.
>
Please see "man dbus-daemon".
I believe the variable, DBUS_SESSION_BUS_ADDRESS, must be set for desktop
applications to find the per-session daemon to have interprocess communication
amongst themselves. From "man dbus-daemon", I am referring to the per-session
daemon, not the systemwide daemon.
I believe gnome-screensaver-command attempts to use the per-session daemon to
talk to gnome-screensaver.
I made the assumption all $USER processes, where DBUS_SESSION_BUS_ADDRESS was
defined, would be the same, and associated with the current, user session.
This is remiss of me.
To be pedantic, one may need to check the /proc/${PID}/environ special file for
the value of the DISPLAY variable, to insure the session isn't a remote ssh or
other remote session. I didn't insure /proc/${PID}/environ was readable.
Perhaps others can suggest other and better checks.
There are other interesting things mentioned in "man dbus-daemon".
Please see the DEBUGGING section. It speaks of running dbus-monitor.
It speaks of running a test copy of dbus-daemon, and how to communicate with
the test copy by setting the DBUS_SESSION_BUS_ADDRESS for the applications you
want to test with the test copy of the dbus-daemon.
> OK, now it looks like I might just have been hit by a glitch. On another
> machine, I found that
>
> DISPLAY=:0.0 gnome-screensaver-command -q
>
> works just fine in a cron job. After rebooting the desktop system where
> I'd been having the problem (system had been up 22 days with me poking
> around trying things), it works fine there, too.
>
I am surprised, given what I read about DBUS_SESSION_BUS_ADDRESS,
this would work without DBUS_SESSION_BUS_ADDRESS being set.
What version of software are these other machines using?
> So, all I can say is, "Sorry for contributing to the noise here." At least
> I've learned a few things from some of the responses. Thanks, all.
It is not noise. Your question is a good one. I enjoyed looking up things.
If my answer is wrong, I hope others gently correct me.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
Url : http://lists.fedoraproject.org/pipermail/users/attachments/20110118/40de381b/attachment.bin
More information about the users
mailing list