Loginctl user status что это
Перейти к содержимому

Loginctl user status что это

  • автор:

nadejnei.net

loginctl list-sessions ← вывести список сессий
loginctl user-status badass ← вывести список процессов пользователя badass
loginctl show-user badass ← вывести информацию по конкретному юзеру
loginctl kill-user badass убить все процессы пользователя badass
loginctl terminate-user badass ← убить все процессы и сессии пользователя badass
loginctl terminate-session 12072 ← убить сессию №12072
systemctl status sshd ← вывести статус сервиса
systemctl disable sshd ← удалить сервис из автозагрузок при старте системы
systemctl mask sshd ← удалить сервис из автозагрузок при старте системы и делает его включение невозможным
systemctl unmask sshd ← противоположные действия mask
systemctl enable sshd ← включить сервис sshd при запуске системы
systemctl list-units ← вывести список юнитов (название, статусы, дескриптор)
systemctl hibernate ← отправить систему в спячку
systemctl poweroff ← отключить
systemctl reboot ← перезагрузить

systemd.txt · Последнее изменение: 2015/11/03 18:28 (внешнее изменение)

Инструменты страницы

  • Показать исходный текст
  • История страницы
  • Ссылки сюда
  • Наверх

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: GNU Free Documentation License 1.3

Какие полезные команды systemd?

Systemd — это современная система инициализации, а также системный и сервисный менеджер для Linux. Он совместим с традиционными сценариями инициализации System V и LSB (Linux Standard Base), предоставляя при этом расширенные функции для управления системными службами и ресурсами. Она стала системой инициализации по умолчанию для многих популярных дистрибутивов Linux, таких как Fedora, Ubuntu, Debian, openSUSE и Arch Linux.

В этом руководстве я рассмотрю некоторые из наиболее полезных команд systemd. Я объясню, что делает каждая команда systemd, а также приведу несколько примеров использования.

1. systemdctl

systemctl — это инструмент командной строки, который позволяет вам взаимодействовать с системой systemd и диспетчером служб в Linux с поддержкой systemd. Он предоставляет широкий спектр функций для контроля и управления службами, блоками и состояниями системы.

systemctl status [service]

Проверьте статус службы или подразделения.

systemctl start [service]

Запустите службу или подразделение.

systemctl stop [service]

Остановить службу или подразделение.

systemctl restart [service]

Перезапустите службу или модуль.

systemctl reload [service]

Перезагрузите конфигурацию службы, не перезапуская ее (если поддерживается).

systemctl enable [service]

Включите запуск службы при загрузке.

systemctl disable [service]

Отключить запуск службы при загрузке.

systemctl list-units

Перечислите все юниты (сервисы, монтирования, устройства и т. д.), которыми управляет systemd.

systemctl list-unit-files

Перечислите все файлы модулей и их включенное/выключенное состояние.

systemctl daemon-reload

Перезагрузите конфигурацию systemd, необходимую после изменения служебных файлов.

2. journalctl

journalctl — это команда для запроса и отображения журналов из журнала systemd в системах Linux. Журнал systemd — это централизованная структурированная система ведения журнала, которая собирает и хранит сообщения журнала от различных компонентов системы, включая ядро, службы и приложения. journalctl предоставляет множество возможностей для фильтрации и просмотра записей журнала, что делает его мощным инструментом для устранения неполадок и мониторинга системных событий.

Показать полный журнал журнала.

journalctl -u [service]

Показать журналы для конкретной службы или подразделения.

journalctl -f

Постоянно показывать новые записи журнала в режиме реального времени (режим отслеживания).

journalctl —since «YYYY-MM-DD HH:MM:SS»

Показать записи журнала с определенной даты и времени.

journalctl —until «YYYY-MM-DD HH:MM:SS»

Показать записи журнала до определенной даты и времени.

journalctl -p [priority]

Показать записи журнала с определенным приоритетом (например, появление, предупреждение, крит, ошибка, предупреждение, уведомление, информация, отладка).

journalctl -k

Показать сообщения журнала ядра.

journalctl —disk-usage

Показать общее использование диска журналом.

3. hostnamectl

hostnamectl — это утилита командной строки для управления именем хоста и связанными с ним параметрами. Он позволяет просматривать и изменять системное имя хоста, а также настраивать статические, временные и красивые имена хостов. Кроме того, он предоставляет информацию о текущей операционной системе, ядре и архитектуре системы.

hostnamectl

Показать текущее имя хоста и связанную с ним информацию.

hostnamectl set-hostname [hostname]

Установите системное имя хоста.

hostnamectl set-chassis [type]

Установите тип корпуса системы (например, настольный компьютер, ноутбук, сервер, виртуальная машина).

hostnamectl set-deployment [environment]

Установите среду развертывания системы (например, разработка, подготовка, производство).

4. timedatectl

timedatectl — это команда, используемая для управления настройками даты, времени и часового пояса. Он предоставляет интерфейс для просмотра и изменения системных часов, настройки часового пояса и настройки протокола сетевого времени (NTP) для синхронизации времени.

timedatectl

Показать информацию о текущем времени, дате и часовом поясе.

timedatectl set-time [time]

Установите системное время.

timedatectl set-timezone [timezone]

Установите системный часовой пояс.

timedatectl set-ntp [true/false]

Включите или отключите синхронизацию сетевого времени (NTP).

5. localectl

localectl — это команда для управления языковыми стандартами системы и настройками раскладки клавиатуры. Он позволяет просматривать и изменять язык системы, кодировку символов и настройки раскладки клавиатуры. Эта утилита упрощает настройку соответствующих языковых стандартов и параметров клавиатуры для вашей системы, обеспечивая надлежащую языковую поддержку и функциональность ввода.

Показать текущую локаль и настройки клавиатуры.

localectl set-locale [locale]

Установите языковой стандарт системы.

localectl list-locales

Список доступных локалей.

localectl set-keymap [keymap]

Установите раскладку клавиатуры системной консоли.

localectl list-keymaps

Список доступных раскладок консоли.

localectl set-x11-keymap [layout] [model] [variant] [options]

Установите раскладку X11 (графическую). При необходимости укажите макет, модель, вариант и параметры.

6. loginctl

loginctl — это команда для управления сеансами пользователей и местами. Он предоставляет интерфейс для взаимодействия и управления различными аспектами пользовательских сеансов, такими как список активных сеансов, отображение статуса пользователя и сеанса, завершение сеансов, а также блокировка или разблокировка сеансов.

Список сеансов пользователей.

loginctl user-status [user]

Показать статус конкретного пользователя.

loginctl show-session [session_id]

Показать подробную информацию о конкретном сеансе.

loginctl show-user [user]

Показать подробную информацию о конкретном пользователе.

loginctl terminate-user [user]

Завершить все сеансы для определенного пользователя.

loginctl terminate-session [session_id]

Завершить конкретный сеанс.

loginctl lock-session [session_id]

Заблокировать конкретный сеанс.

loginctl unlock-session [session_id]

Разблокировать определенный сеанс.

7. systemd-analyze

systemd-analyze — это команда для анализа и диагностики производительности загрузки системы и зависимостей служб в системе systemd и диспетчере служб. Он предоставляет различные параметры для проверки процесса загрузки, выявления служб с медленным запуском и визуализации критической цепочки блоков во время последовательности загрузки. Используя systemd-analyze , вы можете получить представление о производительности загрузки вашей системы и определить потенциальные узкие места или проблемы, которые необходимо решить.

systemd-analyze

Показывает время, затраченное на загрузку системы.

systemd-analyze blame

Показать список служб, отсортированных по времени, затраченному на их инициализацию.

systemd-analyze critical-chain

Показать дерево критической по времени цепочки юнитов во время загрузки.

systemd-analyze plot > boot.svg

Создайте графическое представление процесса загрузки, сохраненное в виде файла SVG.

8. systemd-cgls

systemd-cgls — это команда для отображения иерархии групп управления (cgroups) и связанных с ними процессов в Linux. Группы управления — это функция ядра, которая позволяет вам организовывать, управлять и ограничивать использование ресурсов для групп процессов. systemd-cgls предоставляет простой способ визуализировать иерархию cgroup в виде древовидной структуры, что упрощает изучение распределения ресурсов и управления ими в различных службах и системных компонентах.

