Checking whether Gnome screensaver currently active

Robert Nichols rnicholsNOSPAM at comcast.net
Wed Jan 19 05:34:20 UTC 2011


On 01/18/2011 10:22 PM, Rick Sewill wrote:
> On Tuesday, January 18, 2011 08:52:57 pm Robert Nichols wrote:
>> On 01/18/2011 12:28 PM, Rick Sewill wrote:
>>> 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.
>>
>> Look again at the script you posted and explain where it does anything but
>> set and test for non-null an internal shell variable that has no special
>> meaning to the shell itself.  Had you in some manner exported that variable
>> so that gnome-screensaver-command could see it, then I would have more
>> reason to believe you.
>
> I stand corrected.
>
>   I ran a test without DBUS_SESSION_BUS_ADDRESS set.
> Only the export DISPLAY=:0.0 seems to be needed.

One possible point of confusion is whether the shell is invoked with
a DBUS_SESSION_BUS_ADDRESS already in its environment.  If that were
true, you might need to change or unset that variable, and the change
_would_ automatically be exported.  But that variable is not present
in the environment of a cron job, so you would need to export it
explicitly to place it in the environment of a child process.

-- 
Bob Nichols     "NOSPAM" is really part of my email address.
                 Do NOT delete it.



More information about the users mailing list