Tudo bem, tenho uma solução que funciona bem, pelo menos para mim. Estou executando o Ubuntu 14.04. Eu não testei extensivamente, mas parece fazer o trabalho. Comente se você vir problemas.
Crie regras de Polkit
Execute este comando em um terminal:
gksudo gedit /etc/polkit-1/localauthority/50-local.d/disable-shutdown.pkla
E copie isso para ele:
[Disable shutdown/reboot]
Identity=unix-user:*
Action=org.freedesktop.login1.reboot;org.freedesktop.login1.reboot-multiple-sessions;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-multiple-sessions;
ResultAny=no
ResultInactive=no
ResultActive=no
Salve e feche, depois execute também:
gksudo gedit /etc/polkit-1/localauthority/50-local.d/disable-suspend.pkla
e cole isso:
[Disable suspend/hibernate]
Identity=unix-user:*
Action=org.freedesktop.upower.suspend;org.freedesktop.upower.hibernate;org.freedesktop.login1.suspend;org.freedesktop.login1.suspend-multiple-sessions;org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions
ResultAny=no
ResultInactive=no
ResultActive=no
Salve e feche.
Estes dois arquivos irão dizer ao Ubuntu para não permitir que qualquer usuário inicie uma ação de desligamento, reinicialização, suspensão ou hibernação. Eles podem ser modificados para desativar apenas algumas dessas ações, se desejado.
Editar powerbtn.sh
Execute este comando para editar o script que é executado quando o botão de energia é pressionado:
gksudo gedit /etc/acpi/powerbtn.sh
Sobre a linha 6, insira o seguinte:
initctl emit power-button-press
A parte superior do arquivo deve estar assim:
#!/bin/sh
# /etc/acpi/powerbtn.sh
# Initiates a shutdown when the power putton has been
# pressed.
initctl emit power-button-press
[ -r /usr/share/acpi-support/power-funcs ] && . /usr/share/acpi-support/power-funcs
# If logind is running, it already handles power button presses; desktop
# environments put inhibitors to logind if they want to handle the key
# themselves.
if pidof systemd-logind >/dev/null; then
exit 0
fi
O que isto faz é emitir um sinal que o Upstart irá usar (o que nós vamos fazer em seguida) para alterar as permissões na operação de desligamento. Ele não inibirá o procedimento normal de pressionar o botão liga / desliga, portanto, você ainda verá o menu normal de desligamento do Ubuntu Unity (ou pelo menos eu fiz: P)
Salve e feche o gedit.
Crie trabalhos de Upstart
Eu li em algum lugar que o Ubuntu estará se movendo para systemd em vez de Upstart algum tempo nos próximos lançamentos, então isso funcionará para 14.04 mas pode não ser para liberações depois disso
Execute este comando em um terminal:
gksudo gedit /etc/init/power-button-pressed.conf
Isso criará um novo arquivo, que se tornará uma tarefa executada quando você pressionar o botão liga / desliga.
Copie o seguinte para ele:
description "Allow shutdown when power button is pressed"
start on power-button-press
stop on shutdown
emits power-button-timeout
task
script
mv /etc/polkit-1/localauthority/50-local.d/disable-shutdown.pkla /etc/polkit-1/localauthority/50-local.d/disable-shutdown.ignore 2> /dev/null
mv /etc/polkit-1/localauthority/50-local.d/disable-suspend.pkla /etc/polkit-1/localauthority/50-local.d/disable-suspend.ignore 2> /dev/null
sleep 1m
initctl emit power-button-timeout
end script
pre-stop script
initctl emit power-button-timeout
end script
Salve e feche e execute:
gksudo gedit /etc/init/power-button-restore.conf
e cole isso:
description "Re-disable shutdown, on boot or when signalled"
start on (power-button-timeout or local-filesystems)
task
script
mv /etc/polkit-1/localauthority/50-local.d/disable-shutdown.ignore /etc/polkit-1/localauthority/50-local.d/disable-shutdown.pkla 2> /dev/null
mv /etc/polkit-1/localauthority/50-local.d/disable-suspend.ignore /etc/polkit-1/localauthority/50-local.d/disable-suspend.pkla 2> /dev/null
end script
Eles renomearão temporariamente os arquivos da política de segurança para que eles sejam ignorados, permitindo assim que o usuário desligue, reinicie, suspenda e hiberne. Isso pode, é claro, ser modificado como você deseja apenas para habilitar alguns deles. Após um minuto, os arquivos serão renomeados de volta para o que deveriam ser, desabilitando assim o gerenciamento de energia do usuário mais uma vez. A seção pré-parada deve restaurar as permissões no desligamento. Caso contrário, o segundo trabalho do Upstart será executado na inicialização para restaurar a política.
Isso é tudo que existe para isso! Para os usuários nesta máquina, também ocultei a opção de desligamento do menu do dispositivo, para que os usuários visualizem apenas uma opção de "logout". Execute dconf-editor
, navegue até "apps" > "Indicator-session" e marque "suppress-restart-menuitem" e "suppress-shutdown-menuitem". Isso não faz nada para as permissões, apenas ajuda a não confundir as pessoas quando elas pressionam "Desligar" e isso não funciona.
Então, para esclarecer, agora quando o botão liga / desliga é pressionado, o usuário será apresentado com o menu de energia do Ubuntu, que se o desligamento e reinicialização forem suprimidos mostrará apenas uma opção de logout. Escolha se desconectar e, a partir da tela de login, o menu de desligamento funcionará e o computador poderá ser desligado por um minuto apenas.