systemd-cgls

Показать древовидное представление всех групп управления и их процессов.

9. systemd-cgtop

systemd-cgtop — это команда, которая показывает основные группы управления (cgroups) по использованию ими ресурсов. Он обеспечивает динамическое представление в реальном времени потребления ресурсов, таких как ЦП, память и ввод-вывод, для каждой контрольной группы. Эта утилита похожа по концепции на команду top , но фокусируется конкретно на использовании ресурсов cgroups.

systemd-cgtop

Отображать в режиме реального времени вид сверху групп управления и их использования ресурсов (ЦП, память и ввод-вывод).

10. systemd-delta

systemd-delta — это команда, которая анализирует и отображает различия между файлами модулей systemd, предоставляемыми поставщиком, пользователем и средой выполнения. Это поможет вам определить различия и изменения, внесенные в файлы модулей, что может быть полезно для устранения неполадок или понимания настроек в конфигурации вашей системы.

systemd-delta

Покажите различия между предоставленными поставщиком, предоставленными пользователем файлами и файлами модулей времени выполнения.

systemd-delta —type=masked

Показывать только замаскированные юниты.

systemd-delta —type=extended

Показать только блоки с расширенной конфигурацией.

11. systemd-path

systemd-path — это команда, которая отображает пути и каталоги, используемые системой systemd. Он предоставляет информацию о различных системных каталогах, таких как конфигурация, состояние, кеш, журналы и каталоги данных времени выполнения, среди прочего. Используя systemd-path , вы можете легко определить и найти каталоги, используемые systemd и связанными службами, что может быть полезно при работе с файлами конфигурации, журналами или другими системными данными. Это также может помочь убедиться, что вы работаете с правильными путями при устранении неполадок или настройке конфигурации systemd.

systemd-path

Показать пути к различным системным каталогам (например, состояние, кеш, журналы и т. д.).

systemd-path [name]

Показать путь к определенному каталогу по имени (например, журналы systemd-path).

12. systemd-nspawn

systemd-nspawn — это команда, обеспечивающая функциональность облегченного контейнера. Он позволяет создавать, запускать и управлять изолированными средами, называемыми контейнерами, с помощью существующего ядра Linux и функций systemd, таких как контрольные группы, пространства имен и возможности. systemd-nspawn не так многофункционален, как Docker или LXC, но предлагает простой и понятный подход к запуску контейнеров для различных целей, таких как тестирование, разработка или изолирование приложений. Он может запускать контейнеры из каталогов или образов дисков, а также поддерживает сетевую изоляцию и управление ресурсами.

systemd-nspawn -D [directory]

Запустите контейнер с указанным каталогом в качестве корневой файловой системы.

systemd-nspawn —image [image]

Запустите контейнер с указанным образом диска в качестве его корневой файловой системы.

systemd-nspawn -bD [directory]

Запустите контейнер с указанным каталогом в качестве корневой файловой системы и загрузите его, используя содержащуюся в нем систему инициализации.

systemd-nspawn —private-network

Запустите контейнер с собственным пространством имен частной сети.

13. systemd-machine-id-setup

systemd-machine-id-setup — это команда для инициализации файла /etc/machine-id в Linux. Файл /etc/machine-id содержит уникальный 128-битный идентификатор системы, который используется различными компонентами операционной системы и приложениями для отслеживания системы и ее состояния. Идентификатор машины должен быть уникальным для каждой системы и оставаться неизменным в течение всего срока службы системы, даже если аппаратные компоненты заменены или система переустановлена. Идентификатор машины не должен быть секретом и может использоваться приложениями для различных целей, таких как отслеживание использования системы или поддержка специфичных для системы конфигураций. Как правило, вам не нужно вручную запускать systemd-machine-id-setup , так как он автоматически выполняется во время установки системы или первой загрузки. Однако в некоторых случаях вам может потребоваться запустить его для создания или повторного создания идентификатора машины, например, при создании пользовательских образов системы или клонировании виртуальных машин.

systemd-machine-id-setup

Создайте новый идентификатор машины и сохраните его в /etc/machine-id .

14. systemd-escape

