Hello Sam and James, I am moving our discussion from Sam's pull request ( https://github.com/sugarlabs/sugar/pull/437) to here because this particular post is bit long.
Regarding James request: "...instead understand how both gnome-settings-daemon and unity-settings-daemon implement what they do (for brightness), and reimplement that in Sugar?" I have been reading GSD (gnome-settings-daemon) sources and I think I am making sense of it. Basically, GSD makes use of a tool called "gsd-backlight-helper", which is provided by GSD. This tool queries Udev for the proper backlight device, and directly reads and writes to the device file. GSD uses a special PolKit action policy to allow unprivileged users to run this tool without root privileges for writing to the device. Examples: [tch@tch polkit-1]$ /usr/libexec/gsd-backlight-helper --get-brightness 4000 [tch@tch polkit-1]$ /usr/libexec/gsd-backlight-helper --get-max-brightness 4437 [tch@tch polkit-1]$ pkexec /usr/libexec/gsd-backlight-helper --set-brightness 4437 Details: 0) when using GSD over DBUS: dbus-send --session --print-reply --dest=org.gnome.SettingsDaemon /org/gnome/SettingsDaemon/Power org.freedesktop.DBus.Properties.Set string:"org.gnome.SettingsDaemon.Power.Screen" string:"Brightness" variant:int32:100 1) which is defined here: https://git.gnome.org/browse/gnome-settings-daemon/tree/plugins/power/gsd-power-manager.c#n82 2) triggers a callback in GSD, which makes a call to "backlight_step_up": https://git.gnome.org/browse/gnome-settings-daemon/tree/plugins/power/gsd-power-manager.c#n2620 3) "backlight_step_up" is defined here: https://git.gnome.org/browse/gnome-settings-daemon/tree/plugins/power/gpm-common.c#n647 4) when running under Linux, "backlight_step_up()" calls to a function called to "backlight_helper_set_value": https://git.gnome.org/browse/gnome-settings-daemon/tree/plugins/power/gpm-common.c#n692 5) then, "backlight_helper_set_value" makes a __system call__ to "gsd-backlight-helper", which is a tool provided by GSD: https://git.gnome.org/browse/gnome-settings-daemon/tree/plugins/power/gpm-common.c#n491 NOTE: this system calls uses pkexec, and requires a PolKit action policy to allow unpriviledge users to write to the device without being root. 6) this "gsd-backlight-helper" tool is implemented here: https://git.gnome.org/browse/gnome-settings-daemon/tree/plugins/power/gsd-backlight-helper.c 7) and uses "gsd_backlight_helper_get_best_backlight" to find the proper device: https://git.gnome.org/browse/gnome-settings-daemon/tree/plugins/power/gsd-backlight-linux.c#n49 8) lastly, the PolKit policy file is here: https://git.gnome.org/browse/gnome-settings-daemon/tree/plugins/power/org.gnome.settings-daemon.plugins.power.policy.in.in Conclusions: It would not be too difficult to re-implement the same mechanism for Sugar. In fact I have re-implemented the exact same functionality provided by "gsd-backlight-helper" in Python. https://github.com/tchx84/sugar-backlight-helper/blob/master/sugar-backlight-helper.py (this also works for the XO btw). @James, can you also give it a try? Regarding the use of a separate tool to deal with permissions, I wonder if GSD deliberately separated that tool to simplify the integration with PolKit. The question is: should we do something similar with sugar? I personally think is a valid option, but I wonder if there is another way of using PolKit to grant permissions directly to Sugar for writing to the device. I don't have much experience with PolKit. @Sam, @James, if we think we can go this direction, I can will some changes on top of Sam's previous work tomorrow. Regards, Martin.
_______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel