Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No such interface “org.freedesktop.portal.Camera” on object at path /org/freedesktop/portal/desktop #1040

Closed
WhyNotHugo opened this issue Jun 20, 2023 · 6 comments

Comments

@WhyNotHugo
Copy link
Contributor

I'm testing the camera portal with this xdg-camera.py snippet, but it's failing with error:

> python xdp-camera.py
request token: u1, path: /org/freedesktop/portal/desktop/request/1_45/u1
Traceback (most recent call last):
  File "/home/hugo/src/gitlab.gnome.org/snippets/762/xdp-camera.py", line 76, in <module>
    camera_call(portal.AccessCamera, on_access_camera_response)
  File "/home/hugo/src/gitlab.gnome.org/snippets/762/xdp-camera.py", line 48, in camera_call
    return method(*(args + (options, )),
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/dbus/proxies.py", line 72, in __call__
    return self._proxy_method(*args, **keywords)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/dbus/proxies.py", line 141, in __call__
    return self._connection.call_blocking(self._named_service,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/dbus/connection.py", line 634, in call_blocking
    reply_message = self.send_message_with_reply_and_block(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Camera” on object at path /org/freedesktop/portal/desktop

Inspecting with d-feet reveals that indeed, this interface is not exposed by the portal:

image

The portal logs don't reveal anything relevant (e.g.: no mention of Camera at all):

XDP: load portals from /usr/share/xdg-desktop-portal/portals
XDP: loading /usr/share/xdg-desktop-portal/portals/gtk.portal
XDP: portal implementation for gnome
XDP: portal implementation supports org.freedesktop.impl.portal.FileChooser
XDP: portal implementation supports org.freedesktop.impl.portal.AppChooser
XDP: portal implementation supports org.freedesktop.impl.portal.Print
XDP: portal implementation supports org.freedesktop.impl.portal.Screenshot
XDP: portal implementation supports org.freedesktop.impl.portal.Notification
XDP: portal implementation supports org.freedesktop.impl.portal.Inhibit
XDP: portal implementation supports org.freedesktop.impl.portal.Access
XDP: portal implementation supports org.freedesktop.impl.portal.Account
XDP: portal implementation supports org.freedesktop.impl.portal.Email
XDP: portal implementation supports org.freedesktop.impl.portal.DynamicLauncher
XDP: portal implementation supports org.freedesktop.impl.portal.ScreenCast
XDP: portal implementation supports org.freedesktop.impl.portal.RemoteDesktop
XDP: portal implementation supports org.freedesktop.impl.portal.Lockdown
XDP: portal implementation supports org.freedesktop.impl.portal.Background
XDP: portal implementation supports org.freedesktop.impl.portal.Settings
XDP: portal implementation supports org.freedesktop.impl.portal.Wallpaper
XDP: loading /usr/share/xdg-desktop-portal/portals/wlr.portal
XDP: portal implementation for wlroots, sway, Wayfire, river, phosh, Hyprland
XDP: portal implementation supports org.freedesktop.impl.portal.Screenshot
XDP: portal implementation supports org.freedesktop.impl.portal.ScreenCast
XDP: loading /usr/share/xdg-desktop-portal/portals/darkman.portal
XDP: portal implementation for sway
XDP: portal implementation supports org.freedesktop.impl.portal.Settings
XDP: Creating dummy proxy for org.freedesktop.impl.portal.Lockdown on org.freedesktop.impl.portal.desktop.gtk
XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.Lockdown: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: providing portal org.freedesktop.portal.MemoryMonitor
XDP: providing portal org.freedesktop.portal.PowerProfileMonitor
XDP: providing portal org.freedesktop.portal.NetworkMonitor
XDP: providing portal org.freedesktop.portal.ProxyResolver
XDP: providing portal org.freedesktop.portal.Trash
XDP: providing portal org.freedesktop.portal.GameMode

(/usr/libexec/xdg-desktop-portal:17281): xdg-desktop-portal-WARNING **: 02:06:26.444: Failed to load RealtimeKit property: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.RealtimeKit1 was not provided by any .service files

(/usr/libexec/xdg-desktop-portal:17281): xdg-desktop-portal-WARNING **: 02:06:26.444: Failed to load RealtimeKit property: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.RealtimeKit1 was not provided by any .service files

(/usr/libexec/xdg-desktop-portal:17281): xdg-desktop-portal-WARNING **: 02:06:26.444: Failed to load RealtimeKit property: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.RealtimeKit1 was not provided by any .service files
XDP: providing portal org.freedesktop.portal.Realtime
XDP: Using darkman.portal for org.freedesktop.impl.portal.Settings
XDP: Using gtk.portal for org.freedesktop.impl.portal.Settings

(/usr/libexec/xdg-desktop-portal:17281): xdg-desktop-portal-WARNING **: 02:06:26.450: Failed to create settings proxy: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: providing portal org.freedesktop.portal.Settings
XDP: Creating dummy proxy for org.freedesktop.impl.portal.FileChooser on org.freedesktop.impl.portal.desktop.gtk
XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.FileChooser: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: Creating dummy proxy for org.freedesktop.impl.portal.AppChooser on org.freedesktop.impl.portal.desktop.gtk
XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.AppChooser: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: Creating dummy proxy for org.freedesktop.impl.portal.Print on org.freedesktop.impl.portal.desktop.gtk
XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.Print: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: Creating dummy proxy for org.freedesktop.impl.portal.Notification on org.freedesktop.impl.portal.desktop.gtk
XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.Notification: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: Creating dummy proxy for org.freedesktop.impl.portal.Inhibit on org.freedesktop.impl.portal.desktop.gtk
XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.Inhibit: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: Creating dummy proxy for org.freedesktop.impl.portal.Access on org.freedesktop.impl.portal.desktop.gtk
XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.Access: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: Creating dummy proxy for org.freedesktop.impl.portal.Screenshot on org.freedesktop.impl.portal.desktop.wlr
XDP: Dummy proxy created
XDP: Using wlr.portal for org.freedesktop.impl.portal.Screenshot in sway
XDP: Creating dummy proxy for org.freedesktop.impl.portal.Background on org.freedesktop.impl.portal.desktop.gtk
XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.Background: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: Creating dummy proxy for org.freedesktop.impl.portal.Wallpaper on org.freedesktop.impl.portal.desktop.gtk
XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.Wallpaper: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: Creating dummy proxy for org.freedesktop.impl.portal.Account on org.freedesktop.impl.portal.desktop.gtk
XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.Account: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: Creating dummy proxy for org.freedesktop.impl.portal.Email on org.freedesktop.impl.portal.desktop.gtk
XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.Email: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: Creating dummy proxy for org.freedesktop.impl.portal.DynamicLauncher on org.freedesktop.impl.portal.desktop.gtk
XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.DynamicLauncher: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: Creating dummy proxy for org.freedesktop.impl.portal.ScreenCast on org.freedesktop.impl.portal.desktop.wlr
XDP: Dummy proxy created
XDP: Using wlr.portal for org.freedesktop.impl.portal.ScreenCast in sway
XDP: providing portal org.freedesktop.portal.ScreenCast
XDP: Creating dummy proxy for org.freedesktop.impl.portal.RemoteDesktop on org.freedesktop.impl.portal.desktop.gtk
XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.RemoteDesktop: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1
XDP: org.freedesktop.portal.Desktop acquired

I'm using xdg-desktop-portal-1.16.0-r2 from Alpine Edge repositories on x86_64.

@smcv
Copy link
Collaborator

smcv commented Jun 20, 2023

XDP: Failed to create dummy fallback proxy on org.freedesktop.impl.portal.desktop.gtk for org.freedesktop.impl.portal.Inhibit: Error calling StartServiceByName for org.freedesktop.impl.portal.desktop.gtk: Process org.freedesktop.impl.portal.desktop.gtk exited with status 1

Your xdg-desktop-portal-gtk installation appears to be broken. Please check your system log (systemd journal or syslog) or consult your distribution's support channels.

The Camera portal is one of several that require the Access backend, and gtk.portal appears to be the only implementation of Access that you have; so if that's broken, then Camera, Location, Screenshot, Background and Wallpaper are also not going to work.

@WhyNotHugo
Copy link
Contributor Author

I'm not using xdg-desktop-portal-gtk; I'm not using GNOME. I don't think the installation is broken, it's merely not running.

I guess that I'm going to need to write a desktop-agnostic Access portal to use this feature reliably?

@WhyNotHugo
Copy link
Contributor Author

I tried running xdg-desktop-portal-gtk (which prompted me for permission and indicated that I need to use the GNOME settings program to change this in future), however the script failed. I think this error is entirely unrelated?

> python xdp-camera.py
request token: u1, path: /org/freedesktop/portal/desktop/request/1_119/u1
playing
X connection to :0 broken (explicit kill or server shutdown).

@WhyNotHugo
Copy link
Contributor Author

Screenshot requires the access portal but Screencast does not.

Is this because Screencast is subject to the compositor-specific prompt anyway?

@WhyNotHugo
Copy link
Contributor Author

xdg-desktop-portal-gtk only worked the first time. Successive attempts no longer work. There's no error output now, and xdg-desktop-portal merely prints:

XDP: Camera: sending response 0

Given the error output, I'm fairly certain that the issue is now on the xdp-camera.py side, and the screencasting is now being allowed implicitly and with no access prompt.

To understand what going on a bit better, I tried writing my own access portal (this will also be useful in future). It is effectively being used by xdg-desktop-portal:

XDP: Creating dummy proxy for org.freedesktop.impl.portal.Access on org.freedesktop.impl.portal.desktop.way-access
XDP: Dummy proxy created
XDP: Using way-access.portal for org.freedesktop.impl.portal.Access in sway

But it's not being called at all.

As a side note, the documentation does not describe what AccessDialog should return. Any hints on what the return value should be?

@WhyNotHugo
Copy link
Contributor Author

Okay, so looks like the xdg-desktop-portal saves the response into Flatpak's xdg-permission-store (even though Flatpak is not involved in any way here).

The store is in ~/.local/share/flatpak/db/devices. After deleting it and trying again, the xdg-desktop-portal does prompt the access portal.

Access is granted, but the same script crashes again. It seems that there is another issue that causes the script to crash.

I'm going to close this since the response above has answered my original question --
I'll open separate tickets for the follow-up issues (mostly, around the access portal).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants