You are not logged in.
Up until about a month ago I was able to successfully run the following command from cron:
pgrep -l xlock && $xfce4_session_logout --suspend
Now I get the following pop-up message each time it runs:
Received error while trying to log out, error was GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.xfce.SessionManager was not provided by any .service files
My xfce4-session version is 4.18.2.
Any idea what I need to change to get it working again?
It works when I test-run it from the command line, fwiw.
Last edited by UT_qx13s (2023-05-07 00:42:33)
Offline
Hello and welcome.
What does the variable $xfce4_session_logout contain?
Generally, cron doesn't know about your user session, and in this instance, it needs the dbus session bus address of your user session to run this command.
$ env | grep DBUS
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
Cron entry:
* * * * * DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus xfce4-session-logout --logout
Not sure how it worked before though, too many unknowns (distro, updates, etc)
Please remember to mark your thread [SOLVED] to make it easier for others to find
--- How To Ask For Help | FAQ | Developer Wiki | Community | Contribute ---
Offline
Hi ToZ,
What does the variable $xfce4_session_logout contain?
It's just a shell variable holding the absolute path to the executable.
Generally, cron doesn't know about your user session, and in this instance, it needs the dbus session bus address of your user session to run this command.
Makes sense. When I first wrote it, the job failed because DISPLAY wasn't defined.
My address appears set to a tmp file. Clearing tmp didn't fix it during my troubleshooting, which prompted me to post here for help. That's a hell of a GUID. Is that normal?
$ env | grep DBUS
DBUS_SESSION_BUS_ADDRESS=unix:path=/tmp/dbus-9ZyT0kppt5,guid=12bef731053d2ed3151c71006451aae5
Will try setting the address in cron. Thanks.
Not sure how it worked before though, too many unknowns (distro, updates, etc)
After some searching, it looks like it coincided with an xfce4-session upgrade from 4.18.0 to 4.18.2. The first error message it spat out was that my machine-id was corrupted (it was set to a series of j). Fixing that got me to the current error message.
Offline
Which distro are you using and is it systemd based? And how are you starting it (display manager or startx)?
dbus address on systemd changed a while back to use /run/user, but you need to run dbus-update-activation-environment during login.
Fixing that got me to the current error message.
Did you try changing your cron to reference this dbus session bus address?
Please remember to mark your thread [SOLVED] to make it easier for others to find
--- How To Ask For Help | FAQ | Developer Wiki | Community | Contribute ---
Offline
Which distro are you using and is it systemd based?
The Great and Wonderful FreeBSD. Not systemd based.
And how are you starting it (display manager or startx)?
I think it's started with this script:
$ cat .xsession
export LIBGL_DRI3_DISABLE=1
source /usr/local/etc/xdg/xfce4/xinitrc
dbus address on systemd changed a while back to use /run/user, but you need to run dbus-update-activation-environment during login.
The OS isn't systemd-based, but there also hasn't been a FreeBSD system update in awhile. The breakage did coincide with a large packages update on April 8th. That's the first time the job failed to suspend the system, and I found a stack of pop-ups with error messages.
Did you try changing your cron to reference this dbus session bus address?
Will try that tonight and let you know how it goes. Thanks again.
Offline
Did you try changing your cron to reference this dbus session bus address?
Okay, this worked. However, whenever I reboot the system, that address will change again. I currently have the cron job configure like so:
$ crontab -l | awk '/sus|sess/'
xfce4_session_logout=/home/UT_qx13s/.bin/xfce4-session-logout.cron
# suspend system after periodic scripts run iff session is locked
*/5 6 1 * * -n pgrep -q xlock && $xfce4_session_logout
*/5 5 2-31 * 6 -n pgrep -q xlock && $xfce4_session_logout
*/5 4 2-31 * 1-5,7 -n pgrep -q xlock && $xfce4_session_logout
And,
$ !cat
cat .bin/xfce4-session-logout.cron
#!/bin/sh
export DBUS_SESSION_BUS_ADDRESS=unix:path=/tmp/dbus-nwBNA8LmLz
export DISPLAY=:0.0
/usr/local/bin/xfce4-session-logout --suspend
Is there no automatic way to set that address anymore? Somehow it was being exported to the crontab prior to the package update, but now apparently doesn't.
Offline
However, whenever I reboot the system, that address will change again.
How about using procstat to pull out the current value. Something like:
procstat -e $(pgrep xfce4-session) | sed 's/ /\n/g' | grep DBUS
Please remember to mark your thread [SOLVED] to make it easier for others to find
--- How To Ask For Help | FAQ | Developer Wiki | Community | Contribute ---
Offline
How about using procstat to pull out the current value.
That works. Thank you for your help.
$ procstat -e $(pgrep xfce4-session) | sed -nr 's/.*(DBUS[^,]*).*/\1/p'
DBUS_SESSION_BUS_ADDRESS=unix:path=/tmp/dbus-nwBNA8LmLz
Last edited by UT_qx13s (2023-05-07 00:41:23)
Offline
[ Generated in 0.010 seconds, 7 queries executed - Memory usage: 569.35 KiB (Peak: 586.2 KiB) ]