#include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QTextStream err(stderr); if (argc != 3) { err << "usage: " << argv[0] << " OUTPUT_NAME OUTPUT_FILE\n"; return 64; } const QString outputName = QString::fromLocal8Bit(argv[1]); const QString outputPath = QString::fromLocal8Bit(argv[2]); QFile file(outputPath); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { err << "failed to open output file: " << file.errorString() << "\n"; return 1; } QDBusInterface iface( QStringLiteral("org.kde.KWin"), QStringLiteral("/org/kde/KWin/ScreenShot2"), QStringLiteral("org.kde.KWin.ScreenShot2"), QDBusConnection::sessionBus()); if (!iface.isValid()) { err << "failed to connect to KWin ScreenShot2: " << iface.lastError().message() << "\n"; return 1; } QVariantMap options; QDBusUnixFileDescriptor fd(file.handle()); QDBusReply reply = iface.call( QStringLiteral("CaptureScreen"), outputName, options, QVariant::fromValue(fd)); file.close(); if (!reply.isValid()) { err << "CaptureScreen failed for " << outputName << ": " << reply.error().name() << ": " << reply.error().message() << "\n"; return 1; } return 0; }