systemd-escape — это команда, которая помогает преобразовать произвольные строки в формат, подходящий для использования в качестве имен модулей systemd, путей к файлам или других идентификаторов. Это особенно полезно при работе со строками, содержащими специальные символы, пробелы или другие элементы, которые не разрешены или могут вызвать конфликты в именах модулей systemd.

systemd-escape [string]

Экранируйте указанную строку для использования в имени модуля systemd.

systemd-escape —unescape [string]

Отменить экранирование ранее экранированной строки.

15. systemd-cat

systemd-cat — это команда, которая позволяет отправлять вывод любой команды или программы непосредственно в журнал systemd. Это может быть полезно для регистрации выходных данных кратковременных процессов или сценариев в журнале systemd, что упрощает анализ, фильтрацию и поиск записей журнала, связанных с этими процессами. Используя systemd-cat , вы можете направить вывод команды или скрипта непосредственно в журнал или запустить команду с systemd-cat в качестве оболочки. Этот инструмент также поддерживает добавление настраиваемых метаданных, таких как приоритет журнала или идентификатор, к захваченным записям журнала, что может помочь с организацией и фильтрацией журналов в журнале. systemd-cat предоставляет простой и удобный способ интеграции пользовательских журналов и выходных данных из различных источников в централизованный журнал systemd, что позволяет лучше управлять журналами и анализировать их.

systemd-cat [command]

Запустите указанную команду и перенаправьте ее вывод в журнал systemd.

16. systemd-notify

systemd-notify — это команда, которая позволяет службам отправлять обновления статуса, отчеты о ходе выполнения или другие уведомления в систему systemd. Это особенно полезно для реализации протоколов готовности службы, сигнализации об изменении состояния службы или сообщения информации о состоянии службы. Службы могут использовать systemd-notify для отправки сообщений в systemd по каналу связи, называемому сокетом уведомлений. Эта утилита поддерживает различные типы сообщений, такие как READY, STATUS, ERRNO, MAINPID и WATCHDOG. Например, служба может использовать сообщение READY, чтобы сообщить systemd, что она успешно запущена и готова обрабатывать запросы. Используя systemd-notify , службы могут более эффективно взаимодействовать с systemd, обеспечивая надлежащее управление службами, мониторинг и координацию. Эта утилита особенно полезна для долго работающих служб или служб со сложными процедурами инициализации, которым необходимо сигнализировать о своем состоянии в systemd.

systemd-notify —ready

Отправьте уведомление в systemd о том, что служба готова.

17. systemd-tmpfiles

systemd-tmpfiles — это инструмент командной строки и связанная с ним система настройки для управления временными файлами и каталогами в Linux с поддержкой systemd. Он предоставляет стандартизированный и гибкий способ создания, очистки и удаления временных файлов и каталогов во время загрузки системы, завершения работы или на периодической основе. systemd-tmpfiles использует файлы конфигурации, расположенные в /usr/lib/tmpfiles.d/ , /etc/tmpfiles.d/ и /run/tmpfiles.d/ , чтобы определить правила и действия для управления временными файлами. Эти файлы конфигурации содержат директивы, определяющие пути к файлам, разрешения на доступ, право собственности и другие атрибуты, а также политики очистки, такие как устаревание и ограничение размера. systemd-tmpfiles обычно запускается systemd автоматически на различных этапах жизненного цикла системы, но его также можно вызывать вручную для выполнения указанных действий, таких как создание или очистка временных файлов и каталогов. Используя systemd-tmpfiles , вы можете обеспечить надлежащее управление временными файлами и каталогами и их очистку, помогая поддерживать чистоту и организованность системы, снижая риск утечки данных и экономя место на диске.

systemd-tmpfiles —create

Создайте временные файлы и каталоги, как указано в файлах конфигурации.

systemd-tmpfiles —clean

Очистите старые файлы и каталоги с истекшим сроком действия, как указано в файлах конфигурации.

18. systemd-run

systemd-run — это команда, которая позволяет запускать команду или сценарий в качестве временной службы systemd или единицы области действия в системах Linux с поддержкой systemd. Временные единицы создаются динамически во время выполнения и автоматически удаляются, когда они больше не нужны или при перезагрузке системы. Эта команда предоставляет широкий спектр параметров для настройки созданных модулей, включая, среди прочего, ограничения ресурсов, зависимости, переменные среды и политики перезапуска.

systemd-run —unit=[name] [command]

Запустите указанную команду как временную службу с заданным именем.

systemd-run —scope [command]

Запустите указанную команду как временную службу в новой области.

19. systemd-mount

systemd-mount — это утилита командной строки, которая позволяет вам монтировать файловые системы и управлять ими с помощью системы systemd. Он предоставляет удобный способ монтирования файловых систем как временных единиц .mount, которые автоматически управляются systemd. Команда также поддерживает различные параметры настройки смонтированных файловых систем, такие как параметры монтирования, тайм-ауты и зависимости от других модулей systemd.

systemd-mount [device] [path]

Смонтируйте указанное устройство по указанному пути, создав модуль монтирования в systemd.

systemd-mount —umount [path]

Размонтируйте указанный путь, остановив соответствующий модуль монтирования systemd.

20. systemd-ask-password

systemd-ask-password позволяет вам безопасно и согласованно запрашивать пользовательские пароли или парольные фразы в Linux с поддержкой systemd. Эта команда обычно используется системными службами или сценариями, требующими проверки подлинности пользователя или секретного ввода, например для монтирования зашифрованных файловых систем или разблокировки защищенных хранилищ ключей. systemd-ask-password работает, отображая запрос пароля пользователю либо на консоли, либо в графическом диалоговом окне, либо через удаленное соединение, в зависимости от среды и доступных агентов паролей. Затем введенный пароль или кодовая фраза безопасно передаются запрашивающей службе или сценарию.

systemd-ask-password

Запросить у пользователя пароль или кодовую фразу с данным сообщением.

21. systemd-inhibit

systemd-inhibit позволяет выполнять программу или сценарий, временно блокируя определенные системные операции, такие как выключение, перезагрузка или спящий режим. Это особенно полезно для обеспечения того, чтобы критические задачи или операции обслуживания не прерывались внезапным изменением состояния системы. systemd-inhibit работает, создавая «блокировку ингибитора», которая предотвращает выполнение указанных системных операций во время работы программы или скрипта. Вы можете указать тип блокировки блокировки и описательную причину ее использования. Общие типы блокировок включают «выключение», «сон», «ожидание» и «приостановка».

systemd-inhibit —what=[operation] [command]

Выполнить указанную команду, блокируя указанную операцию (например, выключение, спящий режим, бездействие).

22. systemd-dissect

systemd-dissect — это инструмент командной строки, который предоставляет функции для проверки и анализа образов дисков и деревьев файловых систем. Это особенно полезно для изучения образов дисков, содержащих файлы операционной системы, например те, которые используются для контейнеров, виртуальных машин или установки системы. Используя systemd-dissect , вы можете легко проверять и анализировать образы дисков и деревья файловых систем, что может быть полезно при работе с контейнерами, виртуальными машинами или создании пользовательских образов систем. Он предоставляет удобный способ проверки содержимого и структуры образов дисков без необходимости монтировать их вручную или использовать несколько инструментов для разных задач.

systemd-dissect [image]

Показать краткую сводку содержимого указанного диска или образа ОС.

systemd-dissect —mount [image]

Смонтировать указанный диск или образ ОС, показав сводку его содержимого.

23. systemd-resolve

systemd-resolve — это команда, входящая в состав службы systemd-resolved , которая обеспечивает разрешение сетевых имен и кэширование в Linux с поддержкой systemd. Команда позволяет запрашивать и управлять преобразователем DNS и кешем, предоставляемым systemd-resolved .

systemd-resolve [hostname]

Преобразуйте указанное имя хоста в IP-адрес с помощью системного преобразователя DNS.

systemd-resolve —status

Показать текущий статус системного преобразователя DNS, включая настроенные DNS-серверы и поисковые домены.

24. systemd-firstboot

