Как правильно завершить сеанс KDE из оболочки без прав root

17

Я получаю доступ к машине (OpenSuse 11 с KDE) через NX.

Я не могу использовать сочетания клавиш Alt-Ctrl-Del, поскольку они записаны моей системой. Обычная кнопка выхода из системы просто завершает сеанс NX, не завершая сеанс KDE. Я не могу позвонить, так kdm restartкак у меня нет привилегий root.

Другие дикие предположения, как logoutи exitне работают, первый, жалующийся на отсутствие входа в оболочку, а второй просто закрывающий консоль.

Моя ракушка слаба, поэтому любая помощь приветствуется.

Kostja
источник
@ MartinSchröder - ах, хороший улов - это по сути тот же вопрос. Но ответ Павла на этот вопрос является более исчерпывающим, чем ответ Жиля на другой.
Костя

Ответы:

30

Вы можете отправить команду выхода через 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 = выключение

Третий параметр - это параметр «когда», но не ясно, каково его влияние.

Павел
источник
Обязательно установите DISPLAYпеременную среды (скорее всего :0) перед запуском этой команды, иначе она будет жаловаться.
Palswim
3

Принятый ответ является решением, специфичным для KDE5, более общий подход будет

loginctl list-sessions
loginctl terminate-session <id>

или

loginctl terminate-user <username>

Источник

Есть более возможные команды:

Session Commands:
  list-sessions            List sessions
  session-status [ID...]   Show session status
  show-session [ID...]     Show properties of sessions or the manager
  activate [ID]            Activate a session
  lock-session [ID...]     Screen lock one or more sessions
  unlock-session [ID...]   Screen unlock one or more sessions
  lock-sessions            Screen lock all current sessions
  unlock-sessions          Screen unlock all current sessions
  terminate-session ID...  Terminate one or more sessions
  kill-session ID...       Send signal to processes of a session

User Commands:
  list-users               List users
  user-status [USER...]    Show user status
  show-user [USER...]      Show properties of users or the manager
  enable-linger [USER...]  Enable linger state of one or more users
  disable-linger [USER...] Disable linger state of one or more users
  terminate-user USER...   Terminate all sessions of one or more users
  kill-user USER...        Send signal to processes of a user

Seat Commands:
  list-seats               List seats
  seat-status [NAME...]    Show seat status
  show-seat [NAME...]      Show properties of seats or the manager
  attach NAME DEVICE...    Attach one or more devices to a seat
  flush-devices            Flush all device associations
  terminate-seat NAME...   Terminate all sessions on one or more seats
noraj
источник