- Как пользоваться loginctl
- Основы loginctl
- Синтаксис и опции loginctl
- Как пользоваться loginctl
- 1. Информация о сессиях
- 2. Информация о пользователях
- 3. Переключение на другую сессию
- 4. Завершение сессий и процессов
- 5. Автозапуск серивсов пользователя
- Выводы
- Как узнать под каким пользователем запущена служба?
- Как определить от какого пользователя запущена программа?
- Linux от какого пользователя запущен сервис
Как пользоваться 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.
Как узнать под каким пользователем запущена служба?
есть системд запущенный из-под пользователя и исполняющий сервисы из-под пользователя. это вот как раз systemd –user
минус — запускается только после вхождения пользователя в систему.
есть параметр, позволяющий запускать системные (т.е. запускающиеся вместе с системой, независимо от сессий пользователя) сервисы под конкретным пользователем.
[Service]
User=%user%
Group=%group%
pfg ★★★★★ ( 22.06.22 01:10:14 MSK )
Последнее исправление: pfg 22.06.22 01:14:06 MSK (всего исправлений: 3)
спасибо,
а как проверить уже запущенную службу? под каким юзером она робит
Напиши systemd юнит и укажи в параметре user имя пользователя от имени которого должно запускаться то, что указано в параметре exexstart.
~ ➜ systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-06-22 20:01:11 MSK; 40min ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID: 1152 (dockerd) Tasks: 35 (limit: 37712) Memory: 201.9M CPU: 6.536s CGroup: /system.slice/docker.service ├─1152 /usr/bin/dockerd -H fd:// └─1167 containerd --config /var/run/docker/containerd/containerd.toml --log-level info ~ ➜ ps -u -p 1152 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1152 0.0 0.2 2038084 85624 ? Ssl 20:01 0:00 /usr/bin/dockerd -H fd:// ~ ➜
Как определить от какого пользователя запущена программа?
Доброго дня.
Подскажите пожалуйста как определить от какого имени запущен squid. Проверял командой ps aux | grep squid и вывод следующий:
Скрин
По строкам:
root 22483 0.0 0.0 89984 3588 ? Ss окт18 0:00 /usr/sbin/squid -f /etc/squid/squid.conf
squid 22485 0.0 1.9 165552 76776 ? S окт18 6:04 (squid-1) -f /etc/squid/squid.conf
непонятно от рута или от сквида запущен?
У тебя 2 процесса сквида. Родительский процесс запущен от рута, дочерний процесс работает с правами пользователя.
root запустил первый (точнее PID1 который работает с правами root) который запустил второй от пользователя squid (что задано в конфиге). Вот тебе выхлоп nginx такой же
$ ps aux | grep nginx root 2181 0.0 0.3 159516 1624 ? Ss 08:40 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; www-data 2182 0.0 0.6 159840 3276 ? S 08:40 0:00 nginx: worker process
mandala ★★★★★ ( 24.10.18 08:54:20 MSK )
Последнее исправление: mandala 24.10.18 08:55:42 MSK (всего исправлений: 1)
Хотел поставить rejik а там поле есть где нужно прописать от какого пользователя запущен сквид. мне в итоге то какого пользователя указать?
Linux от какого пользователя запущен сервис
Сообщения: 2078
Благодарности: 143
Конфигурация компьютера | |
Процессор: Intel Core 2 Duo E8500, 3,16 Ghz | |
Материнская плата: Gigabyte GA-EP45-DS3L | |
Память: DDR2, 667 Mhz, 4 GB (dual mode) | |
HDD: ST3500410AS, 500 Gb, SATA | |
Видеокарта: HIS Radeon 4850 IceQ turbo | |
Звук: Realtek ALC888 @ Intel 82801JB ICH10 — High Definition Audio Controller | |
Блок питания: Huntkey, 450 Watt | |
CD/DVD: PHILIPS SPD2514T | |
Монитор: Samsung SyncMaster 743n, 17 « | |
ОС: Windows Corporate, x86 | |
Индекс производительности Windows: 5,9 |
Доброе время суток. Установлен PostGreSQL на Ubuntu20.04. Мне нужно определить от имени какого пользователя работает служба. Не могу это сделать.
Что пробовал:
1. Смотрел файл postgresql@.service в /usr/lib/systemd/system, раздел Service. Не указан пользователь
2. Погуглил. Пробовал смотреть информацию о выводе ps, командой ps -eF | grep postgres. Вывод информации мне непонятен, там вроде не указан пользователь.
postgres 1023 1 0 62707 30240 0 окт22 ? 00:00:02 /usr/lib/postgresql/14/bin/postgres -D /var/lib/postgresql/14/main -c config_file=/etc/postgresql/14/main/postgresql.conf
postgres 1087 1023 0 62732 6836 0 окт22 ? 00:00:00 postgres: 14/main: checkpointer
postgres 1088 1023 0 62707 6088 0 окт22 ? 00:00:13 postgres: 14/main: background writer
postgres 1089 1023 0 62707 10404 0 окт22 ? 00:00:13 postgres: 14/main: walwriter
postgres 1090 1023 0 62813 6952 0 окт22 ? 00:00:00 postgres: 14/main: logical replication launcher