systemd-firstboot — это команда, которая позволяет вам инициализировать различные базовые системные настройки в Linux с поддержкой systemd. Обычно он используется во время первой загрузки только что установленной системы или при создании пользовательских образов системы для развертывания. Утилиту можно использовать как в интерактивном, так и в неинтерактивном режимах. В интерактивном режиме systemd-firstboot запрашивает у пользователя необходимую информацию, а в неинтерактивном режиме настройки задаются с помощью параметров командной строки или файлов конфигурации.

systemd-firstboot —setup-machine-id

Настройте идентификатор машины при первой загрузке.

systemd-firstboot —setup-root-password

Установите пароль root при первой загрузке.

Это одни из самых полезных команд systemd для управления различными аспектами вашей системы Linux. Помните, что для большинства этих команд требуются права администратора, поэтому при необходимости добавляйте sudo .

Тех-Детали

(здесь я привожу пример только для libtiff). Перейти в директорию rpmbuild/SPECS, заменить строку Name: libtiff на Name: libtiff3 и собрать rpm:

rpmbuild -ba libtiff.spec 

Теперь перейти в директорию ../RPMS/ и от имени суперпользователя установить новый пакет libtiff3:

rpm -Uvh libtiff3-3.9.7-1.fc18.R.x86_64.rpm 

Теперь более интересная проблема. Сообщение Authentication is required for powering off while other users are logged in и предложение ввести пароль суперпользователя при попытке выключить или перезагрузить компьютер из GDM или пользовательской сессии. Возможно у вас не возникнет этой проблемы, или она будет возникать иногда при попытке выключить компьютер из GDM сразу же после выхода из пользовательской сессии.

У меня эта проблема проявлялась всегда до тех пор, пока я не поправил. что бы вы думали? . инит-скрипт для демона TurboPrint (есть такая замечательная программа для печати, хотя и не бесплатная; настоятельно рекомендую особенно для печати фотографий). У меня установлена старая версия TurboPrint 2.15. Возможно в новых версиях проблема с systemd уже решена, но для обновления TurboPrint придется заплатить. Поскольку установленная версия меня вполне устраивает, то пришлось править скрипты для нее.

Итак, по порядку. Как обнаружить причину такой странной и специфичной для Fedora 18 проблемы? Что мы имеем? Мы загрузили компьютер, пытаемся тут же его выключить и получаем сообщение, что мы не одни в системе! Оказывается, в новой Fedora за сессиями пользователей следит systemd, а просмотреть состояние сессий можно с помощью утилиты loginctl. Так и делаем. Переходим в виртуальную консоль, логинимся от имени рута и набираем loginctl list-sessions. На экран выводится

 SESSION UID USER SEAT c1 4 lp 

Супер! Пользователь lp в системе! Что же он делает?

# loginctl user-status lp lp (4) Since: Tue, 2013-01-15 21:26:02 MSK; 3min 49s ago State: active Sessions: c1 CGroup: name=systemd:/user/lp └ c1 └ 701 /usr/bin/tprintdaemon 0 

Очевидно, это результат запуска системного демона /etc/init.d/tpdaemon, который при старте открывает оболочку для пользователя lp. Как теперь быть? Мигрировать демон на systemd! Здесь я нашел как это сделать. Сначала отключаем демон в init.d:

chkconfig tpdaemon off service tpdaemon stop 

Затем создаем новый сервисный файл для systemd /etc/systemd/system/tprintdaemon.service и записываем в него строки

[Unit] Description=TurboPrintDaemon [Service] Type=forking ExecStart=/usr/bin/tprintdaemon Restart=on-abort [Install] WantedBy=multi-user.target 

Теперь регистрируем и запускаем новый сервис:

systemctl enable tprintdaemon.service systemctl start tprintdaemon.service 

Как это обычно бывает, с первого раза новый подход не принес результата. Выяснилось, что TurboPrint запускает программу turboprint-monitor 0 -hide, которая работает от имени залогинившегося пользователя и действует как демон, что не позволяет systemd и loginctl считать, что этот пользователь успешно разлогинился. Выход из ситуации: убивать turboprint-monitor при выходе пользователя из графической оболочки, благо эта программа запускается при каждом новом логине заново. Как это сделать? Я использую в качестве дисплейного менеджера GDM. В GDM есть прекрасное место, где можно определить действия при выходе из пользовательской сессии: это файл /etc/gdm/PostSession/Default. Вот строки, которые я добавил в этот файл для принудительного завершения turboprint-monitor, а также pulseaudio:

