How can I logout from the GUI using CLI?
Solution 1
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.
Solution 2
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]
Solution 3
In modern systemd Linux distros, the answers are all a little too complicated.
The solution is one tool: loginctl
.
In a good shell you even have autocompletion, so make use of Tab to see the options and parameters and it is quite intuitive.
The command to search for is kill-session
.
If you tab, you'll notice each session has an ID, but in my case it also showed the username and TTY (that is the Ctrl+Alt+number you type) and the seat.
Here is how it looks to me, e.g.:
$ loginctl kill-session 10 10 -- 1000 rugk seat0 tty2
You can tab through the sessions to find the correct one.
Otherwise, if that does not work you can find the session ID by running loginctl list-sessions
or just loginctl
. You get something like this:
$ loginctl list-sessions SESSION UID USER SEAT TTY 10 1000 rugk seat0 tty2
I guess it's quite obvious the first column contains the session ID you need to pass to loginctl kill-session
.
This works very well if the GUI hangs and you need to force-kill it, which seems to be your use case.
If you want that to be explained in a more elaborate way here is how you can kill your own session if the GUI is not responding or you cannot use your keyboard.
Solution 4
Please follow takkat's suggestion. The standard is Ctrl+Alt+Backspace.
You can also run:
$ sudo service lightdm restart
Solution 5
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
Related videos on Youtube
Ankit
Linux user since December, 2010. Have worked on various linux distros like red-hat, CENTOS and Ubuntu-desktop. Believe me Ubuntu-d is the best i have used. Junior Java Developer
Updated on September 18, 2022Comments
-
Ankit over 1 year
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
-
jokerdino over 11 yearsNot the best way to logout. Check askubuntu.com/questions/69114/…
-
Thibault over 11 yearsNever seen this option before. I probably should start using this. I'm supposing that
killall gnome-session
is a forceful way to close it. -
Ankit over 11 yearsthanks, 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.
-
Admin over 11 yearsMy 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. -
Dolchio about 11 yearsDoesn'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?
-
acolyte about 11 yearsThat's a bit harsh, don't you think?
-
Ciro Santilli OurBigBook.com almost 11 yearsWorks great, but why? In special, why does LightDM restart after you killed everything except for init?
-
RichieHH over 10 yearsHarsh? It's extremely silly.
-
ManuelSchneid3r about 8 years@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.
-
Dor over 7 yearsIs this the command that gets executed when clicking "Log Out..." via the GUI ?
-
gioele about 6 yearsUsing
--logout --no-prompt
or--force
instead of just--logout
is a better idea, otherwise a logout prompt will be shown. -
gerlos about 3 yearsThis is way the most useful answer, since
loginctl
workings are independent from the desktop environment, and allow you to terminate even other users sessions, asking sudo password if needed. -
Alex North-Keys over 2 yearsDON'T DO THIS - unless you're sure you have NO other processes running under your user ID. This method will kill everything running as the executing user, including active cron jobs, remoted-in SSH connections, long-running background jobs, etc, etc. Very dangerous approach, even for non root. (and don't start with 9, start with SIGHUP, then SIGTERM, then SIGKILL)