Se mais de uma pessoa estiver conectada no meu computador, o Ubuntu exigirá autenticação de superusuário ao desligar o computador. Como posso fazê-lo para que qualquer usuário possa desligar o computador sem ser solicitada uma senha?
Se mais de uma pessoa estiver conectada no meu computador, o Ubuntu exigirá autenticação de superusuário ao desligar o computador. Como posso fazê-lo para que qualquer usuário possa desligar o computador sem ser solicitada uma senha?
Respostas:
Você não precisa de uma solução alternativa, basta alterar a política para permitir que você desligue sem se autenticar como administrador para desligar e reiniciar quando vários usuários estiverem conectados.
Edite o arquivo /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy usando seu editor de texto favorito. Você precisará de permissões de root.
Altere a seção relativa ao desligamento quando outros estiverem conectados a partir de
<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>auth_admin_keep</allow_active>
</defaults>
</action>
para
<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>
e a seção relativa à reinicialização quando outras pessoas fizerem login a partir de
<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>auth_admin_keep</allow_active>
</defaults>
</action>
para
<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>
E isso permitirá que você desligue e reinicie o PC quando vários usuários estiverem conectados. Se você deseja fazer isso, é uma pergunta diferente.
A resposta de Richard Holloway não é realmente a maneira como as autorizações do PolickKit devem ser concedidas. Os arquivos instalados em /usr/share/polkit-1/actions
não devem ser modificados. Em vez disso, você deve modificar as autoridades sob /etc/polkit-1/localauthority/50-local.d/
.
Veja como você faz isso para esta pergunta:
Crie um arquivo nomeado /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown.pkla
e edite-o usando o sudoedit
seguinte:
[Allow all users to shutdown]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.stop-multiple-users
ResultInactive=no
ResultActive=yes
Em seguida, crie outro .pkla
arquivo no mesmo diretório. Use qualquer nome que você queira terminar .pkla
, por exemplo allow_all_users_to_restart.pkla
, e preencha-o com este conteúdo:
[Allow all users to restart]
Identity=unix-user:*
Action=org.freedesktop.consolekit.system.restart-multiple-users
ResultInactive=no
ResultActive=yes
/var/lib/polkit-1/localauthority/50-local.d
e a linha adicional ResultAny=yes
era necessária para os dois arquivos. A única mensagem de aviso que recebo agora é Failed to set wall message, ignoring: Interactive authentication required.
, mas desligar e reiniciar funciona corretamente agora.
sysctl poweroff -i
requer org.freedesktop.login1.power-off-multiple-sessions
, então eu Action=org.freedesktop.login1.power-off-multiple-sessions
Há um caminho melhor. Se você tiver o dbus-send instalado, poderá desligar o dbus sem precisar escalar para obter privilégios de root .
Não me lembro da página onde está a documentação, mas um usuário do Archlinux descobriu isso.
Desligar:
dbus-send --system --print-reply --dest=org.freedesktop.Hal \
/org/freedesktop/Hal/devices/computer \
org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
Reinicialização:
dbus-send --system --print-reply --dest=org.freedesktop.Hal \
/org/freedesktop/Hal/devices/computer \
org.freedesktop.Hal.Device.SystemPowerManagement.Reboot
Suspender:
dbus-send --system --print-reply --dest=org.freedesktop.Hal \
/org/freedesktop/Hal/devices/computer \
org.freedesktop.Hal.Device.SystemPowerManagement.Suspend int32:1
Hibernação:
dbus-send --system --print-reply --dest=org.freedesktop.Hal \
/org/freedesktop/Hal/devices/computer \
org.freedesktop.Hal.Device.SystemPowerManagement.Hibernate
Saudações.
Agora, o HAL parece estar depreciado e não instalado nas versões mais recentes do Ubuntu.
Você deve usar ConsoleKit e uPower serviços dbus para gerenciar estado de energia
Desligar:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
Reiniciar:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
Suspender:
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend
Hibernação:
dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate
Obrigado aos fóruns do Arch Linux .
Isso funciona por enquanto no Precise e Quantal, mas não sei há quanto tempo o foco do Freedesktop parece ter mudado do ConsoleKit para o systemd. Não sei se a Canonical se importa ...
Isso funciona em 14.04. Uma variação atualizada da resposta correta anterior de IMO por Flimm .
sudo mkdir -p /etc/polkit-1/localauthority/50-local.d
sudoedit /etc/polkit-1/localauthority/50-local.d/allow_all_users_to_shutdown_reboot_suspend.pkla
Cole isso dentro:
[Allow all users to shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.power-off-multiple-sessions
ResultActive=yes
[Allow all users to reboot]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot-multiple-sessions
ResultActive=yes
[Allow all users to suspend]
Identity=unix-user:*
Action=org.freedesktop.login1.suspend-multiple-sessions
ResultActive=yes
[Allow all users to ignore inhibit of shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.power-off-ignore-inhibit
ResultActive=yes
[Allow all users to ignore inhibit of reboot]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot-ignore-inhibit
ResultActive=yes
[Allow all users to ignore inhibit of suspend]
Identity=unix-user:*
Action=org.freedesktop.login1.suspend-ignore-inhibit
ResultActive=yes
Não há como burlar a solicitação de uma senha de superusuário ao reiniciar enquanto outros usuários fazem logon antes de abrir uma janela do terminal e emitir o reboot
comando como root:
sudo reboot
Mesmo assim, se não estiver configurado para ignorar a solicitação de senha para sua conta de usuário, sudo
também solicitará sua senha.
Não se preocupe, estas são boas coisas. A reinicialização deve ser rara e um simples prompt de senha de administrador salva acidentalmente a mangueira!
Adicione parada e / ou reinicialização no arquivo sudoers atribuído ao grupo / usuário que você deseja permitir que execute esta tarefa. Dessa forma, você ainda pode controlar quem pode desligar, mas sem fornecer a eles acesso root completo à máquina.
http://linux.byexamples.com/archives/315/how-to-shutdown-and-reboot-without-sudo-password/
Aparentemente, você pode desligar sem raiz a partir da GUI porque o gdm é executado como raiz. O Gnome diz ao gdm para desligar, e o gdm faz isso.
Você poderia fazer algo semelhante com um script. Não sei ao certo como você é útil com o BASH, mas acredito que se possa escrever um script que seja executado como root e, quando recebe um determinado sinal, executa o comando shutdown.
Lembre-se de que isso pode representar um problema de segurança.