kiran-session-manager/0000-feature-dbus-Add-dbus-method-Setenv-9796c3d4.patch
kylinsecos_admin 3ed06645db Fix the problem caused by the boot sequence of mate-settings-daemon and kiran-session-daemon.
Signed-off-by: kylinsecos_admin <gitee@kylinos.com.cn>
2022-03-08 17:56:38 +08:00

164 lines
6.4 KiB
Diff

From 9796c3d4224e7c5b15edca3ca0b158451809b973 Mon Sep 17 00:00:00 2001
From: kylinsecos_admin <gitee@kylinos.com.cn>
Date: Thu, 3 Mar 2022 14:46:14 +0800
Subject: [PATCH] feature(dbus): Add dbus method Setenv
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 添加dbus函数Setenv
Signed-off-by: kylinsecos_admin <gitee@kylinos.com.cn>
---
src/org.gnome.SessionManager.xml | 10 ++++++++++
src/session-manager.cpp | 12 ++++++++++++
src/session-manager.h | 3 +++
src/utils.cpp | 18 +++++++++---------
src/utils.h | 6 +++---
5 files changed, 37 insertions(+), 12 deletions(-)
diff --git a/src/org.gnome.SessionManager.xml b/src/org.gnome.SessionManager.xml
index 60827ce..9b4cec5 100644
--- a/src/org.gnome.SessionManager.xml
+++ b/src/org.gnome.SessionManager.xml
@@ -116,6 +116,16 @@
<description>Whether the user can reboot.</description>
</method>
+ <method name="Setenv">
+ <arg name="name" type="s" direction="in">
+ <summary>The environment variable name</summary>
+ </arg>
+ <arg name="value" type="s" direction="in">
+ <summary>The environment variable value</summary>
+ </arg>
+ <description>Adds the variable name to the application launch environment with the specified value. May only be used during the Session Manager initialization phase.</description>
+ </method>
+
<signal name="InhibitorAdded">
<arg name="cookie" type="u">
<summary>The inhibitor cookie.</summary>
diff --git a/src/session-manager.cpp b/src/session-manager.cpp
index 5047c59..7f57255 100644
--- a/src/session-manager.cpp
+++ b/src/session-manager.cpp
@@ -279,6 +279,18 @@ void SessionManager::CanReboot(MethodInvocation &invocation)
invocation.ret(this->power_.can_power_action(PowerAction::POWER_ACTION_REBOOT));
}
+void SessionManager::Setenv(const Glib::ustring &name, const Glib::ustring &value, MethodInvocation &invocation)
+{
+ KLOG_PROFILE("name: %s, value: %s.", name.c_str(), value.c_str());
+
+ if (this->current_phase_ > KSMPhase::KSM_PHASE_INITIALIZATION)
+ {
+ DBUS_ERROR_REPLY_AND_RET(KSMErrorCode::ERROR_MANAGER_PHASE_INVALID);
+ }
+ Utils::setenv(name, value);
+ invocation.ret();
+}
+
void SessionManager::init()
{
KLOG_PROFILE("");
diff --git a/src/session-manager.h b/src/session-manager.h
index c8cf075..9d26c57 100644
--- a/src/session-manager.h
+++ b/src/session-manager.h
@@ -88,6 +88,9 @@ protected:
virtual void RequestReboot(MethodInvocation &invocation);
virtual void CanReboot(MethodInvocation &invocation);
+ // 添加会话程序的环境变量
+ virtual void Setenv(const Glib::ustring &name, const Glib::ustring &value, MethodInvocation &invocation);
+
private:
void init();
diff --git a/src/utils.cpp b/src/utils.cpp
index e70cc98..0cbe117 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -87,13 +87,13 @@ std::vector<std::string> Utils::get_autostart_dirs()
return dirs;
}
-void Utils::setenv(const std::string &key, const std::string &value)
+void Utils::setenv(const std::string &name, const std::string &value)
{
- KLOG_DEBUG("key: %s, value: %s.", key.c_str(), value.c_str());
+ KLOG_DEBUG("name: %s, value: %s.", name.c_str(), value.c_str());
- Glib::setenv(key, value);
- Utils::setenv_to_dbus(key, value);
- Utils::setenv_to_systemd(key, value);
+ Glib::setenv(name, value);
+ Utils::setenv_to_dbus(name, value);
+ Utils::setenv_to_systemd(name, value);
}
void Utils::setenvs(const std::map<Glib::ustring, Glib::ustring> &envs)
@@ -196,7 +196,7 @@ std::string Utils::phase_enum2str(KSMPhase phase)
return std::string();
}
-void Utils::setenv_to_dbus(const std::string &key, const std::string &value)
+void Utils::setenv_to_dbus(const std::string &name, const std::string &value)
{
try
{
@@ -206,7 +206,7 @@ void Utils::setenv_to_dbus(const std::string &key, const std::string &value)
DAEMON_DBUS_INTERFACE_NAME);
using param_type = std::tuple<std::map<Glib::ustring, Glib::ustring>>;
- std::map<Glib::ustring, Glib::ustring> envs{{key, value}};
+ std::map<Glib::ustring, Glib::ustring> envs{{name, value}};
auto parameter = Glib::Variant<param_type>::create(std::make_tuple(envs));
daemon_proxy->call_sync("UpdateActivationEnvironment", parameter);
}
@@ -217,7 +217,7 @@ void Utils::setenv_to_dbus(const std::string &key, const std::string &value)
}
}
-void Utils::setenv_to_systemd(const std::string &key, const std::string &value)
+void Utils::setenv_to_systemd(const std::string &name, const std::string &value)
{
try
{
@@ -226,7 +226,7 @@ void Utils::setenv_to_systemd(const std::string &key, const std::string &value)
SYSTEMD_DBUS_OBJECT_PATH,
SYSTEMD_DBUS_INTERFACE_NAME);
using param_type = std::tuple<std::vector<Glib::ustring>>;
- auto env = fmt::format("{0}={1}", key, value);
+ auto env = fmt::format("{0}={1}", name, value);
auto parameter = Glib::Variant<param_type>::create(std::make_tuple(std::vector<Glib::ustring>{env}));
systemd_proxy->call_sync("SetEnvironment", parameter);
}
diff --git a/src/utils.h b/src/utils.h
index 2501734..d51de5b 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -32,7 +32,7 @@ public:
// 获取自动启动程序的目录列表
static std::vector<std::string> get_autostart_dirs();
// 设置环境变量
- static void setenv(const std::string &key, const std::string &value);
+ static void setenv(const std::string &name, const std::string &value);
static void setenvs(const std::map<Glib::ustring, Glib::ustring> &envs);
// 生成cookie
static uint32_t generate_cookie();
@@ -41,8 +41,8 @@ public:
static std::string phase_enum2str(KSMPhase phase);
private:
- static void setenv_to_dbus(const std::string &key, const std::string &value);
- static void setenv_to_systemd(const std::string &key, const std::string &value);
+ static void setenv_to_dbus(const std::string &name, const std::string &value);
+ static void setenv_to_systemd(const std::string &name, const std::string &value);
private:
static Glib::Rand rand_;
--
2.27.0