dbus-monitor shows irrelevant lines

Jaakko Luttinen jaakko.luttinen at iki.fi
Sun Apr 5 10:22:50 UTC 2020


Hi all,

### Background

I'm trying to implement a very simple dbus listener. Whenever a 
particular dbus signal is received, a script/command should be executed. 
In particular, I'd like my own screenlocker to react to the dbus message 
from loginctl lock-session. If you have any suggestions, how to 
implement this, I'd be happy to hear. Maybe my approach is a bad one.


### Implementation

I wrote a test script that does

```
$ dbus-monitor --system --profile 
"interface=org.freedesktop.login1.Session,member=Lock" |
 >         while read -r line
 >         do
 >                 echo "Received the following signal:"
 >                 echo $line
 >         done
```

This solution was inspired by: 
https://askubuntu.com/questions/150790/how-do-i-run-a-script-on-a-dbus-signal

Now it just shows the signals it receives, but ultimately I would 
replace that echoing code with my actual screenlocking command.

I would then run this command as a script executed by a systemd service, 
I suppose.. Any better ideas?


### Problem

However, when I run this command, it immediately receives three signals:

```
dbus-monitor: unable to enable new-style monitoring: 
org.freedesktop.DBus.Error.AccessDenied: "Rejected send message, 1 
matched rules; type="method_call", sender=":1.277" (uid=1000 pid=27124 
comm="dbus-monitor --system --profile interface=org.free" 
label="kernel") interface="org.freedesktop.DBus.Monitoring" 
member="BecomeMonitor" error name="(unset)" requested_reply="0" 
destination="org.freedesktop.DBus" (bus)". Falling back to eavesdropping.
Received the following signal:
#type timestamp serial sender destination path interface member
Received the following signal:
# in_reply_to
Received the following signal:
sig 1586080954.876039 2 org.freedesktop.DBus :1.277 
/org/freedesktop/DBus org.freedesktop.DBus NameAcquired
```

These signals have nothing to do with the signals I told dbus-monitor to 
watch. So, why am I receiving them? How can I not receive them? If I 
would put actual screenlocking code inside that while loop, my screen 
would have been locked three times when I just start monitoring locking 
signals - that doesn't make sense. So, how can I make dbus-monitor to 
only show lines that I'm asking it to show?

Or if you have better solutions for the original goal in the first 
place, I'm eager to hear.

Best regards,
Jaakko


More information about the dbus mailing list