<br><br>On Thursday, March 19, 2015, David Herrmann <<a href="mailto:dh.herrmann@gmail.com">dh.herrmann@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi<br>
<br>
On Mon, Mar 9, 2015 at 3:21 PM, WaLyong Cho <<a href="javascript:;" onclick="_e(event, 'cvml', 'walyong.cho@samsung.com')">walyong.cho@samsung.com</a>> wrote:<br>
> Hi,<br>
><br>
> I want to find best solution on our case. Our product is mobile device.<br>
> But I don't think that is only problem of mobile device. That also can<br>
> be problem of laptop. So, please comment to me.<br>
><br>
> We have some of services are always running after system is started up<br>
> as default. They don't need to be running always. They are just needed<br>
> only charger is plugged in.<br>
> So I thought lets only active them when only charger is plugged in.<br>
><br>
> I thought two methods.<br>
><br>
> method 1:<br>
> Charger also can be detected by udev. So udev hardware activation can be<br>
> used.<br>
> I wrote below udev rules.<br>
><br>
> SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_CHARGE_NOW}=="1",<br>
> TAG+="systemd", ENV{SYSTEMD_WANTS}+="foo.service"<br>
<br>
I guess the problem is, the .device unit is never stopped. Therefore,<br>
when you unplug it, it will not be stopped, as the device is still<br>
there.<br>
<br>
You could try this:<br>
<br>
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_CHARGE_NOW}=="1", \<br>
TAG+="systemd", ENV{SYSTEMD_WANTS}+="foo.service", \<br>
ENV{SYSTEMD_READY}=1<br>
<br>
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_CHARGE_NOW}=="0", \<br>
ENV{SYSTEMD_READY}=0<br>
<br>
It's not particularly nice, as other dependencies on the power-supply<br>
device will now be borked. But as a hack it should work.</blockquote><div><br></div><div>There are some hard test-case. Connect & disconnect within short time and several time. Then does it handle it at udev activation based service launch?</div><div><br></div><div>Another one is that there are lots of services has dependency with charging. Then dose it add it all cases like above? Doesn't better to use target? E.g., charging.target?</div><div><br></div><div>Thank you,</div><div>Kyungmin Park<span></span></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
I cannot think of a better way to support udev-activation based on<br>
attribute-changes. We never explicitly supported it. Hmm..</blockquote><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Thanks<br>
David<br>
<br>
> It looked working well. foo.service is only activated when charger was<br>
> plugged in.<br>
> But I have some of problems with hardware activation.<br>
> I want to be stopped foo.service when the charger is plugged out. As I<br>
> know, this is impossible with udev hardware activation.<br>
> To do this, foo.service have to determine the charger state itself and<br>
> if the charger is plugged out, it have to stop itself.<br>
> And it is working only at the first time.<br>
> After foo.service was activated, I stopped foo.service by "systemctl<br>
> stop foo.service". And plug out and plug in the charger again. Then<br>
> foo.service was not activated. (Is it normal? I did not try to find the<br>
> reason. If you say it's a problem, then I will try to find.)<br>
><br>
><br>
> method 2:<br>
> We have another device daemon. Let's call that as deviced and its<br>
> service name is deviced.service. deviced know about plug in/out of the<br>
> charger.<br>
> So, I made a new charging.target. foo.service have Wants= dependency for<br>
> charging.target. (Installed on charging.target.wants.) And I added<br>
> "BindsTo=charging.target" to foo.service.<br>
> Then foo.service is activated well when the charging.target is entered<br>
> to active state. And also deactivated when charging.target was deactivated.<br>
><br>
> In this method, there are limitations what some of other daemon is<br>
> needed and new charging.target is needed.<br>
><br>
><br>
> Is there any more good way for this?<br>
> I want to find best appropriate way.<br>
><br>
> Thank you in advance for comment.<br>
><br>
> WaLyong<br>
> _______________________________________________<br>
> systemd-devel mailing list<br>
> <a href="javascript:;" onclick="_e(event, 'cvml', 'systemd-devel@lists.freedesktop.org')">systemd-devel@lists.freedesktop.org</a><br>
> <a href="http://lists.freedesktop.org/mailman/listinfo/systemd-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/systemd-devel</a><br>
_______________________________________________<br>
systemd-devel mailing list<br>
<a href="javascript:;" onclick="_e(event, 'cvml', 'systemd-devel@lists.freedesktop.org')">systemd-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/systemd-devel" target="_blank">http://lists.freedesktop.org/mailman/listinfo/systemd-devel</a><br>
</blockquote>