Você precisa de direitos sudo para desligar no Ubuntu?

0

Estou procurando migrar um aplicativo Snoozer que escrevi originalmente no Windows no AutoIt, que, quando se trata de um Snoozer de desligamento.

Eu listo dormindo a um filme ou show, mas eu acordo se meu pc passar a noite. Então eu criei um aplicativo que avisa que há um desligamento pendente e você tem 10 minutos para adiar isso, caso contrário, o PC é desligado. O aplicativo permite que você repita este prompt por X vezes e por um intervalo Y.

A minha pergunta é, no Ubuntu eu vou precisar de direitos de sudo para desligar. Em caso afirmativo, como posso evitar que o aplicativo peça continuamente ao usuário para se autenticar como sudo, a fim de desligar o sistema corretamente?

    
por Rudi Strydom 07.11.2012 / 11:31

2 respostas

0

Sim, o usuário precisa ter direitos de sudo, mas você pode usar o NOPASSWD para ignorar a autenticação de senha de qualquer maneira.

Para permitir que um usuário execute comandos específicos, neste caso, o comando shutdown, edite o arquivo / etc / sudoers, por exemplo:

user ALL=/usr/bin/apt-get,/sbin/shutdown

Uma versão mais detalhada que atende melhor às suas necessidades (o usuário pode desligar usando sudo shutdown -h now e reinicializar com sudo reboot . Os usuários que desejarem desligar um sistema também podem usar poweroff ou halt sem senha):

user hostname =NOPASSWD: /sbin/shutdown -h now,/sbin/halt,/sbin/poweroff,/sbin/reboot

Você pode usar o seguinte comando para mostrar o que o usuário pode executar para nos dizer quais comandos o usuário pode executar com o sudo:

sudo -U user –l
    
por Terry Wang 07.11.2012 / 12:28
0

Há muito tempo atrás, escrevi isso para alguém com a mesma pergunta. Não tenho ideia se ainda funciona e não posso testar agora porque não quero reiniciar: -).

Aqui você vai:

#!/usr/bin/env python

import dbus

def main():
    answer = raw_input("Do you really want to shutdown your computer? (Y/n): ")
    if answer in ('y', 'Y', ''):
        bus = dbus.SystemBus()
        bus_object = bus.get_object("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer")
        bus_object.Shutdown(dbus_interface="org.freedesktop.Hal.Device.SystemPowerManagement")

if __name__ == "__main__":
    main()
    
por Timo 07.11.2012 / 13:44