/*! \brief Initializes socket for receiving * * @retval TRUE Socket initialization was successful * @retval FALSE Socket initialization failed */ bool QNodeReceiver::socketReady() { //display error message and return early if socket creation failed if (!socketCreation()) { display(ERROR, QString("Socket creation failed!")); return false; } //display error message and return early if socket option setting failed if (!socketOption()) { display(ERROR, QString("Socket option setting failed!")); return false; } //display error message and return early if socket binding failed if (!socketBinding()) { display(ERROR, QString("Socket binding failed!")); return false; } return true; }
xt::Process::Process(const westring &xbmcTestBase, const westring &tempFileName) : m_pid(0) { std::stringstream socketOptionStream; socketOptionStream << "--socket="; socketOptionStream << tempFileName.c_str(); std::string socketOption(socketOptionStream.str()); std::stringstream modulesOptionStream; modulesOptionStream << "--modules="; modulesOptionStream << xbmcTestBase.c_str(); modulesOptionStream << "xbmc/windowing/tests/wayland/xbmc-wayland-test-extension.so"; std::string modulesOption(modulesOptionStream.str()); std::string program(FindBinaryFromPATH("weston")); const char *options[] = { program.c_str(), "--backend=headless-backend.so", modulesOption.c_str(), socketOption.c_str(), NULL }; m_pid = fork(); switch (m_pid) { case 0: Child(program.c_str(), const_cast <char * const *>(options)); case -1: ForkError(); default: Parent(); } }
int main(int argc, char **argv) { if (mlockall(MCL_CURRENT | MCL_FUTURE) != 0) { fmt::print("Could not lock memory pages.\n"); } else { fmt::print(stderr, "Succesfully locked memory pages.\n"); } sched_param schedParam; memset(&schedParam, 0, sizeof(schedParam)); schedParam.sched_priority = 10; if (sched_setscheduler(0, SCHED_FIFO | SCHED_RESET_ON_FORK, &schedParam) != -1) { fmt::print("Succesfully changed the process scheduler to SCHED_FIFO.\n"); } else { fmt::print(stderr, "Could not change the process scheduler: {}.\n", strerror(errno)); } setenv("QT_MESSAGE_PATTERN", "[%{if-debug}D%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif} %{appname}" " - %{file}:%{line}] == %{message}", 0); QCoreApplication app(argc, argv); app.setApplicationName(QStringLiteral("Orbital")); app.setApplicationVersion(QStringLiteral("0.1")); QCommandLineParser parser; parser.setApplicationDescription(QStringLiteral("Orbital compositor")); parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption socketOption({ QStringLiteral("S"), QStringLiteral("socket") }, QStringLiteral("Socket name")); parser.addOption(socketOption); QCommandLineOption backendOption({ QStringLiteral("B"), QStringLiteral("backend") }, QStringLiteral("Backend plugin"), QStringLiteral("name")); parser.addOption(backendOption); parser.process(app); Orbital::StringView backendKey; QByteArray opt; if (parser.isSet(backendOption)) { opt = parser.value(backendOption).toUtf8(); backendKey = opt; } else if (getenv("WAYLAND_DISPLAY")) { backendKey = "wayland-backend"; } else if (getenv("DISPLAY")) { backendKey = "x11-backend"; } else { backendKey = "drm-backend"; } Orbital::BackendFactory::searchPlugins(); Orbital::Backend *backend = Orbital::BackendFactory::createBackend(backendKey); if (!backend) { return 1; } Orbital::Compositor compositor(backend); if (!compositor.init("")) { return 1; } wl_display_run(compositor.display()); return 0; }
int main(int argc, char *argv[]) { // Disable ptrace except for gdb disablePtrace(); // Setup the environment setupEnvironment(); QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // Application QApplication app(argc, argv); app.setApplicationName(QLatin1String("Papyros Shell")); app.setApplicationVersion(QLatin1String(PAPYROS_SHELL_VERSION_STRING)); app.setOrganizationName(QLatin1String("Ppayros")); app.setOrganizationDomain(QLatin1String("papyros.io")); app.setFallbackSessionManagementEnabled(false); app.setQuitOnLastWindowClosed(false); // Command line parser QCommandLineParser parser; parser.setApplicationDescription(TR("Wayland compositor for the Papyros desktop environment")); parser.addHelpOption(); parser.addVersionOption(); // Wayland socket QCommandLineOption socketOption(QStringLiteral("wayland-socket-name"), TR("Wayland socket"), TR("name")); parser.addOption(socketOption); // Nested mode QCommandLineOption nestedOption( QStringList() << QStringLiteral("n") << QStringLiteral("nested"), TR("Nest into a compositor that supports _wl_fullscreen_shell")); parser.addOption(nestedOption); // Fake screen configuration QCommandLineOption fakeScreenOption(QStringLiteral("fake-screen"), TR("Use fake screen configuration"), TR("filename")); parser.addOption(fakeScreenOption); #if DEVELOPMENT_BUILD // Load shell from an arbitrary path QCommandLineOption qmlOption(QStringLiteral("qml"), QStringLiteral("Load a shell main QML file"), QStringLiteral("filename")); parser.addOption(qmlOption); #endif // Parse command line parser.process(app); // Restart with D-Bus session if necessary if (qEnvironmentVariableIsEmpty("DBUS_SESSION_BUS_ADDRESS")) { qCritical("No D-Bus session bus available, please run Hawaii with dbus-launch."); return 1; } // Arguments bool nested = parser.isSet(nestedOption); QString socket = parser.value(socketOption); QString fakeScreenData = parser.value(fakeScreenOption); // Nested mode requires running from Wayland and a socket name // and fake screen data cannot be used if (nested) { if (!QGuiApplication::platformName().startsWith(QStringLiteral("greenisland"))) { qCritical("Nested mode only make sense when running on Wayland.\n" "Please pass the \"-platform greenisland\" argument."); return 1; } if (socket.isEmpty()) { qCritical("Nested mode requires you to specify a socket name.\n" "Please specify it with the \"--wayland-socket-name\" argument."); return 1; } if (!fakeScreenData.isEmpty()) { qCritical("Fake screen configuration cannot be used when nested"); return 1; } } // Print version information qDebug("== Papyros Shell v%s (Green Island v%s) ==\n" "** http://papyros.io\n" "** Bug reports to: https://github.com/papyros/papyros-shell/issues\n" "** Build: %s-%s", PAPYROS_SHELL_VERSION_STRING, GREENISLAND_VERSION_STRING, PAPYROS_SHELL_VERSION_STRING, GIT_REV); // Application Application *papyros = new Application(); papyros->setScreenConfiguration(fakeScreenData); // Create the compositor and run bool urlAlreadySet = false; #if DEVELOPMENT_BUILD if (parser.isSet(qmlOption)) { urlAlreadySet = true; papyros->setUrl(QUrl::fromLocalFile(parser.value(qmlOption))); } #endif if (!urlAlreadySet) papyros->setUrl(QUrl(QStringLiteral("qrc:/Compositor.qml"))); QCoreApplication::postEvent(papyros, new StartupEvent()); return app.exec(); }