43

I chose an Openbox DE at the time of login and the system took ages to load the DE. So I switched to CLI (Ctrl+Alt+F1) and rebooted my system (but I wanted to logout from the GUI and not restart the whole system).

My question is, can I issue some command at CLI to log me out from the GUI so that I can select different DE. (I don't want to restart my system every-time DE hangs.)


$ DISPLAY=:0 gnome-session-quit --force

** (gnome-session-quit:3144): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files
45

To end all user processes and be sent back to the login screen, you can use:

kill -9 -1

Don't run it as root though, for reasons discussed here.

  • 3
    Works great, but why? In special, why does LightDM restart after you killed everything except for init? – Ciro Santilli 新疆改造中心法轮功六四事件 Jul 7 '13 at 12:41
  • 1
    @CiroSantilli巴拿馬文件六四事件法轮功 Because it forcefully KILLS (9) EVERYTHING it is allowed to. Which means every process owned by you. Using SIGKILL to terminate apps is absolutely not recommendable! Use SIGTERM (15). Applications can react upon this signal and do cleanup. – ManuelSchneid3r May 4 '16 at 14:27
22

This can be done using the gnome-session-quit command. It needs the --force option to suppress the confirmation dialog that would appear without it.

Unlike applications run from an X terminal emulator, ending a session from a TTY requires you to append the DISPLAY variable to indicate which X display is running the session. Hence:

DISPLAY=:0 gnome-session-quit --force

assuming that you are running GNOME on :0, which is the case in normal situations.

  • In Ubuntu 12.04LTS running GNOME, the command

    "DISPLAY=:0 gnome-session-quit --logout --no-prompt" 
    

    works. The "--force" argument doesn't exist in the current update level]

  • thanks, I ran the command but i got some error. I have edited my post to include the error. Please share if I have done something wrong. – Ankit Aug 26 '12 at 17:11
  • My bad, I did not notice you mentioned you are using openbox. Unfortunately, this command will only work with a standard Ubuntu installation (Unity/GNOME). As an alternative, you can completely shut down the GUI and thereby your session by running sudo service lightdm stop. edit: what desktop environment are you using? Openbox is just a window manager. – Cumulus007 Aug 26 '12 at 18:36
  • i am trying to use kde/openbox or gnome/openbox. – Ankit Aug 27 '12 at 2:42
  • Doesn't work if your terminal isn't part of the same dbus session as the gnome-session. How do you get into another dbus session? – Zan Lynx Feb 14 '13 at 21:19
  • Is this the command that gets executed when clicking "Log Out..." via the GUI ? – Dor Sep 29 '16 at 23:23
7

Please follow takkat's suggestion. The standard is Ctrl+Alt+Backspace.

You can also run:

$ sudo service lightdm restart
  • 1
    gdm has been replaced by lightdm. Also, ctrl+alt+backspace is disabled by default. – Cumulus007 Aug 26 '12 at 18:36
  • @Cumulus007 Thanks, answer updated. I know ctrl+alt+backspace is disabled by default, never understood why, but I am aware of it. I am just informing the OP what the standard, most commonly used key combination is. I find it is best to stick to the standards since it makes it easier to troubleshoot. – terdon Aug 26 '12 at 18:39
  • 1
    Stopping lightdm will mean there's no login prompt afterwards, so he won't get the chance to log in to a different environment. – poolie Aug 27 '12 at 0:57
  • 1
    Fair enough @poolie, answer updated. – terdon Aug 27 '12 at 1:00
4

Another way,

sudo pkill -u NameOftheUser

or

sudo pkill x

which kill all users.

  • That's a bit harsh, don't you think? – acolyte Apr 3 '13 at 17:08
  • Harsh? It's extremely silly. – HörmannHH Jan 6 '14 at 15:36
2

The real problem is that the DBUS session variables must be set and match the session you're trying to control.

I've created this script that does set the DBUS session variables from the gnome-session environment in case you want to logout other users/sessions:

How to restart Gnome-Shell from command line?

function logout() {
    local USERNAME
    export USERNAMES=( ) 
    while [ -n "$1" ]; do case "$1" in
        -* ) break ;;
        *) USERNAMES+=( "$1" ); shift ;;
    esac; done

    for USERNAME in "${USERNAMES[@]}"; do
        local SESSION_PID=$(pgrep -fu "$USERNAME" gnome-session|head -1)
        if [ -n "$SESSION_PID" ]; then
            (
                sudo -u "$USERNAME" cat "/proc/$SESSION_PID/environ" | xargs -0 -n 1 echo export
                echo "gnome-session-quit --logout $@"
            ) | sudo -u "$USERNAME" sh -;
        fi
    done
}
  • Using --logout --no-prompt or --force instead of just --logout is a better idea, otherwise a logout prompt will be shown. – gioele Apr 8 '18 at 17:21
1

If you are in a xubuntu session or similar, must use xfce4-session-logout insted of gnome session commands, that's why you see warnings

1

This is what works best for me (with xfce, lightdm and ssh):

$ DISPLAY=:0.0 xfce4-session-logout --logout

Or

$ sudo service lightdm restart
0

As an alternative, you can terminate user sessions using the following, works well to log out users except for the root user- when doing maintenance for example.

loginctl | egrep -v "root|SESSION|listed" | awk '{print $1}' | xargs loginctl terminate-session
-2

You can use the command killall gnome-session to log out. This will work for all GNOME sessions and if I remember correctly all GNOME-related ones. It takes you right back to LightDM so you can select a new DE or a new user. :)

  • 2
    Not the best way to logout. Check askubuntu.com/questions/69114/… – jokerdino Aug 26 '12 at 14:25
  • Never seen this option before. I probably should start using this. I'm supposing that killall gnome-session is a forceful way to close it. – Ryan McClure Aug 26 '12 at 14:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.