diff --git a/ChangeLog b/ChangeLog index b040cf5d9..2b19cb228 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-03-28 Cedric Bail + + * added support for systemd user session. + 2013-03-11 Mike Blumenkrantz * menus are now drawn directly on the compositor canvas diff --git a/NEWS b/NEWS index d8cf3ac99..c5d08c742 100644 --- a/NEWS +++ b/NEWS @@ -45,6 +45,7 @@ Additions: * new option for disabling all pointer warps * added option for preventing all keyboard layout changes * added option for remembering filemanager windows globally + * Added support for systemd user session Changes: Modules: diff --git a/configure.ac b/configure.ac index ef09d46da..34e68dd29 100644 --- a/configure.ac +++ b/configure.ac @@ -205,6 +205,12 @@ if test "x${have_bluetooth}" = "xyes"; then AC_DEFINE_UNQUOTED([HAVE_BLUETOOTH], [1], [Bluetooth is there]) fi +# Detect systemd user session directory properly +EFL_PKG_CHECK_VAR([USER_SESSION_DIR], [systemd], [systemduserunitdir], + [have_systemd_user_session="yes"], [have_systemd_user_session="no"]) +AM_CONDITIONAL([HAVE_SYSTEMD_USER_SESSION], [test "x${have_systemd_user_session}" = "xyes"]) +AC_SUBST([USER_SESSION_DIR]) + execinfo_libs="" AC_CHECK_HEADERS([execinfo.h], [have_execinfo="yes"], [have_execinfo="no"]) if test "x${have_execinfo}" = "xyes" ; then @@ -1009,6 +1015,7 @@ data/etc/Makefile data/etc/sysactions.conf data/icons/Makefile data/backgrounds/Makefile +data/units/Makefile doc/Makefile doc/Doxyfile doc/e.dox diff --git a/data/Makefile.am b/data/Makefile.am index f320e9deb..dbd5a42fa 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -10,4 +10,6 @@ icons \ backgrounds \ flags \ favorites \ -desktop +desktop \ +units + diff --git a/data/units/Makefile.am b/data/units/Makefile.am new file mode 100644 index 000000000..04ed87fb4 --- /dev/null +++ b/data/units/Makefile.am @@ -0,0 +1,9 @@ +AUTOMAKE_OPTIONS = 1.4 foreign +MAINTAINERCLEANFILES = Makefile.in + +if HAVE_SYSTEMD_USER_SESSION +unitsdir = $(USER_SESSION_DIR) +units_DATA = e18.service +endif + +EXTRA_DIST = $(units_DATA) diff --git a/data/units/e18.service b/data/units/e18.service new file mode 100644 index 000000000..79feb4062 --- /dev/null +++ b/data/units/e18.service @@ -0,0 +1,27 @@ +[Unit] +Description=Enlightenment 17 service +Before=end.target +After=xorg.target +Requires=xorg.target +Requires=dbus.socket +Requires=pulseaudio.service +Requires=ssh-agent.service +AllowIsolate=true + +[Service] +Type=notify +#Environment=PATH=uncomment:to:override:your:PATH +Environment=E_START=enlightenment +ExecStart=/usr/bin/enlightenment +Restart=always +RestartPreventExitStatus=0 +RestartSec=2 +StartLimitInterval=30 +StartLimitBurst=7 +KillMode=process +WatchdogSec=1 +TimeoutSec=1 +NotifyAccess=all + +[Install] +WantedBy=wm.target diff --git a/m4/pkg_var.m4 b/m4/pkg_var.m4 new file mode 100644 index 000000000..3d0a309bc --- /dev/null +++ b/m4/pkg_var.m4 @@ -0,0 +1,14 @@ +# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# ------------------------------------------- +# Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([EFL_PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])# PKG_CHECK_VAR + diff --git a/src/bin/e_main.c b/src/bin/e_main.c index 2df3d9657..a6cc382c0 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -187,32 +187,35 @@ main(int argc, char **argv) /* trap deadly bug signals and allow some form of sane recovery */ /* or ability to gdb attach and debug at this point - better than your */ /* wm/desktop vanishing and not knowing what happened */ - TS("Signal Trap"); - action.sa_sigaction = e_sigseg_act; - action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; - sigemptyset(&action.sa_mask); - sigaction(SIGSEGV, &action, NULL); + if (!getenv("NOTIFY_SOCKET")) + { + TS("Signal Trap"); + action.sa_sigaction = e_sigseg_act; + action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; + sigemptyset(&action.sa_mask); + sigaction(SIGSEGV, &action, NULL); - action.sa_sigaction = e_sigill_act; - action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; - sigemptyset(&action.sa_mask); - sigaction(SIGILL, &action, NULL); + action.sa_sigaction = e_sigill_act; + action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; + sigemptyset(&action.sa_mask); + sigaction(SIGILL, &action, NULL); - action.sa_sigaction = e_sigfpe_act; - action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; - sigemptyset(&action.sa_mask); - sigaction(SIGFPE, &action, NULL); + action.sa_sigaction = e_sigfpe_act; + action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; + sigemptyset(&action.sa_mask); + sigaction(SIGFPE, &action, NULL); - action.sa_sigaction = e_sigbus_act; - action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; - sigemptyset(&action.sa_mask); - sigaction(SIGBUS, &action, NULL); + action.sa_sigaction = e_sigbus_act; + action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; + sigemptyset(&action.sa_mask); + sigaction(SIGBUS, &action, NULL); - action.sa_sigaction = e_sigabrt_act; - action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; - sigemptyset(&action.sa_mask); - sigaction(SIGABRT, &action, NULL); - TS("Signal Trap Done"); + action.sa_sigaction = e_sigabrt_act; + action.sa_flags = SA_NODEFER | SA_RESETHAND | SA_SIGINFO; + sigemptyset(&action.sa_mask); + sigaction(SIGABRT, &action, NULL); + TS("Signal Trap Done"); + } t = ecore_time_unix_get(); s = getenv("E_START_TIME");