From 40e7e134d87727cb651e9d290a852bd9ef95b826 Mon Sep 17 00:00:00 2001 From: tangjie02 Date: Mon, 18 Jul 2022 16:20:26 +0800 Subject: [PATCH] fix(menu): Fix the switch user error by xdmcp logging. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复通过xdmcp远程登录后切换用户错误问题 Closes #57865 Signed-off-by: tangjie02 --- src/common/kiran-power.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/common/kiran-power.cpp b/src/common/kiran-power.cpp index c7f1011..9ef8a2c 100644 --- a/src/common/kiran-power.cpp +++ b/src/common/kiran-power.cpp @@ -68,11 +68,18 @@ KiranPower::KiranPower() SESSION_MANAGER_PATH, SESSION_MANAGER_INTERFACE); - // TODO: 这里直接选用seat0是有问题的,需要获取会话所在seat - this->seat_manager_proxy_ = Gio::DBus::Proxy::create_for_bus_sync(Gio::DBus::BUS_TYPE_SYSTEM, - DISPLAY_MANAGER_DBUS, - DISPLAY_MANAGER_SEAT_PATH, - DISPLAY_MANAGER_INTERFACE); + auto xdg_seat_object_path = Glib::getenv("XDG_SEAT_PATH"); + if (!xdg_seat_object_path.empty()) + { + this->seat_manager_proxy_ = Gio::DBus::Proxy::create_for_bus_sync(Gio::DBus::BUS_TYPE_SYSTEM, + DISPLAY_MANAGER_DBUS, + xdg_seat_object_path, + DISPLAY_MANAGER_INTERFACE); + } + else + { + KLOG_WARNING("Failed to get environment variable XDG_SEAT_PATH."); + } } catch (const Gio::DBus::Error &e) { @@ -359,6 +366,17 @@ bool KiranPower::can_logout() bool KiranPower::can_switch_user() { RETURN_VAL_IF_TRUE(this->settings_->get_boolean(STARTMENU_LOCKDOWN_KEY_DISABLE_USER_SWITCHING), false); + + try + { + Glib::VariantBase variant_value; + this->seat_manager_proxy_->get_cached_property(variant_value, "CanSwitch"); + return Glib::VariantBase::cast_dynamic>(variant_value).get(); + } + catch (const Glib::Error &e) + { + KLOG_WARNING("%s", e.what().c_str()); + } return true; } -- 2.33.0