kiran-session-manager/0000-fix-xinit-Fix-the-dbus-error-when-the-session-manage-918aca5b.patch
kylinsecos_admin b6d803a18a update to 2.2.1
Signed-off-by: kylinsecos_admin <gitee@kylinos.com.cn>
2022-01-22 10:55:54 +08:00

188 lines
6.6 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From 918aca5b83c170b229c6449c27556ad70743f728 Mon Sep 17 00:00:00 2001
From: tangjie02 <tangjie02@kylinsec.com.cn>
Date: Tue, 4 Jan 2022 17:11:31 +0800
Subject: [PATCH] fix(xinit): Fix the dbus error when the session manager is
launched by xinit
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 修复通过xinit启动会话管理时程序会卡在获取DisplayManager的dbus句柄的地方
Signed-off-by: tangjie02 <tangjie02@kylinsec.com.cn>
---
src/client/client-manager.cpp | 2 ++
src/main.cpp | 35 +++++++++++++++++++++++++++++++++
src/presence.cpp | 2 ++
src/session-manager.cpp | 2 ++
src/ui/ui-manager.cpp | 2 ++
src/wrapper/display-manager.cpp | 24 +++++++++++++++-------
src/xsmp-server.cpp | 2 ++
7 files changed, 62 insertions(+), 7 deletions(-)
diff --git a/src/client/client-manager.cpp b/src/client/client-manager.cpp
index be9a75b..e5c4df2 100644
--- a/src/client/client-manager.cpp
+++ b/src/client/client-manager.cpp
@@ -61,6 +61,8 @@ std::shared_ptr<ClientDBus> ClientManager::get_client_by_dbus_name(const std::st
void ClientManager::init()
{
+ KLOG_PROFILE("");
+
this->dbus_daemon_proxy_->signal_signal().connect(sigc::mem_fun(this, &ClientManager::on_dbus_daemon_signal_cb));
this->xsmp_server_->signal_new_client_connected().connect(sigc::mem_fun(this, &ClientManager::on_new_xsmp_client_connected_cb));
this->xsmp_server_->signal_ice_conn_status_changed().connect(sigc::mem_fun(this, &ClientManager::on_ice_conn_status_changed_cb));
diff --git a/src/main.cpp b/src/main.cpp
index a5571e9..005ae0e 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -12,6 +12,7 @@
* Author: tangjie02 <tangjie02@kylinos.com.cn>
*/
+#include <glib.h>
#include <glib/gi18n.h>
#include <gtkmm.h>
#include "src/app/app-manager.h"
@@ -24,6 +25,37 @@
using namespace Kiran::Daemon;
+#define DBUS_LAUNCH_COMMAND "dbus-launch"
+
+bool start_dbus_session(int argc, char **argv)
+{
+ int i = 0;
+
+ RETURN_VAL_IF_TRUE(!Glib::getenv("DBUS_SESSION_BUS_ADDRESS").empty(), true);
+ RETURN_VAL_IF_TRUE(Kiran::StrUtils::startswith(argv[0], DBUS_LAUNCH_COMMAND), true);
+
+ char **new_argv = (char **)g_malloc(argc + 3 * sizeof(*argv));
+
+ new_argv[0] = (char *)DBUS_LAUNCH_COMMAND;
+ new_argv[1] = (char *)"--exit-with-session";
+
+ for (i = 0; i < argc; i++)
+ {
+ new_argv[i + 2] = argv[i];
+ }
+
+ new_argv[i + 2] = NULL;
+
+ KLOG_DEBUG("Start session manager by dbus-launch.");
+
+ if (!execvp(DBUS_LAUNCH_COMMAND, new_argv))
+ {
+ KLOG_WARNING("No session bus and could not exec dbus-launch: %s", g_strerror(errno));
+ return false;
+ }
+ return true;
+}
+
void init_env()
{
using param_type = std::map<Glib::ustring, Glib::ustring>;
@@ -72,6 +104,9 @@ int main(int argc, char *argv[])
{
klog_gtk3_init(std::string(), "kylinsec-session", PROJECT_NAME, PROJECT_NAME);
+ // 这里做一个兼容性处理当会话dbus-daemon没有启动时一般不会出现由会话管理进行拉起
+ start_dbus_session(argc, argv);
+
setlocale(LC_ALL, "");
bindtextdomain(PROJECT_NAME, KSM_LOCALEDIR);
bind_textdomain_codeset(PROJECT_NAME, "UTF-8");
diff --git a/src/presence.cpp b/src/presence.cpp
index 3a898d3..d0fb4ff 100644
--- a/src/presence.cpp
+++ b/src/presence.cpp
@@ -32,6 +32,8 @@ Presence::Presence() : enabled_idle_timeout_(true),
void Presence::init()
{
+ KLOG_PROFILE("");
+
this->idle_timeout_ = this->settings_->get_int(KSM_SCHEMA_KEY_IDLE_DELAY);
this->idle_xlarm_.init();
this->update_idle_xlarm();
diff --git a/src/session-manager.cpp b/src/session-manager.cpp
index d0cb95b..892c8b9 100644
--- a/src/session-manager.cpp
+++ b/src/session-manager.cpp
@@ -281,6 +281,8 @@ void SessionManager::CanReboot(MethodInvocation &invocation)
void SessionManager::init()
{
+ KLOG_PROFILE("");
+
this->power_.init();
this->presence_->init();
diff --git a/src/ui/ui-manager.cpp b/src/ui/ui-manager.cpp
index 3c5d9d2..046da89 100644
--- a/src/ui/ui-manager.cpp
+++ b/src/ui/ui-manager.cpp
@@ -32,6 +32,8 @@ void UIManager::global_init()
void UIManager::init()
{
+ KLOG_PROFILE("");
+
auto resource = Gio::Resource::create_from_file(KSM_INSTALL_DATADIR "/kiran-session-manager.gresource");
resource->register_global();
diff --git a/src/wrapper/display-manager.cpp b/src/wrapper/display-manager.cpp
index 558773d..4097056 100644
--- a/src/wrapper/display-manager.cpp
+++ b/src/wrapper/display-manager.cpp
@@ -23,15 +23,25 @@ namespace Daemon
DisplayManager::DisplayManager()
{
+ auto xdg_seat_object_path = Glib::getenv("XDG_SEAT_PATH");
+
try
{
- auto xdg_seat_object_path = Glib::getenv("XDG_SEAT_PATH");
- this->display_proxy_ = Gio::DBus::Proxy::create_for_bus_sync(Gio::DBus::BUS_TYPE_SYSTEM,
- DISPLAY_MANAGER_DBUS_NAME,
- xdg_seat_object_path,
- DISPLAY_MANAGER_DBUS_INTERFACE,
- Glib::RefPtr<Gio::DBus::InterfaceInfo>(),
- Gio::DBus::PROXY_FLAGS_DO_NOT_AUTO_START);
+ if (xdg_seat_object_path.empty())
+ {
+ KLOG_WARNING("Not found XDG_SEAT_PATH.");
+ }
+ else
+ {
+ KLOG_DEBUG("XDG_SEAT_PATH: %s.", xdg_seat_object_path.c_str());
+
+ this->display_proxy_ = Gio::DBus::Proxy::create_for_bus_sync(Gio::DBus::BUS_TYPE_SYSTEM,
+ DISPLAY_MANAGER_DBUS_NAME,
+ xdg_seat_object_path,
+ DISPLAY_MANAGER_DBUS_INTERFACE,
+ Glib::RefPtr<Gio::DBus::InterfaceInfo>(),
+ Gio::DBus::PROXY_FLAGS_DO_NOT_AUTO_START);
+ }
}
catch (const Glib::Error& e)
{
diff --git a/src/xsmp-server.cpp b/src/xsmp-server.cpp
index 35a6629..75e4173 100644
--- a/src/xsmp-server.cpp
+++ b/src/xsmp-server.cpp
@@ -58,6 +58,8 @@ void XsmpServer::global_init()
void XsmpServer::init()
{
+ KLOG_PROFILE("");
+
char error_string[BUFSIZ];
SmsSetErrorHandler(&XsmpServer::on_sms_error_handler_cb);
IceSetIOErrorHandler(&XsmpServer::on_ice_io_error_handler_cb);
--
2.27.0