OSDN Git Service

alsactl: move systemd config to the daemon mode
authorJaroslav Kysela <perex@perex.cz>
Mon, 8 Apr 2013 12:49:31 +0000 (14:49 +0200)
committerJaroslav Kysela <perex@perex.cz>
Mon, 8 Apr 2013 12:51:39 +0000 (14:51 +0200)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
.gitignore
alsactl/90-alsa-restore.rules.in
alsactl/Makefile.am
alsactl/alsa-restore.service.in [deleted file]
alsactl/alsa-state.service.in [new file with mode: 0644]
alsactl/alsa-store.service.in [deleted file]
alsactl/alsactl.c
configure.in

index 546ec6b..096b126 100644 (file)
@@ -25,6 +25,7 @@ ABOUT-NLS
 
 alsactl/alsactl
 alsactl/alsactl_init.7
+alsactl/alsa-state.service
 alsaconf/alsaconf
 alsamixer/alsamixer
 amidi/amidi
index 0bcee5b..fe0e1ed 100644 (file)
@@ -1,2 +1,2 @@
 ACTION=="add", SUBSYSTEM=="sound", KERNEL=="controlC*", KERNELS=="card*", \
-        RUN+="@sbindir@/alsactl restore $attr{number}"
+        RUN+="@sbindir@/alsactl nrestore $attr{number}"
index 8090d02..2a439e9 100644 (file)
@@ -8,7 +8,7 @@ endif
 EXTRA_DIST=alsactl.1 alsactl_init.xml
 
 alsactl_SOURCES=alsactl.c state.c lock.c utils.c init_parse.c daemon.c
-alsactl_CFLAGS=$(AM_CFLAGS) -DSYS_ASOUNDRC=\"$(ASOUND_STATE_DIR)/asound.state\"
+alsactl_CFLAGS=$(AM_CFLAGS) -DSYS_ASOUNDRC=\"$(ASOUND_STATE_DIR)/asound.state\" -DSYS_PIDFILE=\"$(ALSACTL_PIDFILE_DIR)/alsactl.pid\"
 noinst_HEADERS=alsactl.h list.h init_sysdeps.c init_utils_string.c init_utils_run.c init_sysfs.c
 
 dist_udevrules_DATA = \
@@ -17,8 +17,7 @@ dist_udevrules_DATA = \
 if HAVE_SYSTEMD
 
 systemdsystemunit_DATA = \
-       alsa-store.service \
-       alsa-restore.service
+       alsa-state.service
 
 install-data-hook:
        $(MKDIR_P) -m 0755 \
@@ -36,23 +35,18 @@ endif
 edit = \
        $(SED) -r 's,@sbindir\@,$(sbindir),g' < $< > $@ || rm $@
 
-alsa-store.service: alsa-store.service.in
-       $(edit)
-
-alsa-restore.service: alsa-restore.service.in
+alsa-state.service: alsa-state.service.in
        $(edit)
 
 90-alsa-restore.rules: 90-alsa-restore.rules.in
        $(edit)
 
 EXTRA_DIST += \
-       alsa-store.service.in \
-       alsa-restore.service.in \
+       alsa-state.service.in \
        90-alsa-restore.rules.in
 
 CLEANFILES = \
-       alsa-store.service \
-       alsa-restore.service \
+       alsa-state.service \
        90-alsa-restore.rules
 
 %.7: %.xml
diff --git a/alsactl/alsa-restore.service.in b/alsactl/alsa-restore.service.in
deleted file mode 100644 (file)
index e97d196..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-[Unit]
-Description=Restore Sound Card State
-DefaultDependencies=no
-After=sysinit.target
-Before=shutdown.target
-Conflicts=shutdown.target
-
-[Service]
-Type=oneshot
-ExecStart=-@sbindir@/alsactl restore
-StandardOutput=syslog
diff --git a/alsactl/alsa-state.service.in b/alsactl/alsa-state.service.in
new file mode 100644 (file)
index 0000000..119be1b
--- /dev/null
@@ -0,0 +1,11 @@
+[Unit]
+Description=Manage Sound Card State (restore and store)
+DefaultDependencies=no
+After=sysinit.target
+Before=shutdown.target
+Conflicts=shutdown.target
+
+[Service]
+Type=simple
+ExecStart=-@sbindir@/alsactl -s rdaemon
+ExecStop=-@sbindir@/alsactl -s rkill save_and_quit
diff --git a/alsactl/alsa-store.service.in b/alsactl/alsa-store.service.in
deleted file mode 100644 (file)
index 0e2823c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-[Unit]
-Description=Store Sound Card State
-DefaultDependencies=no
-Before=shutdown.target
-
-[Service]
-Type=oneshot
-ExecStart=@sbindir@/alsactl store
-StandardOutput=syslog
index 8a4d9ee..f00cfff 100644 (file)
@@ -159,6 +159,7 @@ int main(int argc, char *argv[])
        int init_fallback = 1; /* new default behavior */
        int period = 5*60;
        int background = 0;
+       int daemoncmd = 0;
        struct arg *a;
        struct option *o;
        int i, j, k, res;
@@ -178,7 +179,7 @@ int main(int argc, char *argv[])
                if ((a->sarg & 0xff) == 0)
                        continue;
                o = &long_option[j];
-               o->name = args->larg;
+               o->name = a->larg;
                o->has_arg = (a->sarg & (ENVARG|FILEARG|INTARG)) != 0;
                o->flag = NULL;
                o->val = a->sarg & 0xff;
@@ -296,12 +297,15 @@ int main(int argc, char *argv[])
                daemon(0, 0);
        }
 
+       cmd = argv[optind];
+       daemoncmd = strcmp(cmd, "daemon") == 0 || strcmp(cmd, "rdaemon") == 0;
+
        if (use_syslog) {
                openlog("alsactl", LOG_CONS|LOG_PID, LOG_DAEMON);
-               syslog(LOG_INFO, "alsactl " SND_UTIL_VERSION_STR " daemon started");
+               if (daemoncmd)
+                       syslog(LOG_INFO, "alsactl " SND_UTIL_VERSION_STR " daemon started");
        }
 
-       cmd = argv[optind];
        if (!strcmp(cmd, "init")) {
                res = init(initfile, cardname);
                snd_config_update_free_global();
@@ -328,7 +332,8 @@ int main(int argc, char *argv[])
 
        snd_config_update_free_global();
        if (use_syslog) {
-               syslog(LOG_INFO, "alsactl daemon stopped");
+               if (daemoncmd)
+                       syslog(LOG_INFO, "alsactl daemon stopped");
                closelog();
        }
        return res < 0 ? -res : 0;
index e0dc883..bcb5321 100644 (file)
@@ -322,6 +322,12 @@ AC_ARG_WITH([asound-state-dir],
         [ASOUND_STATE_DIR="/var/lib/alsa"])
 AC_SUBST(ASOUND_STATE_DIR)
 
+AC_ARG_WITH([alsactl-pidfile-dir],
+        AS_HELP_STRING([--with-alsactl-pidfile-dir=DIR], [Directory to place alsactl.pid file in]),
+        [ALSACTL_PIDFILE_DIR="$withval"],
+        [ALSACTL_PIDFILE_DIR="/var/run"])
+AC_SUBST(ALSACTL_PIDFILE_DIR)
+
 AC_OUTPUT(Makefile alsactl/Makefile alsactl/init/Makefile \
          alsamixer/Makefile amidi/Makefile amixer/Makefile \
          m4/Makefile po/Makefile.in \