LINUX.ORG.RU

Несколько вопросов по выключению, ждущему режиму, lightdm

 , , ,


0

2

Здравствуйте. Я использую Awesome и встал вопрос о том, чтобы грамотно оформить вход в систему, выключение и прочее. В связи с этим возникло несколько вопросов поменьше.

1.) У меня systemd. Если я командую systemctl reboot, systemctl poweroff или что-то ещё такого рода (из пользовательской сессии), то система выключается должным образом. Бывает, что я при этом залогинен на tty, как root. Тогда systemctl скажет: «User root is logged in on /dev/tty1. Please retry operation after closing inhibitors and logging out other users. Alternatively, ignore inhibitors and users with 'systemctl suspend -i'.» Если выполню с -i, то всё пройдёт, как надо. Однако, меня удивляет, что я, будучи пользователем, могу без ввода админского пароля (специально ради теста поставил пароли на sudo и polkit-1, обычно у меня они без пароля, ибо я - единственный постоянный пользователь компа) так жестоко прервать его сессию. Почему так? Где и как это настроить?

2.) В качестве DM использую lightdm. У него есть программа-клиент dm-tool, через неё можно заблокировать X-сессию или выйти в смену пользователя. Тем не менее, я не нашёл у него опции, позволяющей выключиться/перезагрузиться/уйти в ждущий режим. Почитав исходники lightdm, я понял, что он делает это всё через logind. Правильно ли я понимаю, что это, по сути, тот же systemctl reboot/poweroff/suspend?

3.) Как пользователи чистых WM вообще реализуют удобный вход/выход/спячку? Чувствую, что горожу костыли, вписывая systemctl в меню awesome

Заранее спасибо.

★★

Последнее исправление: Valdor (всего исправлений: 1)

  1. Почему так? Где и как это настроить?

    В systemctl выполняется только предварительная проверка на наличие ингибиторов и сессий других пользователей. Окончательные проверки выполняются уже внутри logind, которому направляется запрос на выключение/ребут/etc.

    Так вот, если есть сессии помимо активной, то logind запрашивает у polkit разрешение на действие org.freedesktop.login1.{hibernate,suspend,reboot,power-off}-multiple-sessions, а не org.freedesktop.login1.{hibernate,suspend,reboot,power-off}.

    По умолчанию первый набор действий (*-multiple-sessions), как и второй, тоже разрешён любому активному пользователю. Дефолт достаточно странный, но это настраивается.

    /etc/polkit-1/rules.d/10-multiple-sessions-require-admin.rules:
    polkit.addRule(function(action, subject) {
    	if (action.id.match(/^org\.freedesktop\.login1\..*-multiple-sessions$/)) {
    		return polkit.Result.AUTH_ADMIN_KEEP;
    	}
    });
    
  2. Почитав исходники lightdm, я понял, что он делает это всё через logind. Правильно ли я понимаю, что это, по сути, тот же systemctl reboot/poweroff/suspend?

    Да, совершенно верно. Если systemctl {reboot,poweroff,suspend,hibernate,hybrid-sleep} запущен не от рута, то запрос перенаправляется в logind. Если от рута — то сразу запускается нужный юнит.

  3. Как пользователи чистых WM вообще реализуют удобный вход/выход/спячку?

    Через systemctl и polkit authentication agent от какого-нибудь DE (/usr/lib/kde4/libexec/polkit-kde-authentication-agent-1, например).

    Чувствую, что горожу костыли, вписывая systemctl в меню awesome

    Нет.
intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 4)
Ответ на: комментарий от intelfx

Спасибо. Вопросов по этой теме больше не имею, но появился другой вопрос. После выхода из suspend, если во время ухода в него у меня играла музыка, через раз начинает лагать pulseaudio, вместо звука какая-то белиберда (но можно уловить мелодию). Проходит, если звук остановить на некоторое время или же скомандовать pasuspender true. Не знаешь ли, как это вылечить, кроме создания вполне очевидного костыля?

Valdor ★★
() автор топика
Ответ на: комментарий от Valdor

В пульсу я не умею, но вообще похоже на косяк с драйверами и ядром. Думаю, pasuspender-костыль вполне оправдан. Только лучше запускать его до саспенда, а прибивать после выхода из.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Ну, видимо, так: pasuspender — systemctl suspend

Хотя, сейчас бэкпортирую сейчас 6 пульсу из тестинга, мб исправится.

Valdor ★★
() автор топика
Последнее исправление: Valdor (всего исправлений: 1)
Ответ на: комментарий от intelfx

Бэкпортирование 6-ой пульсы не помогло. Сейчас бэкпортирую четвёртое ядро из unstable, попробую.

Valdor ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.