- Как пользоваться loginctl
- Основы loginctl
- Синтаксис и опции loginctl
- Как пользоваться loginctl
- 1. Информация о сессиях
- 2. Информация о пользователях
- 3. Переключение на другую сессию
- 4. Завершение сессий и процессов
- 5. Автозапуск серивсов пользователя
- Выводы
- How to Kill User Session in Linux
- How to Kill User Session in Linux
- Kill Session Using TTY
- Terminate Session using Killall command
- Terminate Session using Kill command
Как пользоваться loginctl
Утилита loginctl входит в набор утилит systemd для управления системой. Она позволяет управлять текущими сессиями пользователей, смотреть список активных пользователей, блокировать экран или вообще завершать сессии, завершать процессы пользователей и многое другое.
Раньше для всего этого приходилось использовать несколько утилит и конфигурационных файлов, а теперь всё находится в одном месте. В этой статье мы рассмотрим как пользоваться loginctl, также для чего эта утилита может пригодится.
Основы loginctl
Утилита loginctl позволяет взаимодействовать со всем, что касается авторизации пользователей. В официальной документации сказано, что loginctl предназначена для контроля менеджера входа в систему systemd-logind. Утилита оперирует такими сущностями:
- Пользователь (user) — любой пользователь зарегистрированный в системе;
- Сессия (session) — авторизация пользователя в системе, каждый вход, за исключением sudo и su, считается новой сессией. Вы можете авторизоваться в нескольких TTY, по SSH или в графическом менеджере входа, это всё будут новые сессии;
- Место (seat) — эта концепция позволяет подключить к компьютеру несколько пар мышек, клавиатур, мониторов и использовать его несколькими пользователями одновременно. Обычно эта возможность не используется и утилита показывает только одно рабочее место.
А теперь, давайте посмотрим на синтаксис и доступные опции loginctl.
Синтаксис и опции loginctl
Синтаксис утилиты довольно простой:
$ loginctl опции команда аргументы
Вот основные команды, которые вы можете использовать:
- list-sessions — вывести список сессий;
- session-status — выводит состояние сессии, дату авторизации, информацию об основных запущенных сервисах и процессах;
- show-session — выводит настройки сессии;
- activate — позволяет переключится на указанную сессию;
- lock-session — блокирует экран для указанной сессии, если ID сессии не задан, блокирует экран для текущей сессии;
- unlock-session — разблокирует экран для указанной сессии;
- kill-session — позволяет завершить сессию, или отправить определённый сигнал всем процессам;
- terminate-session позволяет завершить указанную сессию;
- list-users — выводит список пользователей, которые авторизованы в данный момент;
- user-status — похоже на session-status, выводит дату авторизации, состояние и все запущенные процессы в виде дерева;
- show-user — выводит информацию о пользователе и его текущей сессии без запущенных процессов;
- terminate-user — завершает все сессии пользователя и все его процессы;
- kill-user — отправляет сигнал всем процессам пользователя, по умолчанию будет отправлен SIGTERM;
- list-seats — вывести список рабочих мест;
- seat-status — выводит все процессы запущенные в рамках указанного рабочего места;
- show-seat — выводит настройки рабочего места;
- terminate-seat — завершить все процессы рабочего места.
Настойка рабочих мест не будет рассматриваться в этой статье, поэтому я даже не буду приводить команды для неё. Обрате внимание, что многие команды будут работать только для сессий с графическим интерфейсом, например session-lock или session-unlock не поддерживается для TTY или SSH сессий. А теперь давайте рассмотрим примеры.
Как пользоваться loginctl
1. Информация о сессиях
Вы можете посмотреть все активные сессии пользователей с помощью команды list-sessions:
В данном случае есть две сессии. Первая автовход в графический интерфейс, где запущен Gnome, вторая консольная сессия в TTY3. Здесь по каждой сессии отображается только её идентификатор, имя пользователя и TTY, в которой запущена сессия. Для того чтобы узнать более подробную информацию о каждой сессии используйте команду session-status. Вот так выглядит сессия в графическом интерфейсе:
Здесь видно когда была запущена сессия, её тип, в данном случае X11, а также основные процессы. Консольная сессия в TTY выглядит вот так:
Если вы хотите посмотреть настройки сессии без информации о процессах используйте команду show-session:
Для этой команды можно указать какую именно информацию вы хотите получить с помощью опции -p или —property. Например, для того чтобы получить только тип используйте такую команду:
loginctl show-session 1 —p Type
Для того чтобы получить только значение, без названия свойства используйте опцию —value:
loginctl show-session 1 —p Type —value
2. Информация о пользователях
Просмотр информации о пользователях работает примерно так же, как и просмотр информации о сессиях. Вы можете посмотреть список всех авторизованных пользователей с помощью такой команды:
С помощью команды user-status можно посмотреть подробности и каждом пользователе. Причём здесь будут именно подробности о его сессиях, а не данные пользователя:
В поле Sessions выводятся идентификаторы всех сессий пользователя, причём активная сессия будет отмечена звездочкой. Ниже выводятся Systemd сервисы запущенные от имени этого пользователя и запущенные ими процессы. По умолчанию список процессов может быть сокращён. Если вы хотите видеть все процессы используйте опцию -l или —full:
loginctl user-status 1000 —full
Для того чтобы утилита выводила всю информацию сразу без пагинации используйте опцию —no-pager:
loginctl user-status 1000 —no-pager
3. Переключение на другую сессию
Вы можете переключаться между сессиями используя графический интерфейс, например в Gnome или KDE. Но если вы хотите сделать это в терминале, то нужно использовать loginctl. Например, для того чтобы переключится в сессию с идентификатором 3 используйте команду:
А там вы можете переключится обратно. Это может быть удобнее чем переключаться по TTY с помощью горячих клавиш. Переключившись вы можете заблокировать экран для предыдущей сессии. Для этого используйте команду session-lock. Например:
4. Завершение сессий и процессов
С помощью команд kill-user или kill-session можно завершать процессы, которые запущены от имени пользователя или только определённой сессии. Эти команды работают аналогично консольной утилите kill, а значит с помощью них можно не только завершить процесс, но и отправить ему какой-либо сигнал. Если команде kill-session передать только идентификатор сессии, то она просто завершит её:
Но вы можете отправить какой-либо другой сигнал с помощью опции —signal. По умолчанию отправляется сигнал SIGTERM. Например, для того чтобы передать сигнал SIGKILL используйте команду:
loginctl kill-session 3 —signal SIGKILL
Аналогичная команда существует и для завершения всех процессов пользователя — kill-user. Кроме того есть команда session-terminate. Она делает практически то же самое только не позволяет выбирать сигнал и сразу же завершает все процессы:
loginctl terminate-session 3
5. Автозапуск серивсов пользователя
В Systemd есть поддержка сервисов, запускаемых от имени пользователя. Этими сервисами можно управлять без использования sudo и это довольно удобно. Окружения рабочего стола, например, Gnome уже давно используют эту возможность. Это такие сервисы, для управления которыми используется команда systemctl с опцией —user. Обычно, такие сервисы запускаются когда пользователь авторизуется в системе и останавливаются при выходе. Но иногда возникает необходимость сделать так, чтобы процессы пользователя запускались при загрузке системы, до его авторизации и не завершались с завершением сессии. Вы можете настроить это с помощью loginctl.
Например, для того чтобы это настроить для пользователя sergiy необходимо использовать такую команду loginctl:
loginctl enable-linger sergiy
Посмотреть состояние этого параметра можно с помощью команды user-status. Для отключения используйте команду disable-linger:
Выводы
В этой статье мы рассмотрели как пользоваться loginctl для просмотра информации о сессиях и авторизованных пользователях, а также как завершать сессии пользователей. Как видите утилита довольно проста в использовании и позволяет сделать всё в одном месте.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
How to Kill User Session in Linux
Sometimes you may need to kill one or more user session in Linux. There are several ways to kill user sessions in Linux. You can always kill your own session. But in order to be able to kill other user sessions, you need to have root or sudo privileges. In this article, we will learn how to kill user session in Linux.
How to Kill User Session in Linux
Every user session is a process and in order to kill a user session, you need to find the process responsible for it, and kill it with KILL, PKILL, SIGTERM or SIGKILL command.
SIGTERM is used for graceful termination of process. However, it may be blocked if the process is busy waiting for I/O input. When you run KILL command, it sends SIGTERM command under the hood.
SIGKILL will immediately terminate process along with its child processes. It will terminate the process at any cost, so it is a brute-force way to kill processes.
First we need to find out all user sessions running on your system, using w command.
# w 00:34:21 up 48 days, 23:38, 4 users, load average: 0.79, 0.58, 0.56 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT john pts/0 192.168.1.101 19:47 4:45m 0.04s 0.00s sh /opt/scripts/disk-usage.sh dave pts/1 192.168.1.102 20:35 3:54m 2:23 0.00s sh bash jim pts/2 192.168.1.103 00:27 5.00s 0.08s 0.04s ssh root pts/4 192.168.1.104 00:34 1.00s 0.02s 0.01s w
Kill Session Using TTY
You can kill session process by referring to its TTY column’s value above. Every user session will have TTY value starting with pts/. Here is the command to kill process with TTY value as PTS/1 using pkill command.
Terminate Session using Killall command
You can also terminate all sessions of a specific user using killall command, followed by -u option. Here is the command to terminate all sessions pertaining to user John.
Terminate Session using Kill command
You can also use Kill command to terminate sessions but it is a roundabout process since kill command requires PID of the process to be killed. So first we need to find PID of process running user session. Here is the command to get PID of user session using its TTY value.
Here is an example to get PID of pts/2. It is the second column in the following command’s output.
# ps -ft pts/2 ps -ft pts/2 UID PID PPID C STIME TTY TIME CMD root 12183 10092 0 00:34 pts/2 00:00:00 -bash root 12015 10183 0 00:35 pts/2 00:00:00 ps -ft pts/2
Once you have found out the PID of process, issue kill command to kill it.
In this article, we have seen several ways to kill user sessions in Linux. You can kill it referring to its TTY value, or username or PID, depending on your requirement. But in all cases, you need to have the right privileges to delete user sessions, otherwise the above commands won’t work for you.