LINUX.ORG.RU

История изменений

Исправление intelfx, (текущая версия) :

  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, :

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

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

    Так вот, если есть сессии помимо активной, то logind запрашивает у PolicyKit разрешение на действие 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, :

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

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

    Так вот, если есть сессии помимо активной, то logind запрашивает у PolicyKit разрешение на действие 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, :

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

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

    Так вот, если есть сессии помимо активной, то logind запрашивает у PolicyKit разрешение на действие 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, :

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

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

    Так вот, если есть сессии помимо активной, то logind запрашивает у PolicyKit разрешение на действие 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

    Нет.