Cómo finalizar correctamente una sesión de KDE desde el shell sin privilegios de root

17

Estoy accediendo a la máquina (OpenSuse 11 con KDE) a través de NX.

No puedo usar los atajos Alt-Ctrl-Del, ya que es capturado por mi sistema. El botón de cierre de sesión normal simplemente finaliza la sesión de NX sin finalizar la sesión de KDE. No puedo llamar kdm restartya que no tengo privilegios de root.

Otras conjeturas salvajes como logouty exittampoco funcionan, la primera quejándose de no estar en un shell de inicio de sesión y la segunda simplemente cerrando la consola.

Mi shell-fu es débil, por lo que cualquier ayuda es apreciada.

kostja
fuente
@ MartinSchröder - ah, buena captura - es esencialmente la misma pregunta. Pero la respuesta de Paul a esta pregunta es más exhaustiva que la respuesta de Gilles a la otra.
kostja

Respuestas:

30

Puede enviar un comando de cierre de sesión a través de dbus a KDE, que debería (si puede) terminar la sesión.

qdbus org.kde.ksmserver /KSMServer logout 0 0 0

dbus es un sistema de mensajería que permite que las aplicaciones se comuniquen entre sí, y el qdbuscomando es una utilidad para enviar mensajes dbus a las aplicaciones.

Las aplicaciones se registran con dbus, y la ksmserverparte de KDE es el administrador de sesión: se encarga de quién inició sesión.

Entonces enviamos un mensaje ksmservera la /KSMServerinterfaz y le pedimos que cierre la sesión. El mensaje que enviamos es exactamente el mismo mensaje que se envía a KSM cuando hace clic en el icono de cerrar sesión en su escritorio.

Los tres ceros son parámetros y pueden alterar el tipo de cierre de sesión que estamos haciendo:

Primer parámetro:

  • 0 = No espere confirmación
  • 1 = Esperar confirmación (con un tiempo de espera de 30 segundos)

Segundo parámetro:

  • -1 = Solicitud de acción, por defecto al apagado (solo tiene sentido cuando se espera confirmación).
  • 0 = Cerrar sesión
  • 1 = reiniciar
  • 2 = apagado

El tercer parámetro es el parámetro "cuándo", pero no está claro cuál es su impacto.

Pablo
fuente
Asegúrese de establecer la DISPLAYvariable de entorno (lo más probable :0) antes de ejecutar este comando, de lo contrario, se quejará.
palswim
3

La respuesta aceptada es una solución específica para KDE5, un enfoque más genérico sería

loginctl list-sessions
loginctl terminate-session <id>

o

loginctl terminate-user <username>

Fuente

Hay más comandos posibles:

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
fuente