Вопрос или проблема
Я подключаюсь к машине (OpenSuse 11 с KDE) через NX.
Я не могу использовать сочетания клавиш Alt-Ctrl-Del, так как они перехватываются моей системой. Обычная кнопка выхода из системы просто завершает сессию NX, не завершая сессию KDE. Я не могу вызвать kdm restart
, так как у меня нет прав администратора.
Другие догадки, такие как logout
и exit
, тоже не работают, первое ругается на то, что это не логин оболочки, а второе просто закрывает консоль.
Моя работа с оболочками слабая, поэтому любая помощь приветствуется.
Вы можете отправить команду выхода из системы через dbus в KDE, которая должна (если это возможно) завершить сессию.
qdbus org.kde.ksmserver /KSMServer logout 0 0 0
dbus – это система обмена сообщениями, которая позволяет приложениям общаться друг с другом, а команда qdbus
является утилитой для отправки сообщений dbus приложениям.
Приложения регистрируются в dbus, а часть ksmserver
KDE – это менеджер сессий, который следит за тем, кто вошел в систему.
Таким образом, мы отправляем сообщение ksmserver
в интерфейс /KSMServer
и говорим ему выйти из системы. Сообщение, которое мы отправляем, это то же самое сообщение, которое отправляется KSM, когда вы нажимаете на значок выхода из системы на рабочем столе.
Три нуля – это параметры, которые могут изменить тип выхода из системы:
Первый параметр:
- 0 = Не ждать подтверждения
- 1 = Ждать подтверждения (с тайм-аутом в 30 секунд)
Второй параметр:
- -1 = Запросить действие, по умолчанию завершение работы (имеет смысл только при ожидании подтверждения).
- 0 = Выйти из системы
- 1 = Перезагрузка
- 2 = Завершение работы
Третий параметр – это параметр “когда”, но неясно, каково его влияние.
Принятое решение специфично для KDE5, более общий подход будет таким
loginctl list-sessions
loginctl terminate-session <id>
или
loginctl terminate-user <username>
Существует больше возможных команд:
Команды сессии:
list-sessions Список сессий
session-status [ID...] Показать статус сессии
show-session [ID...] Показать свойства сессий или менеджера
activate [ID] Активировать сессию
lock-session [ID...] Заблокировать одну или несколько сессий
unlock-session [ID...] Разблокировать одну или несколько сессий
lock-sessions Заблокировать все текущие сессии
unlock-sessions Разблокировать все текущие сессии
terminate-session ID... Завершить одну или несколько сессий
kill-session ID... Отправить сигнал процессам сессии
Команды пользователя:
list-users Список пользователей
user-status [USER...] Показать статус пользователя
show-user [USER...] Показать свойства пользователей или менеджера
enable-linger [USER...] Включить состояние переноса для одного или нескольких пользователей
disable-linger [USER...] Выключить состояние переноса для одного или нескольких пользователей
terminate-user USER... Завершить все сессии одного или нескольких пользователей
kill-user USER... Отправить сигнал процессам пользователя
Команды места:
list-seats Список мест
seat-status [NAME...] Показать статус места
show-seat [NAME...] Показать свойства мест или менеджера
attach NAME DEVICE... Присоединить одно или несколько устройств к месту
flush-devices Очистить все ассоциации устройств
terminate-seat NAME... Завершить все сессии на одном или нескольких местах
qdbus org.kde.Shutdown /Shutdown logout
Ответ или решение
Завершение сессии KDE из командной строки без административных привилегий может стать достаточно сложной задачей, особенно в ситуациях, когда доступ через стандартные графические интерфейсы ограничен, как в случае использования NX на OpenSuse 11 с KDE. Ввиду необходимости сохранения сессии NX, но завершения сессии KDE, потребуется применение некоторых альтернативных методов и команд, доступных в системе без использования привилегий суперпользователя.
Теория
KDE, как графическая среда рабочего стола в Linux, базируется на различных модулях и сервисах, одним из которых является ksmserver
— управляющий сессиями. Он отвечает за управление состоянием пользователей внутри сессии, предоставляя функции завершения, перезагрузки и выключения. D-Bus — это межпроцессная коммуникационная система, которая позволяет приложениям общаться друг с другом посредством отправки и получения сообщений. Команда qdbus
в данном контексте является инструментом для взаимодействия с D-Bus, позволяя отправлять сообщения объектам, зарегистрированным в системе, таким как ksmserver
.
Пример
Чтобы завершить сессию KDE, можно воспользоваться командой qdbus
для отправки сообщения ksmserver
о завершении сессии. Пример использования этой команды:
qdbus org.kde.ksmserver /KSMServer logout 0 0 0
Данная команда отправляет сообщение на объект ksmserver
через D-Bus. Параметры следующие:
- Первый параметр указывает на отсутствие необходимости подтверждения (
0
— без подтверждения). - Второй параметр определяет тип завершения (
0
— завершение сессии). - Третий параметр указывает на время выполнения действия (в большинстве случаев его влияние незначительно).
Применение
Если qdbus
по какой-либо причине недоступен, или существует необходимость применения более общего метода, можно рассмотреть использование утилиты loginctl
. Это представлено в следующем шаге:
- Сначала, идентифицируйте активные сессии пользователя:
loginctl list-sessions
- Затем завершите конкретную сессию, указав её идентификатор:
loginctl terminate-session <id>
Альтернативно, возможно завершить все сессии конкретного пользователя:
loginctl terminate-user <username>
Эти команды используют возможности
systemd
, что делает их пригодными для современных распределений, гдеsystemd
используется как система управления.
Заключение
Хотя завершение сессии KDE из командной строки без использования прав суперпользователя может быть не совсем очевидным, правильно выбрав подходящие инструменты и понимание контекста работы KDE и D-Bus, можно успешно выполнить эту задачу. комбинация использования qdbus
и loginctl
предлагает достаточно гибкости для большинства пользователей. Важно отметить, что при использовании этих методов можно избежать непроизвольного завершения других сессий или сервисов, что также снижает риск потери данных.
С практической точки зрения, такое понимание взаимодействия между различными компонентами системы KDE и методами управления сессиями позволяет уверенно решать задачи управления сессиями без непосредственного доступа к административным ресурсам.