<div dir="ltr"><div><div style="font-size:small" class="gmail_default">My fix was terrible.</div><div style="font-size:small" class="gmail_default">Seemed quite random if it would work or not, i tried using Wait / Sleep to pause the app while login1 woke up but sometimes it would work sometimes not.</div><div style="font-size:small" class="gmail_default"></div><div style="font-size:small" class="gmail_default">My new fix is to make a simple gbs script, now the Shutdown option goes like this..</div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default"><b>Public Sub btnShutdown_Click()<br></b></div><div style="font-size:small" class="gmail_default"><b>      Try DBus["system://org.freedesktop.login1"]["/org/freedesktop/login1", "org.freedesktop.login1.Manager"].PowerOff(True)<br>      If Error Then <br>        If RunGBS("PowerOff(True)") Then<br>          Message("DBus error " & Error.Text & "\n\nWill try shell command Shutdown...")<br>          Print ("error " & Error.Text)<br>          If System.Exist("shutdown") Then<br>            FakeDis("Shutting down, Closing programs cleanly\nPlease wait...")<br>            Application.Busy += 1<br>            Shell System.Find("shutdown")<br>            <br>          Endif<br>        Endif<br>      Endif<br></b></div><div style="font-size:small" class="gmail_default"><b>End</b></div><div style="font-size:small" class="gmail_default"><b><br></b></div><b>Public Sub RunGBS(sText As String) As Boolean<br>  <br>  Dim sOut As String, sName As String = Temp("script") & ".gbs"<br>  <br>  File.Save(sName, "#!/usr/bin/env gbs3\nUse \"gb.dbus\"\n" &<br>  "Try DBus[\"system://org.freedesktop.login1\"][\"/org/freedesktop/login1\", \"org.freedesktop.login1.Manager\"]." & <br>  sText & "\nIf Error Then Print \"Error: \" & Error.Text\n")<br>  Chmod sName To "rwxr-x---"<br>  Exec [sName] To sOut<br>  If InStr(sOut, "Error:") Then Return True<br>  Return False<br>  <br>End</b></div><div><br></div><div><br></div><div><div style="font-size:small" class="gmail_default">That works.</div><div style="font-size:small" class="gmail_default">If the running app didn't get login1 interfaces on load then the freshly run gbs script does</div><br></div><div><br></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, 9 Aug 2021 at 21:50, Benoît Minisini <<a href="mailto:g4mba5@gmail.com">g4mba5@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Le 09/08/2021 à 22:27, Bruce Steers a écrit :<br>
> <br>
> <br>
> On Mon, 9 Aug 2021, 19:33 Benoît Minisini, <<a href="mailto:g4mba5@gmail.com" target="_blank">g4mba5@gmail.com</a> <br>
> <mailto:<a href="mailto:g4mba5@gmail.com" target="_blank">g4mba5@gmail.com</a>>> wrote:<br>
> <br>
>     Le 09/08/2021 à 20:24, Bruce Steers a écrit :<br>
>      ><br>
>      > I've fixed the problem with this in my FMain.class ...<br>
>      ><br>
>      > *Static Public Sub _init()<br>
>      > *<br>
>      > *If Not Exist("/tmp/dish_opened") Then<br>
>      >      Wait 2<br>
>      >      File.Save("/tmp/dish_opened", "true")<br>
>      >    Endif<br>
>      ><br>
>      > End*<br>
>      > that gives a couple of seconds and then the<br>
>      > org.freedesktop.login1.Manager.PowerOff() function works<br>
>      > if app is closed and relaunched it finds the file in /tmp/ and<br>
>     does not<br>
>      > wait and dbus is still okay.<br>
>      ><br>
>      ><br>
>      > Seems any call to Dbus like DBus.System.Applications.Exist() in<br>
>     _init()<br>
>      > initialises dbus too early, it finds the login1<br>
>     DBus.System.Applications<br>
>      > but the Interfaces do not work.<br>
> <br>
>     Then the problem is in the application that handles<br>
>     'org.freedesktop.login1.Manager'.<br>
> <br>
> <br>
> Seems quite odd that the login1 interface is not found but the login1 <br>
> Application is unless I restart the program.<br>
<br>
This is why I say it's a problem in the login1 application.<br>
<br>
It registers on the DBus bus, but misteriously does not return the <br>
expected introspection data when you first call <br>
DBus["system://org.freedesktop.login1"]["/org/freedesktop/login1", <br>
"org.freedesktop.login1.Manager"].<br>
<br>
I guess it does return the expected introspection later. The 'gb.dbus' <br>
component does not support DBus objects whose interface changes during <br>
their lifetime.<br>
<br>
I could add a Refresh() method to the DBusApplication class, so that you <br>
can call DBus["system://org.freedesktop.login1"].Refresh() to clear all <br>
the internal caches.<br>
<br>
But anyway you will have to wait an arbitrary amount of time, because <br>
apparently the "org.freedesktop.login1.Manager" interface does not <br>
appear immediately after the "login1" application register to the bus.<br>
<br>
Look at the 'gb.dbus' source code to understand how all that works.<br>
<br>
Regards,<br>
<br>
-- <br>
Benoît Minisini<br>
<br>
----[ <a href="http://gambaswiki.org/wiki/doc/netiquette" rel="noreferrer" target="_blank">http://gambaswiki.org/wiki/doc/netiquette</a> ]----<br>
</blockquote></div></div>