LINUX.ORG.RU

[gnome][dbus?][python] Получить сообщение системы о изменении подсветки экрана

 ,


0

0

Хочется в программе поймать сообщение изменения backlight (по fn+F5, fn+F6 по дефолту происходит вроде или из апплета панели) из python программы. Через что это актуально делать? Через dbus? Где найти что по нему передается про подсветку (гугль не находит)?

Всегда думал что это аппаратная фича ноутов т.к. работает даже без ОС. Могу и ошибаться...

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

> Всегда думал что это аппаратная фича ноутов т.к. работает даже без ОС. Могу и ошибаться...

Обычно они об этом сигнализируют через acpi, и через него же можно софтом управлять подсветкой.

kemm
()
% dbus-monitor --system
signal sender=org.freedesktop.DBus -> dest=:1.52 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
   string ":1.52"
signal sender=:1.1 -> dest=(null destination) path=/org/freedesktop/Hal/devices/computer_logicaldev_input; interface=org.freedesktop.Hal.Device; member=Condition
   string "ButtonPressed"
   string "brightness-down"
signal sender=:1.1 -> dest=(null destination) path=/org/freedesktop/Hal/devices/computer_logicaldev_input; interface=org.freedesktop.Hal.Device; member=Condition
   string "ButtonPressed"
   string "brightness-up"
ce_tamotko_za_uzori
()
Ответ на: комментарий от nbdarvin

если запустить dbus-session --session, то при изменении из апплета у меня вылазеет такое

signal sender=:1.18 -> dest=(null destination) serial=128 path=/org/freedesktop/PowerManagement/Backlight; interface=org.freedesktop.PowerManagement.Backlight; member=BrightnessChanged
   uint32 77
signal sender=:1.18 -> dest=(null destination) serial=129 path=/org/freedesktop/PowerManagement/Backlight; interface=org.freedesktop.PowerManagement.Backlight; member=BrightnessChanged
   uint32 84
signal sender=:1.18 -> dest=(null destination) serial=130 path=/org/freedesktop/PowerManagement/Backlight; interface=org.freedesktop.PowerManagement.Backlight; member=BrightnessChanged
   uint32 92
signal sender=:1.18 -> dest=(null destination) serial=131 path=/org/freedesktop/PowerManagement/Backlight; interface=org.freedesktop.PowerManagement.Backlight; member=BrightnessChanged
   uint32 99

а если кнопки ноут жать при этом, то:

method call sender=:1.18 -> dest=org.freedesktop.Notifications serial=136 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=Notify
   string "Управление питанием"
   uint32 0
   string "notification-display-brightness-full"
   string "Яркость"
   string ""
   array [
   ]
   array [
      dict entry(
         string "value"
         variant             int32 100
      )
      dict entry(
         string "x-canonical-private-synchronous"
         variant             string "brightness"
      )
   ]
   int32 -1
method return sender=:1.23 -> dest=:1.18 reply_serial=136
   uint32 0
signal sender=:1.18 -> dest=(null destination) serial=137 path=/org/freedesktop/PowerManagement/Backlight; interface=org.freedesktop.PowerManagement.Backlight; member=BrightnessChanged
   uint32 100
signal sender=:1.23 -> dest=:1.18 serial=169 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=NotificationClosed
   uint32 0
   uint32 1

вообщем org.freedesktop.PowerManagement.Backlight это по ходу то что надо

z0D5e8n7x_2
()
Ответ на: комментарий от z0D5e8n7x_2

Re: [gnome][dbus?][python] Получить сообщение системы о изменении подсветки экрана вообщем накатал я такое:

import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
import gtk

main_loop = DBusGMainLoop()
bus = dbus.SessionBus(mainloop=main_loop)
DBUS_NAME = "org.gnome.PowerManager.Backlight"
DBUS_PATH = "/org/gnome/PowerManager/Backlight"


class GpmNVClockBacklight(dbus.service.Object):
def __init__(self):
bus_name = dbus.service.BusName(DBUS_NAME, bus=bus)
dbus.service.Object.__init__(self, bus_name, DBUS_PATH)


@dbus.service.method(dbus_interface=DBUS_NAME,
in_signature='u', out_signature='s')
def SetBrightness(self, value):
print 'hi!!'
return "Hello,World!"


if __name__=="__main__":
iface = GpmNVClockBacklight()
gtk.main()

интроспекшн выдает такое:

Introspection data:

<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node name="/org/gnome/PowerManager/Backlight">
<interface name="org.freedesktop.DBus.Introspectable">
<method name="Introspect">
<arg direction="out" type="s" />
</method>
</interface>
<interface name="org.gnome.PowerManager.Backlight">
<method name="SetBrightness">
<arg direction="in" type="u" name="value" />
<arg direction="out" type="s" />
</method>
</interface>
</node>

когда меняю яркость оно молчит, хотя по задумке должно говорить hi на экран и hello world по dbus

dbus-monitor --session при запущенном моем скрипте по прежнему говорит при изменении подсветки:

method call sender=:1.135 -> dest=:1.28 serial=1631 path=/org/gnome/PowerManager/Backlight; interface=org.gnome.PowerManager.Backlight; member=SetBrightness
uint32 42
error sender=:1.28 -> dest=:1.135 error_name=org.freedesktop.DBus.GLib.UnmappedError.GpmBacklightError.Code0 reply_serial=1631
string "Cannot set policy brightness"

как я понимаю ему кто то отвечает? как бы отвечать и получать самому вместо этого sender=:1.28?

nbdarvin
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.