emersion / xdg-desktop-portal-wlr

xdg-desktop-portal backend for wlroots
MIT License
591 stars 56 forks source link

Get current screensharing state #201

Closed feschber closed 2 years ago

feschber commented 2 years ago

Is there a way to get the current screen sharing state? Gnome shows a handy little icon that indicates when the screen is currently shared. I would like to show this in my statusbar as well.

I guess I can listen for dbus events somehow, but I'm not really sure what to look for exactly

$ dbus-monitor --profile
#type   timestamp   serial  sender  destination path    interface   member
#                   in_reply_to
sig 1651007492.428999   2   org.freedesktop.DBus    :1.518  /org/freedesktop/DBus   org.freedesktop.DBus    NameAcquired
sig 1651007492.429033   4   org.freedesktop.DBus    :1.518  /org/freedesktop/DBus   org.freedesktop.DBus    NameLost
mc  1651007496.600031   76  :1.300  org.freedesktop.portal.Desktop  /org/freedesktop/portal/desktop/session/1_300/webrtc_session471601143   org.freedesktop.portal.Session  Close
mc  1651007496.600335   77  :1.300  org.freedesktop.DBus    /org/freedesktop/DBus   org.freedesktop.DBus    RemoveMatch
mr  1651007496.600385   53  org.freedesktop.DBus    :1.300  77
mc  1651007496.600485   78  :1.300  org.freedesktop.DBus    /org/freedesktop/DBus   org.freedesktop.DBus    RemoveMatch
mr  1651007496.600505   54  org.freedesktop.DBus    :1.300  78
mc  1651007496.600521   79  :1.300  org.freedesktop.DBus    /org/freedesktop/DBus   org.freedesktop.DBus    RemoveMatch
mr  1651007496.600541   55  org.freedesktop.DBus    :1.300  79
mc  1651007496.601280   519 :1.82   :1.89   /org/freedesktop/portal/desktop/session/1_300/webrtc_session471601143   org.freedesktop.impl.portal.Session Close
mr  1651007496.601582   52  :1.89   :1.82   519
err 1651007496.601631   53  :1.89   :1.82   519
mc  1651007496.603275   520 :1.82   org.freedesktop.DBus    /org/freedesktop/DBus   org.freedesktop.DBus    RemoveMatch
mr  1651007496.603313   227 org.freedesktop.DBus    :1.82   520
mc  1651007496.603334   521 :1.82   org.freedesktop.DBus    /org/freedesktop/DBus   org.freedesktop.DBus    RemoveMatch
mr  1651007496.603361   228 org.freedesktop.DBus    :1.82   521
mr  1651007496.603379   522 :1.82   :1.300  76
mc  1651007496.611961   6   :1.511  org.freedesktop.DBus    /org/freedesktop/DBus   org.freedesktop.DBus    RemoveMatch
mr  1651007496.612003   7   org.freedesktop.DBus    :1.511  6
sig 1651007496.612716   5   org.freedesktop.DBus    :1.511  /org/freedesktop/DBus   org.freedesktop.DBus    NameLost
sig 1651007496.612767   415 org.freedesktop.DBus    <none>  /org/freedesktop/DBus   org.freedesktop.DBus    NameOwnerChanged
mc  1651007502.183105   6   :1.512  org.freedesktop.DBus    /org/freedesktop/DBus   org.freedesktop.DBus    RemoveMatch
mr  1651007502.183171   7   org.freedesktop.DBus    :1.512  6
sig 1651007502.184468   6   org.freedesktop.DBus    :1.512  /org/freedesktop/DBus   org.freedesktop.DBus    NameLost
sig 1651007502.184522   416 org.freedesktop.DBus    <none>  /org/freedesktop/DBus   org.freedesktop.DBus    NameOwnerChanged
mc  1651007502.220317   287 :1.307  org.freedesktop.DBus    /org/freedesktop/DBus   org.freedesktop.DBus    RequestName
mr  1651007502.220358   103 org.freedesktop.DBus    :1.307  287
sig 1651007502.221210   288 :1.307  <none>  /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties PropertiesChanged
columbarius commented 2 years ago

You can configure exec_before and exec_after in your config file to run any command when the first screencast session is started and when the last one is closed. You could write a 0 or 1 into a file or do sth. more fancy. If you create sth. fancy for waybar, please share it ;).

feschber commented 2 years ago

You can configure exec_before and exec_after in your config file to run any command when the first screencast session is started and when the last one is closed. You could write a 0 or 1 into a file or do sth. more fancy. If you create sth. fancy for waybar, please share it ;).

Ah thats exactly what I need. Didnt know there is a manpage, sorry.

emersion commented 2 years ago

The PipeWire IPC also allows one to monitor active streams. See e.g. pw-dump/pw-mon.