Як правильно закінчити сеанс KDE з оболонки без привілеїв root


17

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

Я не можу використовувати комбінації клавіш Alt-Ctrl-Del, оскільки вона захоплена моєю системою. Звичайна кнопка відходу просто закінчує сеанс NX, не закінчуючи сеанс KDE. Я не можу зателефонувати, kdm restartоскільки у мене немає привілеїв root.

Інші дикі здогадки люблять logoutі exitне працюють, перший скаржиться на відсутність оболонки для входу, а другий лише закриває консоль.

Мій шлаг-фу слабкий, тому будь-яка допомога цінується.



@ 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.