在 Ubuntu 上关机需要 sudo 权限吗?

在 Ubuntu 上关机需要 sudo 权限吗?

我正在寻求将我在 Windows 中最初编写的 Snoozer 应用程序迁移到 AutoIt 上,归根结底它是一个关机 Snoozer。

我列出了看电影或节目入睡的清单,但如果我的电脑整夜开机,我就会醒来。所以我开发了一个应用程序,它会通知您有一个即将关机的项目,您有 10 分钟的时间暂停,否则电脑会关机。该应用程序允许您以 Y 为间隔重复此提示 X 次。

我的问题是,在 Ubuntu 中,我需要 sudo 权限才能关机。如果是这样,我该如何防止应用程序不断要求用户以 sudo 身份进行身份验证才能正确关闭系统?

答案1

是的,用户需要有 sudo 权限,但无论如何您可以使用 NOPASSWD 跳过密码验证。

要允许用户运行特定命令(在本例中为关机命令),请编辑 /etc/sudoers 文件,例如:

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

更详细的版本更适合您的要求(用户可以使用 关闭sudo shutdown -h now并使用 重新启动sudo reboot。希望关闭系统的用户也可以使用poweroffhalt无需密码):

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

您可以使用以下命令来显示用户可以运行哪些命令,这将告诉我们用户可以使用 sudo 运行哪些命令:

sudo -U user –l

答案2

很久以前,我曾为有同样问题的人写过这篇文章。我不知道它是否还能用,现在也无法测试,因为我不想重新启动 :-)。

干得好:

#!/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()

相关内容