for service in pulseaudio turboprint-monitor ; do PID=$(loginctl user-status $USER | grep "[0-9]\+\s\+\S*$service" | \ sed 's/^[^0-9]\+\([0-9]\+\).*/\1/') [ "$?" == "0" ] && kill $PID done 

Зачем здесь pulseaudio? Оказывается, он большой тормоз и выходит по завершении пользовательской сессии не сразу. Это приводит к задержке очистки пользовательской сессии, и соответственно возможен сценарий, когда пользователь выходит из графической сессии и, сразу пытаясь выключить компьютер из GDM, получает то же невнятное сообщение о присутствии других пользователей с предложением ввести пароль рута.

В общем, systemd в роли менеджера сессий вызывает впечатление пока еще сырого продукта.

Update. Репозиторий MATE обновился! Инструкция по установке здесь. Соответственно проблема с зависимостями и mate-note уходит. Однако автор решил не обновлять сами пакеты до выхода стабильной ветки MATE 1.6, которая ожидается в марте этого года, а это значит, что проблема с caja скорее всего не исправлена. Кроме того, после обновления я заметил, что цвет текста в верхней панели стал почти полностью сливаться с фоном панели, поэтому пришлось добавить в файл $HOME/.gtkrc-2.0 такие строки:

style "my_color" < fg[NORMAL] = "#AAAAAA" > widget "*PanelWidget*" style "my_color" widget "*PanelApplet*" style "my_color" 

Кроме того, я убрал с панели стандартный индикатор раскладки клавиатуры, так как непонятно, как изменить его цвет, да и к тому же он мне не нужен, так как я использую gxneur:

mateconftool-2 -s /desktop/mate/peripherals/keyboard/general/disable_indicator -t bool true 

Update 2. Еще одна проблема. Программа epstopdf стала генерировать пустые pdf с такими сообщениями об ошибке:

Error: /invalidfont in /findfont Operand stack: Times-Roman Execution stack: . Dictionary stack: . Current allocation mode is local Last OS error: Not a directory GPL Ghostscript 9.06: Unrecoverable error, exit code 1 

Выяснилось, что это из-за того, что я установил пакет fontconfig-infinality, который банит шрифты Type 1 в /etc/fonts/infinality/infinality.conf. Чтобы восстановить работу epstopdf, следует закомментировать в этом файле следующие строки:

 selectfont> rejectfont> pattern> patelt name="fontformat" > string>Type 1     
  1. Оставить все как есть. В этом случае все пакеты из старого репозитория MATE, включая Compiz, останутся в системе и будут работать. Если вы не успели проапгрейдить MATE из ошибочного репозитория, то останутся проблемы с зависимостями (libtiff.so.3 и libpcre.so.0), и, вполне возможно, в дальнейшем появятся новые неудовлетворенные зависимости, так как вы, очевидно, не сможете проапгрейдить пакеты MATE из более несуществующего репозитория.
  2. Выбрать и снести выборочные пакеты из старого репозитория MATE c помощью rpm -evh —nodeps. При этом не следует удалять пакеты Compiz, поскольку автор репозитория обещал добавить их в новый репозиторий mate-desktop-extra через неделю, и пока их там нет! Собственно для этого и нужен флаг —nodeps для rpm, так как пакеты Compiz зависят от MATE. После удаления старых пакетов MATE нужно установить новые пакеты командой
yum groupinstall MATE-desktop 

и добавить пакеты из репозитория mate-desktop-extra:

yum install https://dl.dropbox.com/u/105479527/Mate-Desktop/fedora-release-extra-18/mate-desktop-fedora/noarch/mate-desktop-extra-release-18-1.fc18.noarch.rpm yum groupinstall mate-desktop-extra 
rpm -qa tex-* texlive-* | xargs yum -y remove yum install texlive texlive-collection-langcyrillic texlive-disser texlive-mhchem texlive-braket texlive-feynmf texlive-hepparticles texlive-hepnames texlive-subfigure texlive-wrapfig texlive-gost texlive-bibtexu texlive-helvetic texlive-epstopdf texlive-metapost texlive-minted texlive-latexmk texlive-cm-super 

