Re: user service not starting on login

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12.5.2019 18.08, Matt Zagrabelny wrote:
Hey Mantas and others,

On Thu, May 9, 2019 at 11:57 PM Mantas Mikulėnas <grawity@xxxxxxxxx <mailto:grawity@xxxxxxxxx>> wrote:

    On Fri, May 10, 2019 at 5:22 AM Matt Zagrabelny <mzagrabe@xxxxxxxxx
    <mailto:mzagrabe@xxxxxxxxx>> wrote:

        Greetings,

        I am attempting to get a user service running on my session login.

        The unit is called jack. I've enabled it via:

        $ systemctl --user enable jack

        When I boot up the system and log in I see that it is inactive.
        I can start it manually without issue:

        $ systemctl --user status jack
        ● jack.service - JACK 2
            Loaded: loaded
        (/home/theophilus/.config/systemd/user/jack.service; enabled;
        vendor preset: enabled)
            Active: inactive (dead)

        $ journalctl --user -u jack -b
        -- Logs begin at Thu 2019-05-09 20:54:31 CDT, end at Thu
        2019-05-09 21:13:53 CDT. --
        -- No entries --

        $ systemctl --user cat jack
        # /home/theophilus/.config/systemd/user/jack.service
        [Unit]
        Description=JACK 2
        Before=sound.target
        Before=pulseaudio.service
        Requires=dbus.socket

        [Service]
        Type=dbus
        BusName=org.jackaudio.Controller


    Among other things, the bus name seems to be incorrect. In
    jack2-dbus the only claimed name appears to be "org.jackaudio.service".

        ExecStart=/usr/bin/jack_control start


    The jack_control program does not spawn nor directly execute the
    actual jackd daemon. Instead it *remotely*
    activates org.jackaudio.service through D-Bus (you'll see jackdbus
    under the dbus.service cgroup), then sends it a single method call
    and exits.

    In other words, jack_control is not a Type=dbus service, it's a
    oneshot script that controls another Type=dbus service. You can
    imagine that it's just a wrapper around `dbus-send` or `gdbus call`,
    and is something you'd instead use in JACK's *ExecStartPost=*.

    A direct conversion of jackdbus to a systemd service would look like
    this – because of the way jackdbus is written, it always needs that
    extra command to be sent over D-Bus (either by running `jack_control
    start` or by using the manual tools):

    (~/.config/systemd/user/jack.service)
    [Service]
    Type=dbus
    BusName=org.jackaudio.service
    ExecStart=/usr/bin/jackdbus auto
    #ExecStartPost=/usr/bin/jack_control start
    #ExecStartPost=/usr/bin/gdbus call -e -d org.jackaudio.service -o
    /org/jackaudio/Controller -m org.jackaudio.JackControl.StartServer
    ExecStartPost=/usr/bin/busctl call --user org.jackaudio.service
    /org/jackaudio/Controller org.jackaudio.JackControl StartServer


I used this service file (thank you for providing it!), but it seems jack is still not starting when the user logs in to the session:

$ systemctl --user status jack
● jack.service
   Loaded: loaded (/home/theophilus/.config/systemd/user/jack.service; enabled; vendor preset: enabled)
    Active: inactive (dead)

$ ps -ef | grep jack
theophi+  1200  1183  0 09:30 pts/3    00:00:00 grep jack

$ systemctl --user status jack
● jack.service
   Loaded: loaded (/home/theophilus/.config/systemd/user/jack.service; enabled; vendor preset: enabled)
    Active: inactive (dead)

$ systemctl --user cat jack
# /home/theophilus/.config/systemd/user/jack.service
[Service]
Type=dbus
BusName=org.jackaudio.service
ExecStart=/usr/bin/jackdbus auto
#ExecStartPost=/usr/bin/jack_control start
#ExecStartPost=/usr/bin/gdbus call -e -d org.jackaudio.service -o /org/jackaudio/Controller -m org.jackaudio.JackControl.StartServer ExecStartPost=/usr/bin/busctl call --user org.jackaudio.service /org/jackaudio/Controller org.jackaudio.JackControl StartServer

You are missing:

[Install]
WantedBy=default.target

Then when you enable it, systemd should create a symbolic link in directory
.config/systemd/user/default.target.wants
to your service.

-Topi


$ systemctl --user is-enabled jack
enabled

$ systemctl --user is-active jack
inactive

$ systemctl --user | grep jack

$ systemctl --user | grep bus
at-spi-dbus-bus.service                              loaded active running   Accessibility services bus dbus.service                               loaded active running   D-Bus User Message Bus dbus.socket                              loaded active running   D-Bus User Message Bus Socket

If I start ardour (which makes use of jack) it (ardour) tells me jack is not running.

I can start the jack service:

$ systemctl --user start jack

So...

How can I figure out why it is not starting automatically?

Thanks!

-m

_______________________________________________
systemd-devel mailing list
systemd-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/systemd-devel


_______________________________________________
systemd-devel mailing list
systemd-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/systemd-devel




[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux