Help with screenshot API.

Vlad Zahorodnii vlad.zahorodnii at kde.org
Fri Oct 4 14:43:22 BST 2024


Also note that CaptureWorkspace returns a dictionary. The API can be 
found here 
https://invent.kde.org/plasma/kwin/-/blob/master/src/plugins/screenshot/org.kde.KWin.ScreenShot2.xml?ref_type=heads#L350

On 10/4/24 4:40 PM, Vlad Zahorodnii wrote:
> Hi,
>
> CaptureWorkspace was introduced in Plasma 6.0. Are you running Plasma 6?
>
> Vlad
>
> On 10/3/24 6:51 PM, rahul vadhyar wrote:
>> Hi,
>> I am Rahul, a college student from India.
>> I am working on a project where I need to take screenshots of the 
>> screen for further processing. From looking online and looking at the 
>> spectacle code, I have figured out that you need to install the 
>> application in /usr/bin and that the .desktop file must contain the 
>> following
>>
>> X-DBUS-StartupType=Unique
>> X-DBUS-ServiceName=org.kde.koolintelligence
>> X-KDE-DBUS-Restricted-Interfaces=org.kde.KWin.ScreenShot2
>> X-KDE-Wayland-Interfaces=org_kde_plasma_window_management,zkde_screencast_unstable_v1 
>>
>>
>> However, even after doing this, I am getting the following error
>>
>> Screenshot failed: No such method 'CaptureWorkspace' in interface 'org.
>> kde.KWin.ScreenShot2' at object path '/org/kde/KWin/ScreenShot2' 
>> (signature '')
>>
>> My code is attached below for reference. Please let me know how I can 
>> resolve this issue.
>>
>> #include <QtDBus/QtDBus>
>> #include <QDBusUnixFileDescriptor>
>> #include "logging.hpp"
>> #include <fcntl.h>
>> static const QString screenShotService = 
>> QString().fromStdString("org.kde.KWin.ScreenShot2");
>> static const QString screenShotObjectPath = 
>> QString().fromStdString("/org/kde/KWin/ScreenShot2");
>> static const QString screenShotInterface = 
>> QString().fromStdString("org.kde.KWin.ScreenShot2");
>> void takeScreenshotKwin(std::string path) {
>>     // Connect to KWin's screenshot service
>>     QDBusInterface interface(
>>         screenShotService,
>>         screenShotObjectPath,
>>         screenShotInterface,
>>         QDBusConnection::sessionBus() // Bus connection
>>     );
>>
>>     if (!interface.isValid()) {
>>         LOG_ERROR("takeScreenshotKwin", "Failed to connect to KWin 
>> Screenshot interface");
>>         return;
>>     }
>>
>>     QDBusReply<QString> reply = 
>> interface.call(QString().fromStdString("CaptureWorkspace"));
>>
>>     if (reply.isValid()) {
>>         LOG_INFO("takeScreenshotKwin", "Screenshot saved at: " + path);
>>     } else {
>>         LOG_ERROR("takeScreenshotKwin", "Screenshot failed: " + 
>> reply.error().message().toStdString());
>>     }
>> }


More information about the kwin mailing list