linux停止python代码,使用python关闭计算机(linux)

小编典典

那里的许多Linux发行版都需要超级用户特权才能执行shutdown或halt,但是,如果您坐在计算机上,可以在没有root用户的情况下关闭电源呢?您打开菜单,单击“

关机” ,然后关机,而您却没有成为root对吧?

好吧…这的 基本原理

是,如果您可以物理访问计算机,则可以将电源线拔出并以任何方式关闭电源,因此,如今,尽管可以访问本地系统总线,但许多发行版本仍可以关闭电源通过dbus。问题dbus(或者通过它暴露出来,而服务)?它在不断变化。我建议安装诸如D-feet之类的dbus查看器工具(建议:它仍然很难可视化,但是可能会有所帮助)

如果您仍在使用HAL(即将淘汰),请尝试以下操作:

import dbus

sys_bus = dbus.SystemBus()

hal_srvc = sys_bus.get_object('org.freedesktop.Hal',

'/org/freedesktop/Hal/devices/computer')

pwr_mgmt = dbus.Interface(hal_srvc,

'org.freedesktop.Hal.Device.SystemPowerManagement')

shutdown_method = pwr_mgmt.get_dbus_method("Shutdown")

shutdown_method()

这可以在Ubuntu

12.04上使用(我刚刚关闭计算机电源以确保它可以正常工作)。如果您有较新的东西……很好,可能无法正常工作。这是此方法的缺点:它是非常特定于分发的。

您可能必须安装dbus-python软件包才能正常工作(http://dbus.freedesktop.org/doc/dbus-

python/doc/tutorial.html)

更新1:

我一直在做一些研究,看起来这是通过ConsoleKit在较新的Ubuntu版本中完成的。我已经在Ubuntu

12.04(已弃用的HAL和更新的ConsoleKit)中测试了以下代码,并且确实关闭了计算机:

>>> import dbus

>>> sys_bus = dbus.SystemBus()

>>> ck_srv = sys_bus.get_object('org.freedesktop.ConsoleKit',

'/org/freedesktop/ConsoleKit/Manager')

>>> ck_iface = dbus.Interface(ck_srv, 'org.freedesktop.ConsoleKit.Manager')

>>> stop_method = ck_iface.get_dbus_method("Stop")

>>> stop_method()

更新2:

也许您 为什么 可以不做这些就root应该做更广泛的解释。让我们专注于更新的ConsoleKit(HAL恕我直言,方法更加复杂和混乱)。

这ConsoleKit是一项root在您的系统中运行的服务:

borrajax@borrajax:/tmp$ ps aux|grep console-kit

root 1590 0.0 0.0 1043056 3876 ? Sl Dec05 0:00 /usr/sbin/console-kit-daemon --no-daemon

现在,d-bus仅仅是一个消息传递系统。您有一项服务,例如 ConsoleKit

,它公开了的接口d-bus。公开的方法之一是Stop(如上所示)。 ConsoleKit 的权限由 PolKit

控制(尽管它基于常规的Linux权限)为 “谁可以做什么” 提供了更好的控制。例如, PolKit 可以说诸如

“如果用户登录到计算机,则允许他做某事。如果它是远程连接,则不要。” 。如果 PolKit 确定允许您的用户调用 ConsoleKit

的Stop方法,该请求将通过(或 通过 )传递d-bus到 ConsoleKit

(随后它将关闭计算机,因为它可以…因为它值得…因为它root)

进一步阅读:

总结:没有,您将无法关闭计算机root。但是您可以将正在运行的服务告诉您为root关闭系统。

奖金 :

我在您的意见一个阅读您想耗时的任务,以防止过热一段时间后关闭计算机......你知道吗,你可以 大概

其电源在给定时间使用RTC?(见本和本)很酷,嗯?(当我发现自己可以做到这一点时,我感到非常兴奋。):- D

2020-06-07

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值