Since version 0.20, power-profiles-daemon exposes its DBus interface under "org.freedesktop.UPower.PowerProfiles" alongside the previous name. To be compatible with PPD, this commit implements the same change into tuned-ppd. Resolves: #683
65 lines
2 KiB
Python
Executable file
65 lines
2 KiB
Python
Executable file
#!/usr/bin/python3 -Es
|
|
import sys
|
|
import os
|
|
import dbus
|
|
import signal
|
|
import argparse
|
|
import logging
|
|
from dbus.mainloop.glib import DBusGMainLoop
|
|
from tuned import exports, logs
|
|
from tuned.ppd import controller
|
|
import tuned.consts as consts
|
|
|
|
|
|
def handle_signal(signal_number, handler):
|
|
def handler_wrapper(_signal_number, _frame):
|
|
if signal_number == _signal_number:
|
|
handler()
|
|
signal.signal(signal_number, handler_wrapper)
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="PPD compatibility daemon.")
|
|
parser.add_argument("--debug", "-D", action="store_true", help="log debugging messages")
|
|
parser.add_argument(
|
|
"--log",
|
|
"-l",
|
|
nargs="?",
|
|
const=consts.PPD_LOG_FILE,
|
|
help="log to a file, default is " + consts.PPD_LOG_FILE,
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
log = logs.get()
|
|
|
|
if args.debug:
|
|
log.setLevel(logging.DEBUG)
|
|
|
|
if args.log:
|
|
log.switch_to_file(args.log)
|
|
|
|
if os.geteuid() != 0:
|
|
print("Superuser permissions are required to run the daemon.", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
DBusGMainLoop(set_as_default=True)
|
|
bus = dbus.SystemBus()
|
|
try:
|
|
tuned_object = bus.get_object(consts.DBUS_BUS, consts.DBUS_OBJECT)
|
|
except dbus.exceptions.DBusException:
|
|
print("TuneD not found on the DBus, ensure that it is running.", file=sys.stderr)
|
|
sys.exit(1)
|
|
tuned_iface = dbus.Interface(tuned_object, consts.DBUS_INTERFACE)
|
|
|
|
controller = controller.Controller(bus, tuned_iface)
|
|
|
|
handle_signal(signal.SIGINT, controller.terminate)
|
|
handle_signal(signal.SIGTERM, controller.terminate)
|
|
handle_signal(signal.SIGHUP, controller.initialize)
|
|
|
|
for name_dict in consts.PPD_DBUS_NAMES:
|
|
dbus_exporter = exports.dbus_with_properties.DBusExporterWithProperties(
|
|
name_dict["bus"], name_dict["interface"], name_dict["object"], name_dict["namespace"])
|
|
exports.register_exporter(dbus_exporter)
|
|
|
|
exports.register_object(controller)
|
|
controller.run()
|