В списке на установку обязательными являются только два пакета: texlive и texlive-collection-langcyrillic. Остальные пакеты из списка не устанавливаются по умолчанию, но я их использую. Кстати, проблему с переносами русских слов, о которой я писал здесь, в новом репозитории кажется уже решили.

How to apply lingering immedeately

As per this answer, I enabled lingering for a user on a headless system. However in loginctl list-sessions , the user is not listed yet. If I login with this user by ssh it is shown, once I disconnect again it is missing. How can I generate the lingering session without restarting the entire system I have unsuccessfully tried to systemctl restart systemd-logind . Edit: My goal is to run a timer controlled by this user. If i try this form a sudo -iu shell after enabling lingering, I get the following error:

$ systemctl --user status servicename Failed to connect to bus: No such file or directory 

If I login per ssh (and a session shows up in loginctl) it works as epxected. But now I noticed it only works within the ssh shell, still not in the sudo shell. So it is in fact probably not related to the session.

asked Aug 15, 2018 at 21:27
324 1 1 gold badge 4 4 silver badges 11 11 bronze badges

You might want to explain why you want to enable linger. Do you want to run user units at boot, such as services or timers? If so, that should work, regardless of sessions. See my answer below. Edit your question if you’d like to explain why you think you need lingering and what you’re trying to accomplish.

Aug 16, 2018 at 1:51

@FilipeBrandenburger thanks for your clarification. My apologies for not including enough information leading to an XY-Problem. I have edited the question to include more information what I try to do and why I though it was wrong. I guess my actual question sohuld have been How to run systemctl in a sudo shell. I will gladly accept your answer — which helped me out of the dead end — and possibly post another question if I cannot resolve the other issue.

Aug 16, 2018 at 16:16

I edited my answer to cover your follow up. In short, you need to export XDG_RUNTIME_DIR=/run/user/$UID when you’re using sudo to become the new user. I hope that helps!

Aug 16, 2018 at 17:48

1 Answer 1

You’re confusing «users» with «sessions» here.

Using loginctl enable-linger myuser will make the user manager for user myuser start at boot (and start immediately if it’s not yet started), but it won’t really start any sessions for the user (those only happen when the user logs in.)

If you use the loginctl list-users command you’ll see the effects of it. You can also use ps -fu myuser to see the user manager ( systemd —user ) running for your user as soon as you enable linger:

[root@myhost ~]# loginctl list-users UID USER 0 root 1 users listed. [root@myhost ~]# ps -fu myuser UID PID PPID C STIME TTY TIME CMD [root@myhost ~]# loginctl enable-linger myuser [root@myhost ~]# ps -fu myuser UID PID PPID C STIME TTY TIME CMD myuser 12345 1 20 18:44 ? 00:00:00 /usr/lib/systemd/systemd --user myuser 12349 12345 0 18:44 ? 00:00:00 (sd-pam) [root@myhost ~]# loginctl list-users UID USER 0 root 1001 myuser 2 users listed. 

But no new sessions for myuser exist, since it’s not logged in through the console, GUI or SSH:

[root@myhost ~]# loginctl list-sessions SESSION UID USER SEAT TTY 1 0 root tty0 1 sessions listed. 

But regardless of sessions, the user manager is started, so if your user has user units (such as services or timers), those will get started at boot regardless of the user having logged in or created a session yet.

I hope that explains it to you.

UPDATE: From your edit to the question, looks like the trouble you’re really having is running systemctl —user commands from a sudo -i shell and not an SSH session.

You can work around that by exporting the XDG_RUNTIME_DIR after you switch to the user, such as:

$ export XDG_RUNTIME_DIR=/run/user/$UID 
$ XDG_RUNTIME_DIR=/run/user/$UID systemctl --user status servicename 

The reason you don’t need that while logging in through SSH is that SSH will authenticate you with PAM and one of the PAM modules will set those environment variables for you. If you use sudo , you don’t go through PAM (at least not the full PAM stack) so you don’t get these properly set.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *