Не работает перезагрузка и выключение от пользователя - Свежая установка

Здравствуйте! При нажатии на кнопку выключения или перезагрузки экран темнеет (курсор мыши при этом не пропадает), а компьютер перестает реагировать на действия пользователя. Требуемого действия - перезагрузки или выключения - при этом не происходит. единственное, что продолжает работать, это выход в консоль по CTRL ALT F{1…9}.
как дать возможность пользователю перезагружать и выключать компьютер?
группы, в которые добавлен юзер (altima):

disk
lp
wheel
uucp
audio
cdrom
dialout
video
cdrw
usb
users
games
plugdev
scanner
polkituser
lpadmin
altima
vboxusers

у меня не воспроизводится

Как долго ожидали после нажатия на пункт с нужным вариантом завершения работы? если залогиниться в текстовую консоль (без гуи) и попробовать также нажать на кнопку питания - отключится? а если выполнить loginctl reboot?

вероятно, какая-то подсказка может оказаться в /var/log/messages после такого нажатия. при следующей загрузке можно попробовать почитать, есть ли там что-то содержательное, а также можно попробовать перед таким действием в консоли сделать tail -f /var/log/messages и переключиться в нее после нажатия на кнопку.

также не повредят более общие вопросы: UEFI? видео драйвер? релиз или ночная сборка?

спасибо! посмотрел на вывод messages после нажатия на завершение работы через интерфейс. пишет segfault в kmix. остальное вроде бы нормально.

при этом экран почернел, а Chrome продолжает работать, как ни в чем не бывало…
по итогу: закрывается почти все, что касается плазмы, а дальше ничего не происходит. при этом можно нажать ALT+F2 и вручную стартануть плазму с помощью kstart5 plasmashell или даже сделать это из терминала, потому что он преспокойно вызывается по Ctrl Alt T.
messages выдает вот такое:

Mar 12 01:02:54 calculate dbus-daemon[6273]: [session uid=1000 pid=6271] Activating service name=‘org.kde.LogoutPrompt’ requested by ‘:1.19’ (uid=1000 pid=6403 comm="/usr/bin/plasmashell “)
Mar 12 01:02:54 calculate dbus-daemon[6273]: [session uid=1000 pid=6271] Successfully activated service ‘org.kde.LogoutPrompt’
Mar 12 01:02:56 calculate dbus-daemon[6273]: [session uid=1000 pid=6271] Activating service name=‘org.kde.Shutdown’ requeste
d by ‘:1.11’ (uid=1000 pid=6373 comm=”/usr/bin/ksmserver “)
Mar 12 01:02:56 calculate dbus-daemon[6273]: [session uid=1000 pid=6271] Successfully activated service ‘org.kde.Shutdown’
Mar 12 01:02:56 calculate dbus-daemon[6273]: [session uid=1000 pid=6271] Activating service name=‘org.kde.kdeconnect’ reques
ted by ‘:1.19’ (uid=1000 pid=6403 comm=”/usr/bin/plasmashell “)
Mar 12 01:02:56 calculate dbus-daemon[6273]: [session uid=1000 pid=6271] Successfully activated service ‘org.kde.kdeconnect’
Mar 12 01:02:56 calculate dbus-daemon[6273]: [session uid=1000 pid=6271] Activating service name=‘org.freedesktop.Notificati
ons’ requested by ‘:1.68’ (uid=1000 pid=7308 comm=”/usr/lib64/libexec/kdeconnectd ")

а и еще! в messages пишет такое:
pam_ldap: missing file “/etc/ldap.conf”
это может быть связано?

попробовал также loginctl reboot,
и вот, что выдало:

==== AUTHENTICATING FOR org.freedesktop.login1.reboot ====
Authentication is required to reboot the system.
Authenticating as: root
Password:

некоторое время висело приглашение ввести пароль рута, потом выдало такую ошибку:

polkit-agent-helper-1: pam_authenticate failed: Authentication failure

я посмотрел в файл /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy и отредактировал его так:

<policyconfig>

  <action id="org.freedesktop.consolekit.system.stop">
    <description>Stop the system</description>
    <message>System policy prevents stopping the system</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

  <action id="org.freedesktop.consolekit.system.stop-multiple-users">
    <description>Stop the system when multiple users are logged in</description>
    <message>System policy prevents stopping the system when other users are logged in</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

  <action id="org.freedesktop.consolekit.system.restart">
    <description>Restart the system</description>
    <message>System policy prevents restarting the system</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

  <action id="org.freedesktop.consolekit.system.restart-multiple-users">
    <description>Restart the system when multiple users are logged in</description>
    <message>System policy prevents restarting the system when other users are logged in</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

  <action id="org.freedesktop.consolekit.system.suspend">
    <description>Suspend the system</description>
    <message>System policy prevents suspending the system</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

  <action id="org.freedesktop.consolekit.system.suspend-multiple-users">
    <description>Suspend the system when multiple users are logged in</description>
    <message>System policy prevents suspending the system when other users are logged in</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

  <action id="org.freedesktop.consolekit.system.hibernate">
    <description>Hibernate the system</description>
    <message>System policy prevents hibernating the system</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

  <action id="org.freedesktop.consolekit.system.hibernate-multiple-users">
    <description>Hibernate the system when multiple users are logged in</description>
    <message>System policy prevents hibernating the system when other users are logged in</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

  <action id="org.freedesktop.consolekit.system.hybridsleep">
    <description>Hybrid sleep the system (sleep + hibernate)</description>
    <message>System policy prevents hybrid sleeping the system</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>

  <action id="org.freedesktop.consolekit.system.hybridsleep-multiple-users">
    <description>Hybrid sleep the system (sleep + hibernate) when multiple users are logged in</description>
    <message>System policy prevents hybrid sleeping the system when other users are logged in</message>
    <defaults>
      <allow_inactive>no</allow_inactive>
      <allow_active>yes</allow_active>
    </defaults>
  </action>
</policyconfig>

Но ничего не изменилось.

разобрался!
по соседству с тем файлом еще лежит файл /usr/share/polkit-1/actions/org.freedesktop.login1.policy
вот в нем есть пункты типа:

<action id="org.freedesktop.login1.reboot">                                                                          
               <description gettext-domain="systemd">Reboot the system</description>                                        
               <message gettext-domain="elogind">Authentication is required to reboot the system.</message>                 
               <defaults>                                                                                                   
                       <allow_any>yes</allow_any>                                                                           
                       <allow_inactive>yes</allow_inactive>                                                                 
                       <allow_active>yes</allow_active>                                                                     
               </defaults>                                                                                                  
               <annotate key="org.freedesktop.policykit.imply">org.freedesktop.login1.set-wall-message</annotate>           
       </action>

и в них надо заменить значение auth_admin_keep на yes в нужных пунктах. почему это не сделано из коробки, ума не приложу.

1 Like

а и еще! в messages пишет такое:
pam_ldap: missing file “/etc/ldap.conf”
это может быть связано?

эта ошибка может быть вызвано тем, что LDAP не используется, например, вовсе, но в pam правилах присутствует. но в данном случае это не проблема.

и в них надо заменить значение auth_admin_keep на yes в нужных пунктах. почему это не сделано из коробки, ума не приложу.

как я понимаю, это сделано для того, чтобы не админ не мог остановить машину. вероятно, беда все же в том, что polkit настроен определять админа по присутствию в группе с gid=0. А это не wheel, а root. может быть имеет смысл вернуть как было и попробовать добавить себя в эту группу)

1 Like

а юзеру тогда не будет позволено слишком многое?

может быть имеет смысл вернуть как было и попробовать добавить себя в эту группу

так это не сработало =(

да, затупил. там не группа 0 проверяется, там пользователь 0 проверяется) потому и не помогло.

вообще разумеется. можно, к примеру, завести отдельную группу, описывающую пользователей, которые имеют право перезагружать машину, и прописать соответствующее правило в /etc/polkit-1/rules.d/50-default.rules.
но, повторюсь, в нашей системе используется чуть более очевидное и стандартное правило:

админ - только пользователь root.
право насильно ребутать систему имеет только админ.
стандартно ребутать может также активный пользователь - тот, который сейчас числится активным (залогинен через elogind/consolekit и его сессия открыта на экране).
насильно ребутать в обход требований некоторых приложений подождать (inhibit) или в ситуации, когда залогинены много пользователей (multiple-sessions) - только админ.

возможно беда кроется в том, что сессия почему-то не числится активной - например при заходе через ssh или использовании механизма входа, который не отслеживает активность сессии.

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

я понял. проблема, на самом деле, при любой установке Calculate с KDE наблюдается. Может быть дело в том, что в Calculate не используется Systemd? - это теоретический вопрос. а практический - когда я разрешаю всем пользователям ребутать и выключать машину, пропадает пункт меню, соответствующий Suspend. ну и сам ребут/выключение занимает примерно 4 секунды от нажатия до фактическую обработки события… странно это все.

о какой сборке идет речь? Я поставил cld, но проблемы с ребутом не наблюдаю - все работает как полагается. полноценно отрабатывает отслеживание активного логина. отключение средствами системы может не очень деликатно обходимться к пользовательскими процессами - пошлет им sigterm, а если те проигнорируют - sigkill. но однако это и в наших системах отлавливается и осуществлялся выход пользователя перед включением подобного поведения.

я качал отсюда

и перед этим качал и устанавливал родителям (там все было по дефолту) и тоже имел вышеописанные проблемы.